This anonymized email correspondence is part of my series on “Making the World Smaller”. See the introductory post for context.
My name is X. I’m pursuing a Bachelor’s Degree on the east coast of America, studying Math and CS in my second year.
First of all, I hope it isn’t awkward for me to email you out of the blue. I’m an avid reader of your blog; it’s taught me a lot and really pushed me forward to try new things in CS, especially in our mutual areas of interest. Like you, I also enjoy studying topics like compilers, distributed systems, and low-level networking, and wanted to hear some more about your experiences!
For the upcoming summer, I am set to be an SWE intern at Facebook in Menlo Park; I’m really looking forward to it, because I’ve never worked on a codebase that’s as heavily-scaled and ambitious as some of the projects at Facebook are!
To tell you a bit about myself:
My tentative area of expertise thus far is within the scope of languages like C++, Rust and Haskell (though I do enjoy a good bit of Python here and there!) Given this, I’m currently planning to pursue placement on an infrastructure team. I’ve read extensively about some of the prevailing practices and projects at Facebook through its open-source presence and through the experiences of yourself and other prolific engineers and blogger, and can’t wait to get started!
Personally, I find myself to be a generally carefree and fun-loving person, especially when it comes to code and life. I sometimes have a hard time focusing if a project or a subject matter doesn’t interest me, but I’m downright obsessive when something catches my interest; in this case, I cannot help but think day and night about how I can make it better.
To be completely honest, I’m also immensely overwhelmed with the magnitude of some of the things Facebook does. Most of my past internship experience has been low-impact work for small startups, along with a relatively haphazard assortment of scripts and programs I write for hackathons, and I’ve definitely never experienced anything like this!
I was hoping to discuss the following points:
1) Naturally, I’m very eager to learn how things go by and people become successful at an environment like Facebook. My very big ambitions spike intermittently with my fun-loving nature, it seems, and I also experience a desire to change the world and accelerate human progress with code and new ideas. Therefore, it’s expected that I’d ask:
What were some of the most valuable things you learned during your own Facebook internship? How do you feel that those impacted you as an engineer and scientist in the long term? Finally, is there any general advice you would have for someone in my shoes?
2) As I touched on a bit in (1), I find myself motivated not only to code and have fun, but also to make the world a better place. The magnitude of my ambitions necessitates that I pursue greatness, however one may define that, in engineering and science. Therefore:
What, in your experience, separates the good developers from the great ones? What is the standard that you set for yourself, professionally, and why did you choose it? How has it pushed you forward as an engineer?
Thank you so much! It’s been great reading your thoughts on your blog, and I look forward to hearing from you!
Sorry for the delay. Nice to meet you and I’m glad you like my blog!
I think the most valuable things I learned during my internship at Facebook that influenced me today were probably less related to new knowledge. For example, I had worked on large codebases before, but that might be a very exciting experience during your internship. I learned a lot more about elements of “being a software engineer” which includes how to manage your time, what efforts to prioritize and which not to, and how to seek out the most impactful work. Facebook is a heavily impact-driven company, which means it values efforts which improve things substantially, rather than rewarding things just because they “took a lot of work”. Most importantly this means it does not matter how long or how hard you work, it only matters how smart you work and what you achieve. What separates experienced software engineers from ones fresh out of college is often times how they manage their time and work. Why is that senior engineers come in at 9 AM and go home at 5 PM to get their kids of out school and spend half their day in meetings, and yet still seem to get more done and have more impact that 23-year olds who work 12 hours. So one thing I learned is to understand the difference between hard work, and impactful work. The other thing that was really important during my internship were my social interactions with my teammates. I had great relationships with my intern manager (mentor) and team manger and yearned advice and feedback wherever I could. Not just on professional things (“how would you solve X?”) but also personal things (“how do I manage my time better?”). I would recommend you really make the most out of your relationships with your team and take them seriously. Some of them will have 10 years more experience than you. They’ve lived through all professional challenges you still have in front of you. Take this opportunity to ask them questions. Also make the most out of your meetings. Don’t just wander in them without anything planned. Make a list of things you want to talk about/that are on your mind. This reminds me: one thing I learned was the importance of finding the very fine line between when you should just figure it out yourself given the resources available (e.g. code search) and when you should ask a question because you’re stuck. If you observe senior engineers, they rarely ask questions about the codebase and such, not because they don’t have questions, but because they know how to find answers without using other engineers’ time.
I think the above blob also kind of covers your second question. Great engineers get more done in less time, know how to prioritize impactful work. Down the line mentoring becomes very important, but that’s not relevant right now.
Hope that helps. If you have more specific questions let me know.
A follow-up to this email: I gave it another read when I felt like I was coming onto another question.
You mentioned mentorship as being very important in your career. Obviously, I’m hoping for a great relationship with my intern manager (haven’t been introduced yet, should be this month or next,) but I’d also like to meet a lot of people in a lot of different teams and subdivisions.
Strictly pertaining to the internship, I’d like to, if possible, be on multiple different projects than just the one I’m being evaluated on for my primary intern manager. The ten weeks I’m given seems like precious little time to do everything I’d want to do; I would, if anything, prefer to work a few extra hours each day so that I could experience more than just one project with one team. Without overextending myself, how would you suggest that I grow into a role of wearing a lot of hats, working on a lot of different and impactful things, and meeting a lot of different people?
Thanks in advance! Please take your time, but I’m looking forward to hearing from you again!
Hope you are well!
First of all, I think the number one thing during your internship is to do your project well. If you’re doing lots of projects but your main one is lagging that won’t reflect well in your review, just like if I’m assigned to a project for a half and spend all my team on side projects, that will raise some red flags. Remember also that you only have ten weeks, and ramping up takes time. Depending on what your project will be, you’ll be faced with very many and individually complex systems that take some time to learn. When new engineers join Facebook full-time, they get 6 weeks of basic training to learn (a small portion of) Facebook’s tech stack. As an intern, you have about one to two weeks to “ramp up”, after which you should probably start getting comfortable with whatever tools you’re using. So just keep in mind that your main project is the most important thing. If you do your main project well and don’t do any side projects, you’ll probably get a return offer. If you do many side projects but your main project not so well, you might not.
Now, that’s just the disclaimer. If your main project is going well, you can of course expand into other areas. I was actually quite active on that front, and I recall recruiters saying that interns who do exceptionally well generally do some additional things next to their main project. One great opportunity to have impact “on the side” and also experience Facebook culture is to participate in a hackathon. I’m sure there will be one during your internship time. They’re a big part of Facebook and a great way to meet people, work on cool, innovative ideas and show some additional impact. If your project is really cool, you also get to meet Mark Zuckerberg.
Another way of reaching out to different teams is having some unique area of expertise that may be helpful to other teams. For example, at the time of my internship I was somewhat of an expert on compilers and static analysis, so I gave a tech talk on that stuff and one guy from the code search team reached out to me and invited me to their team meetings. That looked pretty good on my review too.
Lastly, if there’s any particular project you’re very interested in, there’s nothing stopping you from just reaching out to to that team and asking for small (or medium) tasks to work on in your after hours. In fact, since the whole Facebook codebase is open, you can just send contributions without even asking (although you might as well talk to them first). Engineers always have extra work on their plate that they’re happy to delegate, and it might be a great learning experience for you and something you can write in your review.
I would recommend spending your first 3-4 weeks ish focusing just on your project and nothing else, and if you feel comfortable enough after that you’ll have another 6 weeks to expand. Also be sure to ask this same question to your manager and he/she may give you more advice or even introduce you to other teams in the org that could have some additional work for you.