CS Internship Recruiting Guide

by Prashan Dharmasena


Who this guide is for

This guide is primarily meant for freshmen or sophomores, but should be useful to anyone who is new to the tech industry. Though this is primarily for Software Engineering internships, a lot of it can be generalized to other positions (UI/UX, PM, etc.). The “Finding companies” section and onward can apply to anyone who wants to work at a startup.

This guide is meant to help you get to the interview stage. There are a lot of resources out there from people far more qualified than I to help prepare you for the interview stage.

Before you start your search

It can be hard to get your first job when you don’t have any experience. Fortunately, the nice thing about Software Engineering is that you can get a lot of experience on your own.

Working on your own side projects is a really good way to learn new technologies and programming design patterns. http://www.reddit.com/r/beginnerprojects/ has a good list of projects you can do to build up your repertoire of skills. I’d suggest doing some of the projects that involve getting data from the Internet. Your project can be really simple, you just want to show that you can learn new technologies and that you’re passionate about building things.

In general, these are some good things to learn:

  • HTTP / REST APIs — The foundation of how sending data over the Internet works. This is probably the most important technology to learn nowadays. Though, you probably want to learn some other technologies to utilize it.
  • HTML/CSS/JavaScript (Front-end) — What websites are built in. These are good to know, even just a little bit. Having your own website is expected nowadays, even if it just says “Hi, my name is ____.” If you already have some experience with the basics, try learning a front-end framework such as Angular or Meteor.
  • Ruby on Rails / Flask / Django / Node (Back-end) — A backend framework, necessary for any serious web development. No need to learn all of them, just pick one.
  • Mobile Development (iOS / Android)— pretty self explanatory, making an app for your phone.

You should start with either (Front-end + Back-end + HTTP) or (Mobile Dev + HTTP)

If you’re having trouble thinking of side projects, just try and make something you think would be cool. It doesn’t have to be useful or complicated. Throw around ideas with your friends and if you come up with something fun, just run with it. For example, one of the first projects I worked on was http://whatcouldrichpeoplebuy.com/ with my floormate. Working with friends also gives you experience of working in a team and allows you to work on a larger project.

Don’t have time to work on a side project? Go to a hackathon! Not only are they great places to learn and try new things, but it’s great to have a big chunk of time to just work on something. (Free food and trips to big cities are awesome too!) You don’t have to go to every single one or try super hard to win. Personally, I only go to one a semester. I just try and make something fun and new for about 50% of the time and spend the other time just exploring the nearby area.

Once you actually have some projects under your belt, put them up on Github and include links to them in a “Projects” section on your resume.

An important thing to understand is that while prior experience with technologies is always a plus, companies look for people who know how to find answers to problems on their own. They want an intern who can find tutorials online and teach themselves. They don’t want to have to hold your hand throughout your internship. Building your own side-projects is the best way to show them that you can do this.

The downside to this is that because learning all of this stuff is so accessible, it has pretty much become a prerequisite to getting an internship.

Minor side note: If while doing side projects, you never have a moment where you feel like “wow, that was cool!” it might be a good time to reconsider whether or not software engineering is really for you.

Finding companies to apply to

USE ANY REFERRAL YOU CAN GET REFERRALS ARE $$$$$$

A referral pretty much guarantees you an interview and lets you skip everything else in this guide. Ask anyone you can (this includes past interns as well as full-time employees) for a referral and offer to get them a coffee or something in exchange.

In general, I think freshmen should mostly look at smaller startups (<20 employees) and sophomores should look at bigger companies (50+).

You can use CrunchBase and AngelList to find interesting companies to apply to. Not all of them will have job postings, so you should cold email any that don’t have online applications. Hacker News also has a jobs board for YC companies. YC companies are great because in addition to your internship, you’ll be able to talk to the founders about their YC experience. Apply to every single job posting, even if the listing doesn’t explicitly say “Hiring Interns.” But if there is an online application and it isn’t specifically for an internship, send a cold email instead.

Another great way to find companies is by looking at the portfolios of top venture capital firms and accelerators such as 500Startups, Greylock, Andreessen Horowitz, Sequoia, and KPCB. You can usually sort the companies by Enterprise vs Consumer and seed-stage (really early, small startups) vs venture-stage (still startups, but bigger depending on how much funding they have) to narrow down your search.

Career fairs can actually be a good place to find companies and talking to recruiters is the best way to get an interview besides a referral. Impressing recruiters can be difficult though. Generally, most companies at career fairs are looking for juniors or full-time employees. You have to make yourself seem passionate (or at the very least genuinely interested) about their product and show them your experience. Tell them about your projects and what excites you about them. Worst case, you hand out a bunch of resumes and get free stuff.

Software engineering internships are great because interns are pretty much treated as full-time employees. Regardless of if you work at a big company or a small company, you’ll probably have a good experience. Personally, I think you learn a lot more at a smaller startup. You get to touch more things and get a better feel for building a product. But at a bigger company, you might get more technical problems and a better “intern experience.” A bigger company will also look better on your resume for the next year.

There are also a lot of various startup fellowship programs you can apply to. Basically, you apply to the program, and then they will handle matching you up with a startup. Some are location-based (PennApps Fellows / HackNY Fellows) and others are through VC-firms hiring for their portfolio companies (KPCB / First Round Capital). Here are some that I have come across, though this list is far from exhaustive:

Bigger companies also have programs specifically for freshmen and sophomores. Notable ones include Microsoft’s Explore Program, Facebook University, and Google Engineering Practicum.

Cold Emailing

(Shoutout to @jcstoy for teaching me everything I know about cold emailing!)

Please don’t be this guy

Cold emailing can be broken down into the following steps:

  1. Creating an email template
  2. Finding names of relevant people
  3. Finding their email addresses
  4. Personalizing your template to each person
  5. Send emails
  6. Send a follow-up emails

Creating an email template — You want to create a short template email introducing yourself and why you are interested in the company. Leave blanks where you can just insert the person you are emailing and the company itself. You really want to stress your skills and any experience you have. You can use this template as a cover letter when filling out online applications as well!

Finding names — Look up the company on CrunchBase, it should have the founders listed. For companies with recruiters, do a LinkedIn search for “<company-name> recruiter” or ask friends for the names of their recruiters. If you’re interested in a specific team, you can search for people on that team as well.

Getting emails — First off, every company will have a jobs@company.com or careers@company.com email address that you should email as well. As for individuals, we’re going to use a tool called MailTester. This is a tool that checks if an email address exists. Once we have a name, we can brute force common email address patterns such as first name, firstname.lastname, first initial + last name, etc. The domain name will usually be the company’s website domain.

For example, if we were looking for John Doe’s email, we would try:

  • john@company.com (this usually works for more unique first names or if John is one of the founders.)
  • johndoe@company.com
  • jdoe@company.com

Personalizing templates — Emphasis on personal. Copy your template and insert all the relevant information into the blanks. As with talking to recruiters, you want to show whoever you are emailing that you are passionate about the company and that you’ve given it more thought than just “Oh, this company looks cool, I guess I’ll apply.” You should add something that shows that you have been following the company. Look up recent news articles and maybe throw a little bit of that into your email. Try out their product, come up with ideas to improve it, and talk about how you could help implement them. These ideas could be new features or some constructive criticism based on your experience as a user. Otherwise, you’re just another kid who wants an internship for the summer.

Send email — lol.

Sending follow-ups — If you don’t get a response, send a follow-up email. Just something quick and short that reminds them to read your original email. I generally wait a week or two before I send a follow-up. There are a million and one reasons why someone could miss your email or forget to respond, so persistence is key. You can use tools such as YesWare or Sidekick to monitor if and when your emails get opened. Startups seem to move fast in everything but intern hiring. Keep in mind that companies recruit interns at different times of the year, so if you don’t get a response in the fall, don’t hesitate to send another email in the spring.

In addition to emailing, reach out to the company on social media, especially if the company is small. Tweet at the company (and the founders too!) or jump into conversations on ProductHunt/HackerNews.

Conclusion

Below is a spreadsheet I used to keep track of my recruiting progress for Summer 2015.

https://docs.google.com/spreadsheets/d/17wdgmBT_BukJX3WeEdEh1ccL5YrrVvDC5Z3fVi0B4to/edit?usp=sharing

  • Green rows — Received offer
  • Yellow — No response (through online application)
  • Red — Rejected
  • Blue — Opted not to continue

I was targeting mostly larger companies for this summer since I worked at a small startup last summer. I got a vast majority of my interviews from referrals. Referrals seem to be the most effective way to get an interview at bigger companies as a sophomore. In the case that I did not get an offer by the end of fall semester, I also had a list of companies to cold email in the spring as well as my email template in the bottom right.

As I said in the introduction, this guide is meant to get you to the interview stage. Once you get to this point, there are a lot of resources out there to help you. Get a copy of Cracking the Coding Interview and do practice problems. Go on glassdoor.com and find past interview questions. https://oj.leetcode.com/problems/ also has some good questions.

Other than that, I’d recommend just immersing yourself in the tech world. Make it a habit to start reading TechCrunch/HackerNews/VentureBeat. Follow big names in the industry like Sam Altman and Paul Graham on Twitter. Browse the subreddits for the kinds of development you do (/r/androiddev, /r/iosprogramming, /r/webdev). Try and understand where technology is now and where it is going. It is guaranteed that you will be asked “why do you want to do ____?” in an interview. For example, in all my interviews I was asked “why Android?” and “what do you think of Lollipop?” “I think it’s cool” is not a good answer. “I really like the direction Google is taking with Android and Material Design for reasons x, y, and z” is a much better answer. By learning as much as you can about tech, you can develop a more fundamental understanding of how the industry works.

A lot of companies hire interns at different times, so if you applied online in the Fall and didn’t get a response, don’t feel bad, they might only hire interns in the Spring. This is especially true for small startups. When I sent out emails Fall of freshman year, I got a lot of “we aren’t ready to hire interns yet.” In fact, I ended up signing my internship on the last day of Spring semester (though I sent the first email in November).

Internship hunting is a numbers game: the more applications you send out, the more interviews you’ll get. If you only apply to big companies, you might not get an internship at all. But, don’t sell yourself short and only apply to small startups.

The key to internship hunting is being proactive and taking initiative. You have to want to do side projects. You have to make yourself hirable. You have to find companies to apply to. You have to put in the effort to cold email and followup. With that said, good luck with your internship hunt!

Thanks to Jonathan Kau, Alex Duran, and everyone else who gave me feedback on this.