Shiloh's Guide to Robotics & Software Internships

5725 words | ~ 27 min read | Jun 20, 2020 | last modified Aug 20, 2020 |

I’m currently employed at my *checks notes* seventh internship, which God willing ought to be my last. Accordingly, I wanted to write up everything I know about internships, before I get employed full-time and forget it all.

Oh, and by the way, if you’re in college or fixin' to go to one, you should give this post a read. I had half of a hugely long college advice post in the works, and this said everything I wanted to say way more eloquently.

Edited 20-Aug-2020 to add the “Why internships?” section.

Why internships?

In the first version of this post, I made some assumptions, some knowingly and some not: that you, my audience, are an undergraduate student in software/robotics; that you understand vaguely what a software internship is for, career-wise; and that you are already planning to do an internship but don’t quite know how to go about snagging one. My background is such that I had a very deep understanding of the robotics industry and how internships would fit into my career before I even set foot on campus, and it literally did not occur to me that not everyone knows this stuff until my roommate pointed it out to me. Thus this section of the post, where I assume that you’re probably a freshman and try to sell you on the concept that internships are a thing you really, really want to do.

The two general career tracks in robotics (and software more broadly) are “industry” and “research”, and which one of these you go down will determine the best way for you to spend your summers. Typically, if you’re going down the research track, your goal in undergrad is to make yourself as attractive a candidate in grad school admissions as possible (much like how your goal in high school was to make yourself attractive in college admissions). This usually means research – what we at MIT call UROPs. You want to try to get associated with a research lab in undergrad as soon as possible, and spend your summers working on research. This is all I’ll say about the research track; it’s not the focus of this post.

For the industry track, you instead want to spend your summers doing internships. Jobs you apply for after graduating college will expect you to have done at least one software internship, and probably several. You can (and should) start getting internships as early as the summer after your freshman year. At MIT, I also knew people who did externships (mini-internships), particularly during IAP (MIT starts the spring semester in February; you can spend the month of January, known as IAP, doing externships, taking mini-classes, or just recovering from burnout), and if you’re taking a gap year or a leave of absence, you might want to spend part of it doing an internship. If you’ve had little luck so far with getting summer internships or spent a while on the research track and decided it wasn’t for you, doing a bunch of these smaller off-cycle internships/externships can be a great way to get more experience on your resume, and the application process for them tends to be much less competitive.

A software or robotics engineering internship should be paid. Generally, the company will find a project for you that is scoped to take an undergrad roughly three months to finish and (hopefully) interesting, but not really business-critical. They’ll also assign you a mentor/supervisor. At some companies, you may have a separate supervisor (your boss) and mentor (advises you on professional development); at others these may be the same person, or the mentor role won’t really exist. You’ll probably have the best experience if there is some kind of explicit mentorship happening and both your mentor and your supervisor are excited about having an intern. The overall goal is for you to get some work experience in your field of interest and maybe also some professional mentorship. (The benefit to the company is not really useful labor from its interns; instead, what it wants is to recruit the best interns as full-time employees in the future. Its hope is that you’ll be more likely to choose the company you had a great internship at over other companies that you’ve only interacted with in interviews.)

To reiterate: it’s never too early to get an internship. Large tech companies often have intern programs specifically for freshmen (and large companies with established processes will also help you learn software best-practices). Smaller companies and startups don’t typically have elaborately organized internship programs, but can also be less selective. MIT has a special freshmen-only section of career fair; make sure to check if your college does that, because talking to five companies in a row that by policy can only hire juniors will make you feel lower than dirt. Very early in your college career you may not have any actual coursework to speak of (and this is not helped by the stupid internship recruiting cycle that starts in SEPTEMBER), but hopefully you have a couple high school or personal projects that prove you know, at least a little bit, what you’re doing. There will also be companies that have sensible expectations of freshmen, and it is definitely possible to get internships at them.

Okay, rant over, back to the rest of the post.

Networking

Hey, why is networking first? Networking is important. Networking is hands down the best way to find internships (and, uh, jobs), because you can completely avoid the traditional interview gauntlet in which you beg a company to please bestow upon you an internship crumb. Instead, you float the knowledge to your network that you are Looking For An Internship, and you get responses like:

Once, a friend of mine (who had, at the time, just graduated from high school) wanted to intern at a particular robotics team. The manager of this team knew him through the Homebrew Robotics Club, and very much wanted to hire him as an intern. However, as a matter of policy this team could not hire any intern who was not a PhD student or postdoc. To do an end-run around the policy, my friend was hired as an intern at a contracting company that he was also connected with through the HBRC, then contracted to work for the robotics team. At no point did any interviews take place.

It’s important here to understand: by networking, I do not mean the thing where you email (or Linkedin-message) random people and go to events where you trade crappy business cards with other people who are There To Network. You want to make genuine friends with people who are in the industry you want to be in, but a few years older. I think the best way to do this is to attend some casual event that lots of people in your industry go to, and make friends there in the normal way. You also want to start as early as possible; the process kind of snowballs once you know enough people. Here’s how I built my network:

  1. Attending the aforementioned Homebrew Robotics Club. I started doing this when I was 7, but the club has attendees of all ages, including a good few robotics industry professionals.
  2. Through the HBRC, I met the two founders of Fetch Robotics, who invited me to intern there. This was (a) a cool internship and (b) got me onto the Willow Garage board game night mailing list. Willow Garage no longer exists, but its diaspora still get together ~every week for board games and chat about robotics inside baseball.
  3. Attending board game night. This helped me get to know a bunch of other people in the Willow Garage diaspora network who don’t go to the HBRC. Eventually, I was offered my Iron Ox internship at a board game night.
  4. Separately from this, one day I was messaged on Linkedin by a recruiter for a Playground Global portfolio company. Playground is an incubator with a good few robotics startups; it also has weekly happy hours, which let me meet other people at Playground portfolio companies. I met my mentor at my current internship, also a Playground company, last summer.

Obviously not all of this is actionable (particularly if you do not live in the SF Bay Area), but this is what I did/knew how to do. You’ll have to do your own legwork, if you live elsewhere, on what events (if any) are in your area. (Also, if you’re interested in robotics and can swing an internship in the Bay Area for the summer, I strongly recommend attending the HBRC. If nothing else, it’s fun!)

I hear that you can also get good results, if you are an undergrad at a research college, by doing research in a lab and insinuating yourself into their lab meetings and other informal events. I’ve always been abjectly crap at this one, but if you can get yourself to be less shy than me it’d probably work well. Also on the academia side of networking, conferences sound cool, but I’ve never been to one. (one day I dream of finally going to ROSCon…)

Career fairs are IME mostly useless, and I say this as an MIT student. Allegedly companies are clamoring to hire us, and my career fair experience is still “we’re not hiring sophomores” or “we’re only hiring grad students” (so why are you at the undergrad career fair?) or “hm, we’re really looking for someone who has 10 years of C++ experience and will accept $15/hour” (SO WHY ARE YOU AT THE UNDERGRAD CAREER FAIR). Also, the vast majority of the companies there are just generic software places, and I’m looking for robotics jobs specifically; maybe a pure-software person would have better luck. But career fairs still put you through the standard recruitment process, and the goal of networking is to bypass that process to the greatest possible extent because you know the right person.

I mean, I would still go to career fairs though. Maybe you’ll get lucky. And a free T-shirt = one more day to procrastinate on laundry, which is nothing to sneeze at.

Try to figure out what your college’s career-relevant mailing lists and so forth are, and get on them. At MIT, Course 6 (EECS) has a mailing list called eecs-jobs-announce for job announcements, and a Piazza forum called 6.AcAd where people often compare intern pay rates; robotics-specific jobs are often posted to the robotics-related mailing list. I’ve also seen job announcements on class mailing lists for robotics classes like 6.141.

Oh, and keep your Linkedin profile up-to-date. Most of the Linkedin messages I get are from people who clearly haven’t read my profile (I got one as a sophomore asking if I wanted to be a Senior Robotics Engineer – like, buddy, I’m not even a senior in college), but sometimes cool stuff comes in over Linkedin if you have a bunch of the good keywords.

Application

The application timeline for summer software internships starts in the fall, which is silly. Typically, only bigger and better-established companies will have their shit together this far in advance, so many startups will still be available to you if you start looking in Jan/Feb. But the big career fair is probably in the fall, the application deadline for my Google Engineering Practicum internship was, IIRC, October 31, and (particularly in the excitement of your freshman year) it’s easy to let these deadlines slip by. It helps to be organized about it – make a list of companies you’re interested in and add all their relevant application tasks and deadlines to your calendar/planner/task tracking system.

Also in the fall, if you have a solid network, I would recommend emailing people in your network and asking about potential internship opportunities. Since most of my network is startup-focused, often the companies I email haven’t yet started recruiting interns, but it never hurts to be early.

Usually, the internship application process consists of a coding challenge or coding assessment over the phone, then maybe one or two technical interviews, then an offer call. Google also for some reason wanted an application essay. There typically aren’t onsites; I had two onsite interviews at Boston area startups and one at a company in Palo Alto, which I did over my winter break because I was conveniently at home in Sunnyvale. (I’m pretty sure they wouldn’t have invited me for the onsite if I hadn’t been from the area. Nobody flies intern candidates anywhere, is my point.)

If you anticipate a lot of coding challenges it’s probably worthwhile to practice a bit on Leetcode or similar. Also make sure to review the most common languages you think you’ll see; I have, in the past, completely bombed a coding challenge because it was in C++ and I didn’t have enough C++ experience at the time to write anything remotely sensible on the clock. (It still takes me 3x as long to do anything in C++, compared to Python.)

Come January, many big companies' intern recruiting cycles will be over, but others may not have gotten the memo yet, and lots of startups will still probably be looking. MIT has a second, smaller career fair at the end of January called XFair, and a third career fair a little later in the spring semester. I’ve never been to the spring career fair because we’re not given the day off and I inevitably have a fully-booked schedule of classes for whatever random Tuesday it happens to be, but XFair tends to be smaller, calmer, and more startup-biased, and I honestly think it’s been at least as valuable for me as the fall career fair. If anyone you emailed earlier in the fall hasn’t responded yet, this is also a great time to poke them.

I have not personally tried this, but if you’re interested in a startup where you don’t know anyone and they haven’t yet set up an official intern program, you could definitely just email them anyway (“Hello [cofounder/CTO], I’m a robotics/CS/underwater basketweaving student at XYZ University, and I’m interested in interning at your company because blah blah blah…") and see what happens.

By March/April, most internship recruiting will be over. You could try using your network to do a Hail Mary pass, but at this point if you haven’t found an internship you probably want to start looking for a summer research position or something (this is not a diss of research; grad students looking to hire undergrads for their projects just don’t tend to do things all that far in advance).

During this whole process, you will have to send a lot of professional-sounding emails. The main way I figured out how to do the professional-sounding email tone is by binge-reading Ask a Manager.

How to do career fair

My procedure for every career fair is pretty similar.

A few days before the fair, I go through the list of companies that will be there, and make a list of all the robotics companies. There are usually 6-8 of these (out of the hundreds of companies at the fair). I further narrow these down by crossing off all the companies that seem very boring or that I don’t want to work for. Then I copy this list onto a notecard, which I stick in my nondescriptly professional fake-leather folder, along with ~20 copies of my resume. I always get really paranoid and print out way too many copies of my resume (what if there’s an emergency that can only be solved by a small integer number of paper airplanes???) and I never use more than like 5. This is the secret second reason why your resume should fit in one page: if it’s double-sided, you can’t use the backs of your unused resumes as scratch paper later.

I try to not bring too much stuff with me to the fair, because I know I’ll be collecting half a dozen tote bags full of miscellaneous career fair crap later. I keep a pad of paper and a pen in my folio and my keys + Leatherman tool in my pocket. I also bring a pair of concert earplugs (specifically Etymotics), which don’t help as much as I wish they did.

Once I check in to the fair, I usually get handed some kind of map that shows me where all the booths are. I take a few minutes to mark on the map all the companies on my list, and plan a route that means I have to spend the absolute minimum possible time in the hellishly noisy halls. Then I start talking to my companies of interest. At this stage of the procedure I don’t collect any swag, because it’s really awkward to juggle five water bottles as you try to give someone your resume.

I try to remember to ask a few questions at all of my companies of interest:

I always try to ask the “next steps” question last, so I actually have a hope of remembering all the details, and then I leave and try to find a quiet spot to scribble down what I’m supposed to do. I am never fully consistent about this, but a scribbled note that says the company name and “wait for email” or “fill out form on flyer” is infinitely better than nothing. The other questions are partly so I can get a general impression about the company but mostly so the people at the booth think I’m a Smart Person who Asks Good Questions and not some dweeb who just walks up and silently hands them a resume. Also, if they ask me a question I have to get them to repeat it like three times because I can’t hear, and I am not very coherent when put on the spot; I feel like the interaction leaves them with a much better impression if I also ask some questions.

Once I’m done talking to all my companies of interest, I spend the rest of my time at career fair collecting as much swag as possible before my legs give out, then stumble back to my dorm and crash on the bed, where I immediately muck up my career fair makeup and ponytail and get lint all over my black pants.

After the career fair I try to interpret my mysterious notes about my next steps and follow them to the best of my ability. If there were no mysterious notes, or if I can’t read the mysterious notes, or if the mysterious notes seem to imply that the next step is on their end, just to be safe and make sure they didn’t forget about me I send an email:

Hi [person’s name, if I was handed a specific person’s business card],

It was great to meet you at the MIT Career Fair yesterday! Thanks for taking the time to speak with me about [year] internships. My resume is attached for your reference.

Thanks, [my name]

(It’s important to remember to actually attach the resume here.)

In the few weeks post-career-fair, I tend to receive a lot of emails about coding challenges and interview dates and such things, and I suck at keeping track of these. If you receive an email with an action item for you, make sure to immediately log it in your to-do list or task tracker. However, and this has historically been one of my weak points, if you receive an email and the next action item is on the company’s end, you should add to your to-do list something to the effect of “If [thing] not yet received, follow up with [company]”, and set this task to be due in a few days or whenever the company told you you’d receive [thing]. This prevents the scenario where the company says they’ll send you a coding challenge, forgets to send the coding challenge, bugs you in a week like “hey we noticed you failed to complete the coding challenge by our deadline,” and then gets shirty with you when you admit you did not receive the coding challenge and forgot to follow up with them about it. Companies are often kind of disorganized about career-fair follow-up, so this sort of thing happens more frequently than you’d think.

Above all, don’t feel discouraged if the outcome of all your career fair efforts amounts to a wet fart. It happens, often to very smart and qualified people, and it’s not a referendum on your actual value. Also, applying to internships is a numbers game, and the numbers are very much not in your favor if you’re doing anything other than Generic Software or if you’re a freshman/sophomore (many companies have blanket policies preventing them from hiring underclassmen). I think it’s still worth going to career fair if you’re in one of these numbers-disadvantaged categories, because the practice is valuable and will help you freak out less when you become a senior and Uber or whoever will finally deign to talk to you. Just, you know, keep your expectations low.

I’m not going to discuss interview prep here; I think it’s been adequately covered elsewhere on the Internet. Briefly: Read Cracking the Coding Interview, maybe do some practice problems on Leetcode, and have material from your data structures/algorithms class(es) fresh in your mind.

Wage negotiation

Wage negotiation scares me a lot, since I am anxious and hate confrontation. However, I do like having money, which is a pretty decent incentive to put some effort into getting over this.

There’s plenty of advice out there on salary negotiation – my favorites being patio11’s classic post and this two-part series (part 1, part 2). This advice is largely geared towards people who are interviewing for full-time roles; intern pay works a little differently. As an intern, you generally get paid less, and you’re being hired for a temporary period, e.g. a summer. Typically, interns are also paid by the hour. Also, companies (unless they are very small and new) usually have a standard intern rate. Some startups may be amenable to changing this if you negotiate, whereas a big company like Google is take-it-or-leave-it.

For a software engineer or software adjacent internship, your rate will basically be a linear function of the number of years you’ve been in college. It’s a super good idea to get an idea of what rate you want/feel you deserve by talking to other students at your school; at MIT, the 6.AcAd Piazza forum was the place to discuss internship wages. Wages will also depend to some extent on cost-of-living in your location, so keep an eye out for that.

In the interests of transparency, my past internships, all of which have been in Silicon Valley/SF Bay:

If you are looking for software internships and a startup gives you the “oooh nooo we can’t possibly pay you more than [crap amount] we’re just a little bitty startup waaaaah you can’t expect us to pay google wages” sob story, they’re ripping you off. If a startup is so poorly funded or mismanaged that they can’t pay an intern competitively, that can also be a red flag. Now, if you’re willing to put up with it financially and you think the internship has something else to offer, you might decide to go for it anyway. But that’s, you know, a decision you can make from an informed position.

If a startup is on a rapid hiring spree, that tends to mean the company is well-funded and in a good position (although I’ve also seen VCs encourage startups to hire way outside their means in an attempt to drive the company to either succeed or fail fast). Startups in general can be more volatile, even on the timescale of an internship, because the startup industry moves fast. This isn’t at all likely to happen to you, but in the worst-case a startup could hire you as a summer intern in January and be out-of-business by June. As with investing, it all depends on your risk tolerance. It’s super valid to ask about a company’s stability and funding situation in the interview (and you’ll want to mentally translate this from “rose-tinted stories told to VCs” to normal human language).

If the company asks what I would expect to be paid (during the offer call or late in the hiring pipeline), I typically just give them a range off the bat, where the low number is an hourly rate I feel is “average” for MIT course 6 students in my class year and the high number is maybe $10-15 more. Intern hiring is less tolerant of a bunch of negotiation henning-around, and I feel pretty well informed about reasonable intern pay. If they ask me what I expect to be paid in one of the earlier phone interviews I’m more evasive: “well, I was paid X amount last summer, so I would expect an increase that reflects what I’ve learned since then…”.

Oh, one more thing – it’s also super valid to ask about the company’s overtime policies. At my past internships the rule has been time-and-a-half for working over 8 hours a day, but some companies are chill with you staying a couple extra hours because you were in the zone and lost track of time or you wanted to eat the free dinner at the company cafeteria, and some are more strict about not wanting you to work any overtime. If this matters to you, an email thread after the offer call is the perfect time to discuss it. The full, legal agreement will be laid out in the offer letter, but you won’t usually be sent this until you and the company have agreed on the details.

Okay, so I have one or more companies offering to hire me, now what do I do??

If you have no other companies still in-pipeline, then your decision is pretty straightforward. Unfortunately, real life doesn’t tend to work out this neatly.

If you’ve gotten an offer you like well enough to take it without waiting for the rest of the companies in pipeline to come to a decision, go for it! The company will probably make you the offer over the phone, so make sure you ask to get the details in writing, and have a pad of paper handy to scribble down the relevant numbers as you hear them. I would recommend not accepting the offer in this initial phone call; take a few days to think about it, then email the recruiter back.

However, if you’d like to stall the offering company and light a fire under the still-in-pipeline companies to get you an offer:

[To the offering company]

Thank you so much for the offer! I’m currently in the interview process with another company, so I’ll need a little more time to consider it.

(Your decision whether you want to namedrop the other company; I personally wouldn’t.) If the offer has an explicit deadline that you want to extend:

Is it possible for you to give me until [date] to make my decision?

Your school may also set an earliest possible offer deadline or prohibit companies from making offers that expire too quickly – at MIT these recruiting policies are set by CAPD and companies that violate them may be banned from the career fair.

[To the still-in-pipeline company]

I just wanted to let you know that I’ve received another internship offer which I need to respond to by [date]. As I’m still very much interested in [your company], will it be possible for you to complete the interview process by this time?

I would give them a date a little ways in advance of the true deadline. If the other company is very famous you might consider name-dropping them here, but I’ve had this blow up on me.

But how do you actually decide which offer to take? I generally decide based on some combination of

Typically I also lean towards startups, because I think they’re more fun to work at than big companies. However, I assume you the reader are not a clone of me, so it’s probably worth interning at both startups and established companies and seeing which one you like better. I would also note that at Google specifically, if you apply as a standard intern, you have to accept your offer before you get matched with a team, and you’re not guaranteed to be matched with a team that has any relevance to, say, robotics. Which is fine if you’re open to a bunch of different topics; less great if you want to specialize. I don’t know how many other large companies do this, but be on the lookout for it.

When you take your offer, you’ll be sent an offer letter, an NDA (non-disclosure agreement), and possibly an invention assignment agreement. Non-competes are illegal in the state of California and kind of ridiculous to give an intern anyway, so I wouldn’t expect you to see one. The invention assignment agreement assigns any IP you create during your internship to the company – read this carefully to make sure it doesn’t apply to stuff you do in your spare time on your own equipment or stuff you’ve done before the internship started, and cause a ruckus if it seems overly broad! There may be a place where you write down all the IP you want to explicitly exclude from the agreement (e.g. a patent, if you have one). Everything else you should read carefully, and if you see anything you’re uncomfortable with you can definitely ask your recruiter or point of contact with the company about it. Finally, this is not legal advice and I am not a lawyer.

Often I find I’ve accepted an internship offer in the fall and then a while later another interesting company messages me on Linkedin or I talk to them at XFair or something. This isn’t a bad thing! You have many opportunities to do internships! If it’s an email or similar, I might say

Thanks for reaching out! Unfortunately I’ve already accepted an offer for Summer [year], but I’m definitely interested in discussing future internships with [company]. Let’s stay in touch! I’ve attached my current resume, and I’ll check back in the fall.

At a spring career fair, you can do the usual career fair chat about the company’s technology and your skills/past experience. Make sure to mention that you’ve accepted an offer already (so you’re not “leading them on”), “but it’s never too early to start looking for [year+1] internships, right?”

Of course, you do then have to put in your calendar or to-do list a reminder to actually follow up with the company in the fall. (It’s always best to be proactive; don’t trust that the company is organized; things can always fall through the cracks). You may also want to contact in the fall any companies that you were interviewing with, liked, but ultimately turned down. It’s best to do all of this fairly early in the fall, particularly if your current internship might make a return offer, but in any case it’s great if your resume is the first in the pile come fall.

This follow-up fall email is a great place to write a couple casual paragraphs about what you’ve been up to since they last heard from you (e.g. anything you learned in your summer internship), but whether or not you do this, you should re-attach an updated version of your resume. This may seem super redundant, but companies often have processes such that they only “know” the information you have given them in your resume (presumably because this makes their coordinative communication smoother and more standardized). The wildest version of this is that last fall I had a company email me asking me to edit my resume so it had information about my MEng program, because apparently this was the only way they could put me in the summer-internship stack and not the new-grad hiring stack. Now, this is a kind of crap experience for the candidate, but once you know about it you can start playing their game (in this case, attach your resume every time you email the company since you last edited it, and also anytime you want to give them a backup copy).

That’s it!

Good luck and godspeed! If any of this advice works out for you, or if there’s anything else you’d add, I’d love to hear about it – email me at shilohc (at) mit (dot) edu.