So long, Meta: 3 years in a badge post
👋

So long, Meta: 3 years in a badge post

Published
August 8, 2022
Tags
Articles
Author
Stephen Wu
👋
Editor's note: At Meta, there’s a tradition that when you leave the company, you make a badge post: a goodbye post with a photo of your badge, thanks, some learnings, and other sentiments. Here is an abridged version of mine. Note the original audience was Meta employees, particularly engineers or others who work on the FB product. I worked on the Profile team. Profile is the surface that you see when you go on anyone's user page on the Facebook app or website.
I lose my badge a lot. I have ADHD and often misplace just about everything in my life 😬. After requesting temporary badges every day for three weeks saying I’d find my badge soon, I finally got a new one printed…and then I found my old badge the next day. So now I have two badges. 🤦‍♂️
My final day is August 19th, which is coincidentally also my 3rd metaversary. I’ve had an incredible three years here and feel so privileged to have worked here.
This is my (double) badge post.
If you’ve worked with me, you’ve probably had me send you a wall of text about one thing or another (sorry!). I love writing and write to think & reflect, and I hope you’ll indulge me in reading (some of) one last wall of text until we meet again. ❤️

What came before Meta

I started building products when I was 7. First I started making wacky Yu-gi-oh cards and board games, and then later at 11, IRC bots, phpBB and Wordpress plugins, private (not-very-legal) MMORPG server scripts, and websites. This was back in the day when you were pretty much forced to use PHP for web dev and deal with its absurd design choices and Flexbox, React, and Node all didn’t exist yet and you banged your head all day trying to make sure Internet Explorer 6 was working.
The internet has far and away defined more of my life than anything else. At 12, I was a shut-in, video-game-obsessed kid, pretending to do online school and marking assignments complete while logging in as my mom, who was far too busy running around keeping 5 kids afloat. My idols were video game streamers and competitors (like Day9) and my friends were folks on the internet I met playing games. I was not too hopeful of my future, and all 5 of us dropped out of school at one point or another.
Programming made me realize there was more that I wanted to do with my life and became my primary hobby. I went back to public high school for my freshman year, where I was a year older than my peers and behind two years of schooling, but I knew I wanted to build cool stuff and was driven by that!
I didn’t get into a target CS university. Ohio State probably sent at most 4 people per year to FB & Google despite a sizable CS program and massive university. At the time, most folks had never heard of LeetCode and would fail all the big tech interviews 😭. But I got super lucky and a referral from Dalton Flanagan, my freshman year peer mentor. If not for that referral, I’m certain that I wouldn’t be here.
My primary career goal was to work on people problems at scale — and I wanted to be a software engineer at a big tech company to do so. My other career goal was to be an effective altruist via starting a Donor Advised Fund with structured giving principles. Working at Meta, I’ve been privileged in being able to to do both. 🙂

What I’ve loved at Meta

❤️ My favorite project: My favorite project at Meta was building out UI & infra for the Frames promotion campaigns for COVID-19 social distancing (2020), U.S. elections voting (2020), and getting vaccinated (2021). About two dozen people worked on the #StayHome campaign; we cranked it out in just 1-2 weeks and these frames became some of the most used frames of all time. I’m really proud to be able to say nearly a billion people on FB saw these frames somehow and it helped some folks decide to stay in or get vaccinated at the height of the pandemic.
notion image
☄️ My other favorite project: When I started at FB, the web version was a hot, slow, messy pile of competing frameworks and design principles. I helped build out Profile for the new www.facebook.com aka “Comet.” I worked with a ton of awesome folks on Profile’s new header, action bar, prompts & banners, and performance, and fixing revert-to-old-FB extensions, old security exploits, Blue-to-Comet migrations, and more. To be able to type “www.facebook.com/me” and say, “hey, I did [some of] that!” is pretty neat 🙂.
notion image
notion image
Autonomy & Freedom: I’ve loved being able to contribute to products outside my direct space, whether that’s dogfooding and giving feedback on Reels or writing diffs for tools my team doesn’t own. Throughout my time at FB, I’ve also had a large degree of influence over my roadmap, coming up with my own projects and how to build them. There’s an openness and autonomy here that I don’t think you’ll find anywhere else. When I was an intern, I built a Chrome extension to address an internal security need. Despite being a regular ol’ software engineer, I often get to work on product design principles or put on my data analytics hat 🕵️‍♀️.
Scale: Throughout this whole recruiting process, a ton of companies have tried to sell, “You’ll have so much more scale and autonomy here [at this smaller company] and won’t be working on a small project.” I’ve never felt that the scale of projects at FB has ever felt small. Often, we’re deciding between Profile projects that impact 1M people a month to 1B people a month.
People: The people are eclectic, deeply caring, and hard working. The @ Meta employee groups are incredible. I’ve gotten to work with hundreds of people during my time at FB and learned so much. Part of why I joined is because of people like Dan Abramov and the entire React team (and Meta’s open source contributions), and Sheryl Sandberg working here and following their work. I’ll deeply miss the people culture: the happy hours, off-sites, ping pong games, and coworker interactions.
Integrity & Social Good: Social products are full of nuanced social trade-offs, bad actors, and complex political choices. I definitely don’t agree with every decision taken, but I know there’s deep discussion and planning for what goes on here and tradeoffs discussed at the social, political, and economic levels and dedicated people working on integrity. When you’re the biggest platform, you’re also the biggest target, and we often forget that there are professional adversaries whose full-time job it is to spam and break FB or mislead or scam users. Somehow, I think Meta still does a pretty good job. There’s still a long way to go and tons of work in progress, like making a more meaningful app and promoting higher quality content, but it’s been pretty cool to see all the work done here — from the impact of fundraisers & blood donations & frames to helping grow SMBs (small-to-medium businesses) to reducing abuse.
Compensation & Perks & Culture: Not just 6 years ago, I remember going to Aldi’s and picking groceries budgeting the calorie/$ ratio, or sneaking into campus dining halls and stashing dozens of chicken breasts and veggies in tupperware containers for the week. I’d almost never go to the doctor or dentist — which was both a mix of an east Asian upbringing & frugality but also out of financial necessity. To go from that to having free, incredible breakfast, lunch & dinner and world-class health care and being able to financially help my family, I’ve been continuously floored at how good things are (even when things are bad).

What I’ve done at Meta

Here’s some stats about my 3 years here. I write a lot more than I code 😬.
  • 🙋‍♂️ As a full-timer, started on August 18, 2019, longer than 72.6% (98K) of employees.
  • 💻 Wrote 676 diffs containing 247K total and 50K significant lines of code, deleting 101K.
  • 🤓 Reviewed 1.5K commits (adding a net 284K lines of code), writing 134K words and receiving 1.8K comment likes. I was often told to review less diffs.
  • 🌱 Went through 4.5 performance cycles and 1 no assessment, promoted twice (E3 → E5).
  • ⛄️ Had 4 fantastic managers (Olga → Matt → Olga → Dan → Allison) over 4 renames of the same team (Profile Expression → Core Profile → Profile Foundations → Identity Foundations) and ~3? re-orgs.
  • 💭 Wrote 214K words in Workplace through 743 posts, 1950 comments, and 4 notes. This post adds 4K more 😬.
  • ✏️ Edited 474 wiki pages through 559 revisions, reorganizing the entire Identity Engineering and Identity wikis. Most of this was moving stuff around, substantial pages edited is probably <40.
  • 👾 Caught 590/909 Pokemon. I like my shiny Flygon the most.
Editor's note: There was a fun script that gave you a random Pokemon any time you'd complete a task!
  • 🐞 Reported 259 bugs, fixing ~50+.
  • 😭 Submitted 8 referrals, of which only 1 got hired. (That one was Trey and we actually worked our last 4 jobs together).
  • 🙏 Received 270 #thanks from 144 distinct people; sent 343 #thanks.
Editor's note: There was a thank bot system to thank folks who helped you or you worked with a "#thanks @X for Y" message. Kinda odd at first, but helpful to look back on for reflective purposes.
  • 👥 Mentored 6+ engineers, including 1 intern and 1 rotational engineer (who both converted and stayed at FB!).
  • 🏓 Played dozens of hours of ping pong and smash bros!
Editor's note: During my time working at the office, I was just seconds away from a ping pong table and a TV setup with a Nintendo Switch for Smash Ultimate. 🤔

What I’ve learned at Meta

These are some lessons and mental models I’ve learned here — written how I’d probably tell myself starting at Meta three years ago.

Everything is a trade-off.

For every product, work decision, engineering or design choice, there are tradeoffs.
Our immediate perspective is always limited in seeing all tradeoffs because it comes with immense bias from our background and beliefs.
Often it helps to go, “From other perspectives, what are the pros & cons & other implications of this choice?”
Perspectives could be: different user personas (young vs old, business vs creator, tech-literate vs new user), goals (raise the bar vs build quickly vs hit metric wins vs best user experience vs developer velocity vs design alignment), or approaches (data-driven, intuition, feelings, values-driven, consensus, mind-mapping, priority).
Then, discuss, debate, and engage with tradeoffs, prioritize, build, and iterate! (This is what design thinking is all about!)
Olga, my ex-manager, used to have me write a list of all the different things I was involved in to help me realize how much I was spreading myself thin. I remember spending a ton of time advocating building a unified recommendations unit (serving People You May Know, Groups You Should Join, etc.) and planning out every detail, but was too spread thin and wasn’t able to pick up the project back up again until recently. The trade-offs were that project would take more time, communication, and direction and be riskier if things didn’t come together, but would win a ton of scalability, reliability, and developer efficiency if done right.

Lean in and step up — especially when you feel like nobody else is.

During my time at FB, I’ve worn a lot of hats, as a data analyst, product/project manager, product designer, and tech lead at different times. Most of these hats were not presented to me but something I decided to take on, even though I didn’t think I was capable of doing them.
“Suckin’ at something is the first step to being sorta good at something.” — Jake the Dog, Adventure Time.
Yifei, my skip manager, recently told me, to grow, you should feel like you’re being stretched out of your comfort zone at least 20% of the time. Too much and you’ll be overwhelmed; too little and you’ll be bored.
Sound the alarm if you feel something isn’t right. Take ownership if you feel nobody else is. Ask for the role and positions that you want and then demonstrate that you can do it, or do this in reverse. Advocate for what you want to build to be added to the roadmap and then build it. Put on that hat and see what you can do with it! 🎩

If you’re swamped and spread thin, default your answer to No.

There’s a quote I think about once in a while — “how am I complicit in creating the conditions I say I don’t want?”
Are you often too busy, working extremely hard to pass deadlines, or working on things you don’t believe in? Say no more where possible, and explain the trade-offs and prioritization as to why you’re saying No.
Delay the deadline and fix your future projections. Delegate to others where possible or helpful. Decline the meeting you really don’t need to be at. Deny notifications and unfollow threads that are just noise.
Make decisions that reduce more decisions down the road.
We’re most effective when we have deep focus and doing the stuff we enjoy and are good at, and when we have the proper time to do them. Often, doing more comes at the cost of quality, deep work & flow, or sanity. Doing less helps us be more.
Often you’ll just have to do work you don’t enjoy. There’s always maintenance or operations work that few want to do. Consider how to solve the problem at scale (at the team, org, or company level) so there’s less of it or it’s handled more effectively. Other times, you may have to disagree and commit.

Read, listen, and engage.

I’ve never had a book reading habit as an adult until recently. I think a big part of what’s helped me develop the habit recently is (1) dropping books (or other works) that don’t stick or feel meaningful, (2) listening to audio books on walks and commutes, or reading and listening at the same time, and (3) building a habit via momentum, intention, and reducing friction.
Three of the most important books I’ve read that have helped my programming, mental well-being, and perspectives are:
The Pragmatic Programmer on building principled, engineering systems (book, github summary)
“Despite the best laid plans and the best people, a project can still experience ruin and decay during its lifetime. Yet there are other projects that, despite enormous difficulties and constant setbacks, successfully fight nature's tendency toward disorder and manage to come out pretty well. What makes the difference? In inner cities, some buildings are beautiful and clean, while others are rotting hulks. Why? Researchers in the field of crime and urban decay discovered a fascinating trigger mechanism, one that very quickly turns a clean, intact, inhabited building into a smashed and abandoned derelict. A broken window. One broken window, left unrepaired for any substantial length of time, instills in the inhabitants of the building a sense of abandonment—a sense that the powers that be don't care about the building. So another window gets broken. People start littering. Graffiti appears. Serious structural damage begins. In a relatively short space of time, the building becomes damaged beyond the owner's desire to fix it, and the sense of abandonment becomes reality.”
The Obstacle Is The Way on reforming perception, action, and will and Stoicism philosophy (book)
“There is no good or bad without us, there is only perception. There is the event itself and the story we tell ourselves about what it means.”
The Courage to Be Disliked on choosing happiness and perspective via self-determinism (book, video review)
“No experience is in itself a cause of our success or failure. We do not suffer from the shock of our experiences—the so-called trauma—but instead we make out of them whatever suits our purposes. We are not determined by our experiences, but the meaning we give them is self-determining.”
Other book & podcast recs can be found on my website!
Reading or listening to a book, post, or podcast is like surrounding yourself with a mentor. It’s like free (or cheap) access to somebody with thousands of hours of experience in something who spent hours on something to help you learn something! You might not agree with their perspectives & paradigms fully, but you can always borrow them from time to time.
Many human experiences are thematically similar and that includes work experiences. Reading coworkers’ Workplace posts and engaging with my mentors & managers — has helped me grow a ton as a person, product thinker, and engineer. 🌱

What I feel Meta needs to change

Every good badge post needs a hot take or two, right? 🔥
It’s totally possible my views here aren’t practical or optimize for the wrong trade-offs and even miss significant context (i.e. I have no idea what I’m talking about and I’m sorry in advance), but I love thinking about and building organizational culture, and that’s why I wrote this and want to discuss this with you. These are forces I’ve constantly felt a battle against during my time at FB and have tried to improve.
Note: when I say “we here, I don’t mean my team or my org in particular but the entire Meta family of apps.

On metrics

“When a measure becomes a target, it ceases to be a good measure” Goodhart’s Law.
In Hanoi, Vietnam, in 1902, the French government tried to control the rapidly growing rat population and put a bounty of 1c for each rat tail turned in. Rat catchers turned in tons of tails, but the rat population wasn’t dwindling. Instead, inspectors noticed a growing rat population and rats without tails. It was more profitable for rat catchers to just cut off tails and let the rats continue to reproduce, and the program was a failure.
I think the way Meta uses metrics is too often similar to this — we’re inadvertently cutting off rat tails in our product development lifecycle. Too often, I’ve seen experiments and metrics evaluated in a short-term, isolated way that disregards the larger ecosystem. And in most meetings, I hear about metrics talked about far more than people and user experiences.
Metrics are an imperfect proxy for the actual goal of understanding and improving experiences for users; but often at Meta and in the industry, metrics have become the sole goal instead of the guide.
The idea of data-driven development and incremental A/B tests is that a bunch of small % improvements add up to a fantastic multiplying effect. However, in aggregate, a ton of competing A/B tests, low-quality, bug-ridden products, and abuse of attention levers don’t multiply each other — they subtract, divide, and cannibalize. Meanwhile, just for the sake of measurement, we thrash users by constantly allocating different experiences to them and taking them away. We keep holdouts for months and years, rarely cleaning them up, preventing users from accessing key features and even bug fixes.
Often what’s lacking at Meta is putting ourselves in our users’ shoes and creating a culture of user empathy and delightful experiences. When we’re so directly focused on moving growth metric ABC or XYZ at all costs, we forget that users and user experiences are who and what matters. UX research, design disciplines, and product specialists are amazing at thinking about users over metrics. We should listen to them some more! 🙂

On systems and Minimum Viable Products (MVPs)

We build far too many rapid MVPs and solutions. We focus too much on charging straight forward on short-term metric goals instead of building great systems and products. MVPs are supposed to be used to validate whether it’s worth investing more in a product by getting early signal, but then we quickly move onto the next MVP and leave the last one in shambles, saying, “we’ll fix it later.” Years later, we’ll eventually deprecate that poorly used product that never thrived because it was never worked on past the MVP stage and is full of bugs and tech debt.
For most products, I think what makes them delightful and gets users (especially gen-Z) coming back isn’t just because of an existing social graph or a product idea but because of details and execution past the MVP stage. It’s the reliability of every interaction and use-case, the invisible product & design details, and gratifying content algorithms. It’s the delightful connections between people and products, built by consistent product quality and empathy.
Meanwhile, building lasting engineering systems as opposed to one-off product work costs extra initial time and expertise but reduces cost of onboarding, maintenance, and improvement. Systems are far easier to document, to onboard to, to understand, to iterate and improve, because you don’t need as much specific product context and each component is logically developed. The Pragmatic Programmer is a great book on building engineering systems.
I believe strongly that folks should focus on building delightful, principled products and engineering systems instead of short-term experiments and MVPs, and have tried to do so in my projects here at FB.
If there was one wand I could wave and change something about Meta, it’d be for the product and engineering culture to shift to do less, better, and focus on quality over quantity.

I know many of these things are actively being worked on at every level. I deeply believe in Meta’s capacity for good and I know Profile is being left in very good hands! It’s up to y’all to keep sounding the alarm and to drive change. Hopefully adding extra signal and food for thought is helpful. 🌱

What’s next?

After Meta, I’m moving to San Francisco to work at a startup called Notion!
The biggest motivation is adventure and curiosity. I’ve known since I started at FB that I’d go try something new & smaller in a few years, and now it’s about that time. I’m excited to work in a new product space (productivity) on another product I use every day.
I’ll miss y’all tons! Profile & Meta has been an amazing ride and I’m so glad I landed here. Thank you to all of my managers and mentors who’ve played an incredible role in shaping me as an engineer and person: Olga, Matt, Dan, Allison, Mitchell, Yifei, TJ, Bobcat, Jeff, Devesh, Kristine, Harrison, John, Dalton, and Warren. There are so many others I’d shoutout and thank but can’t fit them all in this note. Thanks to everybody in Identity and Meta I’ve worked with in these past 3 years — for challenging me, supporting me, and making this journey so special. ❤️

✌️ See ya later. Thank you for reading. I truly appreciate it. 😊