My Facebook Bootcamp Experience
September 01, 2021
7 min read
Disclaimer: these are my personal opinions: I’m not speaking on behalf of Facebook, nor am I discussing anything remotely confidential.
I’ve recently joined Facebook as a software engineer, having graduated from university just a month prior. Having just selected my team (Messenger Privacy Experiences) and “graduated” bootcamp, I’d like to share what bootcamp is like, and why I think it is one of the best things about joining Facebook.
Facebook’s philosophy to hiring is different to most companies in that rather than hiring for a specific team, you’re hired just based on your role: e.g. software engineer (in my case), data scientist, product manager.
When you join Facebook, regardless of the level you are hired, you then go through a 5-8 week “bootcamp”, where you first go through a curriculum that teaches you the technologies used at Facebook for your specific skill, and you then go through the team selection process to pick the specific team you’ll be working on.
Much like any other company, the first few days are spent learning about the company values and culture. I’ll say this, it was definitely far more enjoyable in-person back when I interned in 2019, but that’s the reality of the work-from-home pandemic life.
From this, you split into two streams of videos: the onboarding videos that are about Facebook culture, and the Bootcamp Basics curriculum that guides you through Facebook’s development tool workflow. In a nutshell, this teaches you breadth rather than depth.
I’d say that as a returning intern, a lot of this core curriculum was already familiar to me so my goal was to just get through these as fast as possible (2x video speed).
Throughout your bootcamp, you’re assigned a bootcamp mentor who’s kind of your “manager” throughout bootcamp - they graduate you and you work with them to set reasonable expectations. In my case, we established that it probably didn’t make sense to do the introductory bootcamp tasks and to focus instead on team selection.
Bootcamp tasks are small tasks (e.g. fix a bug, refactor this code, implement this small feature etc.) assigned by teams that Bootcampers can complete to get more familiar with the codebase. They’re typically given levels 1-5 based on complexity and your mentor assigns you a task or two to do each week, increasing in levels each week. However like I said, this is flexible, I ended up picking tasks I found interesting and skipped introductory tasks.
You’re also assigned a “squad” of 3 other bootcampers to complete bootcamp with. I think this is probably the aspect of bootcamp most affected by the pandemic, as although we met up in person after work, you miss out on the serendipitous conversations around the office, or the other social events described in my internship post. I’ve tried to be as social as possible, reaching out to people I hung out with back in my internships, but it does feel like we’ve been robbed.
Once you’ve onboarded, it’s now time to specialise further: through choosing a focus path curriculum (Web, Backend/Systems, Machine Learning, iOS, Android) and through sitting with teams.
The next stage is team selection: a two-way reachout process between you and the teams that are currently looking for headcount (new team members). During this process, you speak with team managers and sit with the teams you’re interested in, each for 2-3 days. During this you complete a task, speak to the members of the team and attend their meetings to understand if their product and roadmap is a really good fit.
This reachout process is done via a “jobs” tool that is effectively like a bulletin board where teams advertise openings for different levels and roles (e.g. IC3 Product Generalist), and where you fill out a profile and upload your résumé. The best way to describe this is like applying for jobs, except without the stress - as you know you have a job at Facebook sorted. And the lack of stress can’t be understated as I have heard of stories of friends at Google who got the offer, but subsequent got the offer rescinded because they didn’t find a team at the team-matching stage.
Now, yes there’s a chance you could join Facebook and not find a team you’re interested in but I think it’s really rare. Speaking from personal experience, I found I had the opposite problem: lots of exciting teams (around 30) reached out that I found hard to narrow down.
Everything from the Spark AR Growth team, to Whatsapp and Messenger Privacy teams, to Integrity teams! I actually jumped the gun and reached out to teams informally from Week 2 because there were so many to choose from :P
I asked friends and even tweeted asking for advice - shout out to Cody Engel (whose youtube channel you should consider subbing to) who was super helpful in giving an external perspective.
In the end, I ended up choosing the Messenger Privacy Experiences team as it’s a product that really excites me and I am so looking forward to tell to telling you about the features I’ll help ship in the future!
These are some of the axes I used to evaluate teams:
- New vs Established teams: established teams have more of a support structure and defined processes as well. New teams don’t have these and the problem space has more ambiguity, so it is harder if you’re new in your career, but offers opportunities for growth and impact!
- Manager: really important for your growth, however at FB there are re-orgs all the time so these can change. Consider if you gel with the manager’s style: e.g. if the manager is cautious or a “cheerleader”. Talk to other engineers on the team about their management style. Do they understand the company processes and expectations: this is useful when it comes to navigating performance review. Do they have a clear idea of what role you’d be playing in the team if you joined? Their vision: their ideal outcome if we crushed it as a team?
- Roadmap: does the roadmap excite you? Does the team already have work lined up for you if you were to join? Is there enough scope for you to grow within the team?
- Growth and Mentorship: especially as someone at the start of their career, both having scope to grow but also guidance as how to grow is useful.
- Company Priority: are they working on something that is meaningful to the company? If it’s a niche team then maybe your efforts do not deliver as much impact and are not as well rewarded. There’s a chance that senior management might deprioritise their work (I know of a friend whose team was deprioritised and he did not enjoy his role as their roadmap was drastically changed). To be honest, the reality is that in any big corporation this can happen to you whichever team you join. I think a classic example is Google developing 15 or so messaging apps.
- Type of work: product teams might have more cross-functional work with designers, product managers etc, whilst infra might just be 90% coding. To get a feel for that particular team’s codebase, it’s worth completing a bootcamp task, and also looking at recent commits submitted by members of the team. Also ask the manager what “impact” in that role looks like.
- Tech stack: maybe you’re more comfortable with certain technologies e.g. web vs backend, or you dislike working in certain languages like C++. For me, I personally feel this is the least significant thing as with enough experience you can pick up any stack, although yes it does make ramp up significantly harder if you’re working with a new stack!
I think in a place like Facebook like I said there may be many teams that fit your criteria, in which case the best piece of advice I got was to work on the team whose projects excite you the most! If you’re excited, you’ll be much more motivated and are likely to enjoy your work more as a result.
When speaking to teams, don’t be afraid to ask hard questions. At this stage, you’ve made the cut so you have a Facebook job, if anything it will be teams who’ll try to sell themselves to you (having been on both sides of the table!). On a related note, I would suggest being open and upfront about your career goals with the team’s manager: having this conversation has meant that from the get go my manager and I are on the same page and can work together to realise these.
Typically you pick the focus area to learn skills relevant to the role you’re looking for. In my case, as a Product Generalist, the web path I chose was Web, although it turned out that interning in a web full-stack team teaches you pretty much everything in that focus area (React, Relay, GraphQL, Hack etc). I would say though that the videos were well-structured and would have been ideal at the start of my internship.
I would categorise these videos as good for an introduction, so at least you’ll know what the name of a technology refers to, but you will need to dive into the code or the internal wiki to really understand the features presented. There are a lot of videos though, so sometimes I just skipped through them and headed straight to the wiki.
I think the video fatigue is again just a symptom of the work-from-home crazy pandemic time we live in, and I presume this is much more engaging in person!
Having finished the Web focus path early, I had some spare time, so I decided to do the iOS focus area, as the Messenger Privacy Experiences team had a greater need for an iOS engineer, and I don’t mind learning a new tech stack. Having said this, it has certainly felt much harder, as I’ve never used Objective C or developed for iOS before, although I guess FB’s Messenger codebase is pretty custom iOS (see their Project LightSpeed engineering post).
So technically you can only graduate after week 5, but I jumped the gun again and started working for the team in Week 4! Your bootcamp mentor graduates you when you’ve found a team, the team manager is onboard with you joining, and you’ve completed the bootcamp curriculum and completed enough bootcamp tasks.