Main Logo
Current Projects
All Projects

Software Development Engineering Intern - Facebook

Now Meta!

Trade Secrets Disclaimer A through discussion would reveal stuff that at minimum shouldn't be public and at worst would get me in legal trouble. For this reason, things are intentionally left somewhat vague.

What can I say that won't get me in trouble...

I worked for summer 2020 and summer 2021 at Facebook (remote). I worked on two different teams that got merged into one team on my last day of the second summer. These teams were broadly responsible for Network Analytics (monitoring and alerting style activities). I worked in a combination of C++ and Python, one language used for the programs that ran on every network switch, router, and server and the other language for stuff that ran a couple times a day. I'll let you guess which is which. Over the the summers, I worked on three projects described at a high level in the next couple paragraphs.

There was a mapping of datatype to metadata. It was fourteen GB of ram. It refreshed very slowly so what ended up happening was one map was used to serve requests while another map was refreshed in the background. These two maps were atomic swapped at some point so that the data being served was fresh and the other could update. This library ran on quite a few machines and handled alot of requests per day; maintaining the overhead of an entire extra fourteen GB map was troublesome, especially on some machines that had only 32 GB of ram (four of which was reserved for the operating system: 4 + 14 + 14 = 32), I re-wrote the refresh process using hashing and sharding. This allowed for one shard to be refreshed at a time significantly reducing overhead and slightly increasing data freshness.

The Network Analytics team is tracking every statistic you can think of and several that you probably wouldn't think of. However sometimes things go wrong. Whats worse is when things go wrong without raising an alert. I developed a tool to monitor two data streams that should match and report when they didn't. Of course, the two data sources used different backends and had different rounding policies (imagine how quickly a Facebook router goes from processing no data to alot of data, a slight difference in rounding makes a huge difference in output). In theory, these two data streams always (nearly) matched. In practice they sometimes did not. In these cases, I raised an alert with the two teams responsible and let them figure out where the problem was.

There are all kinds of tools in the Facebook tech stack, a big chunk of them are testing tools. In my second summer, I wrote a tool for testing the network tester. The network team had an allocation of test machines that they could allocate how they see fit. Likewise there were tools that simulated various network traffic patterns. I wrote a utility that would spin up test machines, configure the traffic pattern, run the tests, save the results, and tear down the environment. I also would interface with services like FBAR to keep the test machines at peak performance.

In case a former (or current) Facebook employee is curious, I worked mostly with:

LinkedIn Logo
GitHub Logo
GrabCad Logo
Questions? Comments? Contact:
Spencer Gautreaux
Copyright 2022 Spencer Gautreaux. All Rights Reserved.