The Peterman Pod - Meta Distinguished Eng (IC9) On Influencing Engs, Failures, and Learnings

Episode Date: February 9, 2026

This is Adam Ernst, a Distinguished Engineer at Meta (IC9) who’s built iOS infrastructure that has impacted the entire company. We talked about how his career grew, a major failed project of his, an...d everything he learned growing to that level.🔸 My keyboard project link: https://read.compose.llc/p/our-keyboard-design-reveal𝗣𝗼𝗱𝗰𝗮𝘀𝘁 𝗹𝗶𝗻𝗸𝘀:• YouTube: https://youtu.be/YA_OYJF3Mmw• Apple: https://podcasts.apple.com/us/podcast/the-peterman-pod/id1777363835• Transcript: https://www.developing.dev/p/meta-distinguished-eng-ic9-on-influencing𝗧𝗶𝗺𝗲𝘀𝘁𝗮𝗺𝗽𝘀:00:00:00 - Intro00:00:47 - His middle school company00:03:50 - His first project and promo at Meta00:10:03 - Why code review is undervalued00:12:42 - Senior Staff (IC7) promo story and project00:19:26 - His major failed project00:26:35 - How to handle a failed project00:29:04 - Thoughts on management00:31:35 - Technical depth vs breadth00:33:32 - IC9 expectations00:34:46 - Senior engineers he admires00:37:39 - Advice for his younger self00:39:52 - Outro𝗪𝗵𝗲𝗿𝗲 𝘁𝗼 𝗳𝗶𝗻𝗱 𝗔𝗱𝗮𝗺:• LinkedIn: https://www.linkedin.com/in/adamjernst/𝗪𝗵𝗲𝗿𝗲 𝘁𝗼 𝗳𝗶𝗻𝗱 𝗥𝘆𝗮𝗻:• Newsletter: https://www.developing.dev/• X/Twitter: https://x.com/ryanlpeterman• LinkedIn: https://www.linkedin.com/in/ryanlpeterman/• Threads: https://www.threads.com/@ryanlpeterman• Instagram: https://www.instagram.com/ryanlpeterman• TikTok: https://www.tiktok.com/@ryanlpeterman

Transcript
Discussion (0)
Starting point is 00:00:00 When I run into a problem, instead of being like, all right, got to go talk to the GraphQL team. I'm like, screw it. I'm just going to figure out what the problem is. This is Adam Ernst. He's a distinguished engineer or IC9 at Meta who has built iOS infrastructure that impacted the entire company. And I asked them how his career grew. If you show up, you're like, hey, I did the work already for you. Much easier conversation.
Starting point is 00:00:22 1,600 diffs in six months. Why did you spend so much time also reviewing code? It's really valuable because you can influence other engineers in an organic way. He was unusually honest about a major failed project. So Component Script was interesting because it was a total and complete failure. And I worked on it for like two years. With all that pushback, did you ever doubt the direction that you're going in? There were some literally sleepless nights.
Starting point is 00:00:47 Here's the full episode. I saw that you have something on your resume. It says Cosmic Soft, which started in 2000. And if I have the math right, that's like, middle school for you. So what was that? And can you talk more about the story behind Cosmic Soft? Yeah, you dug deep, man. I got to take that off of there. That is indeed my middle school software company. I discovered at an early age that I liked writing software. My mom was a teacher. And I would often spend time in her classroom after school, just like messing around with computers.
Starting point is 00:01:25 and that gave me the inspiration for my first product to sell, which was online testing software. I wrote it in a tool called Real Basic, which was basically a cross-platform, visual basic-inspired language. So I was actually writing Basic, which, oh, God. And yeah, sold it on the internet to, like, tons of different countries. It was a lot of fun. I was not a programmer at that time. Can you give give some more context. Is that something that's running, I guess, native on like a Windows machine or something? Or what is that? Well, Real Basic was this product from a different company, not Microsoft. And it was inspired by Visual Basic, very clearly Visual Basic-esque, but it was cross-platform. And you could design the software on any platform. I used a Mac. The concept behind Digital Basic,
Starting point is 00:02:15 for those who haven't used it, is that you basically have this blank canvas and you can just drag and drop buttons and text fields and all this stuff on it. Very easy to get it. Very easy to get into, right? Because even nowadays with something like Swift UI or React, you're writing code that describes your user interface. There's a separation there. Whereas visual base, you're like, well, I want a button, drag, drop. When the button is clicked, I wanted to close the screen. Okay, double click on the button and you write some code that's like window. close. So really easy to get started with, not very scalable. And, you know, basic is a horrifying language. But it was a fun way to get started and really easy for me as basically a middle schooler to write an actual software
Starting point is 00:02:55 product that was useful. How are you selling that on the internet? Because at the time, they didn't have Stripe or anything like that. How do you even receive money from these people in other countries? There was a service called Ecelerate, which was like a proto stripe. It allowed you to create an online store for your software. It would help you create a code that you could enter to unlock the software. And so people would go to this website. They type in their credit. card info and they would get a code to unlock my software. Fun fact, I also accepted payment via check. So for a while, as like an eighth grader, I was getting checks from all over the United States from teachers. They'd mail me a check for 1995 and I would send them via email a code to unlock their
Starting point is 00:03:37 software. Good times. Did your parents know you were selling software to strangers on the internet? They did. I don't know what they thought of it or what they could make of it, but they did know I was doing it. Okay. That's so. cool. But yeah, let's get into kind of like the main part of your career, which is you joining Facebook. You joined the company to help with the native app rewrite from HTML5. And you got promoted to the staff equivalent or E6 very fast. Were you hired as a E5? I'm pretty sure I was hired as an E5 because I had industry experience. I was self-employed, but I, you know, like wrote software in the industry for iPhone. And yeah, it was funny because Facebook was just a total.
Starting point is 00:04:21 totally different company. I joined just before the IPO, like literally weeks before the IPO. And so it was already a large company, but compared to what it is today, totally different. All of the iOS engineers could meet in one conference room. And we did, right? Like every week we had a stand up and like we talked through what we did that week and all that stuff. And yeah, it was a fun time to join because we were totally rewriting the app. There was this cultural shift away from face web, this like HTML5 attempt at making a native app and towards the native code. And the nativeist engineers were very much like, ascendant, right? Like we had won the battle and now we needed to prove ourselves that it was going to work out and it did. And that also meant a lot of big problems, a lot of big opportunities, a lot of big problems that needed solving because our code base was brand new and we were discovering all the ways where it was going to fall over as we continued making the app bigger, adding new features. So that's what I walked into in 2012 and it was definitely a fun time. One of the first projects that you worked on was one of those scaling challenges. in adopting native code.
Starting point is 00:05:22 And that also happened to be your E6 promo. Could you talk a little bit about the core data problem and why it was E6? Yeah, core data is Apple's ORM database framework. It's great if you are a startup that has like two engineers and you just need a small little way to store data, it works great for that. We already had, like I said,
Starting point is 00:05:44 we had enough iOS engineers, we could all fit in one conference room. So we started with like 15 to 20 maybe by the time I got there. And we were rapidly growing, right? Like soon we had 100. Soon we had 200. Core data falls over completely at that scale.
Starting point is 00:05:57 So we needed to swap out how we store data. But this was also a really critical time, right? We had at this point just launched our native rewrite using core data. And so everyone wanted to add features. The groups team, the events team, the pages team. They all wanted to like rewrite their stuff in native and get all the great wins from native code. Meanwhile, at that time, at that time, mobile was a separate org inside of Facebook. We had the mobile team were like, uh, this is not going so well.
Starting point is 00:06:23 Like Cordata is going to fall over tomorrow and everyone's knocking down our door being like, please rewrite native. So we had to find a way to do it incrementally. We needed to find a better architecture, which was what we, you know, found along the way. So that's where we were in like 2012, 2013. And we called our new solution mem models, which was an immutable model system, which made it a lot easier to reason about thread safety, mutations, etc. You had this new offering that, you know, had a lot of benefits to it.
Starting point is 00:06:50 But still, I imagine you had to convince other teams to adopt it. So, you know, the core features of the app, feed, et cetera, were already bought in because the performance was miles better and they didn't require any convincing. It was driving it all the way to the finish line, giving the last straggler products to onboard that was harder, right? Because for them, they were like, yes, so our performance is a little bit better. Who cares? We don't care. We were more interested in other things. Also, it wasn't necessarily individual teams that were skeptical of the entire project, but we did get a lot of push
Starting point is 00:07:20 back from Apple-e engineers, for lack of a better word, like engineers who believe in Apple's built-in solutions and are like, why would we not use core data? Like, I'm an iOS engineer. We should use core data and everything else vanilla from Apple. I think that's lessened to someone over the years just because meta and Facebook and Instagram and all of our other properties have gotten so large. It's clear that Apple's solutions don't scale to that size. But at least in 2012 and 2013, there were a lot of people still clinging to this idea that, hey, we should just use the vanilla at Apple frameworks, and we needed to convince them over and over and over, like, here's why that's just not going to work. So that was a big challenge for us at the time. What did you learn
Starting point is 00:07:58 about influencing other engineers without authority? And do you have any tips on how to do that across like a large code base? My number one tip is talk in person or via video conference, if possible. You spend a lot of time trying to make your writing clear and accessible and have a good tone and you can often convey that tone way faster in person. My other feedback is to be sympathetic to their point of view, right? Like my, I would always start the conversation saying like, yes, I prefer vanilla Apple frameworks too. We're not going down this path just because I want to invent a new framework. Here are the specific reasons why we think it can't scale. Give data, give actual, you know, we were getting to the point where we were disassembling
Starting point is 00:08:41 core data's source code because it's not open source. To, understand what is it doing? Why is it taking so long to initialize? Having that data to give to other engineers is really useful, right? Like, hey, you don't know how it works because it's a black box. We know how it works. Here's how it works. And that's why that's not going to work for us. So, you know, I guess that sums up as do your research so that you can be convincing in that fashion. And the final one for me personally is just do the work for them. I think there are some engineers who would go about this project in the sense of, hey, I built the scaffolding. Now my job is to convince other people to do the work of migration. We call this archetype coding machine. I have mixed
Starting point is 00:09:19 feelings about archetypes in general, but in general, the idea is like, I write a lot of code. I like to write code. So my thought was, I'll just go do it for them. It's one thing to convince them, hey, you have to step up and do all this work. The other is like, if you show up, you're like, hey, I did the work already for you. Here are the benefits. I just need you to sign off and say, yes, this is fine in our code base. Much easier conversation. That mode of operation was very successful. Here. at meta for a long time. I think it's getting harder now. Our codebase is so big that one person can't necessarily do the entire migration.
Starting point is 00:09:51 You require some more alignment. But for a long time, that was a very good way to operate because you just show up and be like, hey, I solved the problem. And people would be like, great, love that you solved the problem and then I have to do nothing. I just say yes. It worked really well. I saw like in the career note that you wrote about this promotion that you'd also reviewed over 1,600 diffs and a half.
Starting point is 00:10:13 And that comes out to around like 14 diffs per workday. Why did you spend so much time also reviewing code? I think code review is super undervalued and I still do a ton of it. It's really valuable because you can influence other engineers in an organic way. Right. Someone's like, Adam, what's your message to other engineers at the company? What do you want to change? I'm like, I don't know.
Starting point is 00:10:37 But if I see a concrete diff and I'm like, I don't like how they're doing this and here's why, it gives me a perfect opening to get into it. However, I also try to be a very flexible diff reviewer, right? I feel like there were some different viewers who had that attitude of like, I'm going to help other engineers. And then they were very inflexible. Anytime they saw any little thing they didn't like reject. My view was like, all right, I see what you're doing and why you're doing it this way.
Starting point is 00:11:01 Here's my concern. And then either like, I'm going to let you do what you want if you really feel strongly, but here's what I would do differently next time. Or I'd be like, let's talk about how to redo your. work to accomplish whatever concern I have, basically hold their hand through the process, if I can. Because I feel like that's a great way to, you know, now they're going to hopefully, if they're convinced by my argument, they're going to hold that same change in how they operate
Starting point is 00:11:29 for their own future work and in all the future code review they do. It's like viral, right? And you see this would spread through the code reviews that they did. So I thought it was a really great way to like get my opinions out there and have those debates in a really structured format. Given that you've done just such an absurd volume of diff reviews, what makes a good diff comment versus a bad one, in your opinion? Talk through why you care about what you are nitpicking and not just what to change, right?
Starting point is 00:11:58 Don't say change X to Y, say, hey, X has some problems. So I really want you to use Y instead. But if you really feel strongly, if there's something I'm missing, then you can go ahead and use X, right? The other thing I was always open to in Diff Review comments was the fact that you that I might be missing context. And that's still the diff author's fault, maybe, because your diff should contain enough context
Starting point is 00:12:18 for anyone to review it on its own merits. But I'd often be like, hey, I don't understand why you're doing it this way. I want you to do it this way instead. But is there some missing context that would change my mind? If so, fill me in and put it in your diff summary, which again, I feel like make sure that if I'm making a stupid mistake, which happens, I don't look like a total idiot
Starting point is 00:12:38 who's just like getting it wrong. it really helps. So moving on to like, you know, E7 promo or the senior staff promo, I know that the main project that kind of drove that was component kit. Can you give some context on the story behind component kit? The years all blur together at this point, but this was like 2014 maybe. We had a very large and complex product, Facebook News Feed, which was growing and growing and growing so fast because the company hired lots of new engineers and they stuffed everyone on
Starting point is 00:13:10 news feed because that was the hot product at the time. So it was basically falling apart, right? We had constant crashes, constant layout bugs where like content would be overlapping in weird ways. And it was a struggle to keep performance good. I can't claim credit for the idea again here. It was Lee Byron, who was, I think, my manager at the time, but was for a long time, a very senior engineer at the company and co-invented GraphQL. And he had done a lot of work with React on the web, which was relatively new then too, even on the web, it was new. And he was like, you know what? We really need this React concept, but for iOS development.
Starting point is 00:13:47 At this time, React Native either didn't exist or was just a prototype. And so Lee told me, like, why don't you just take some time and think about how would the concepts of React work in an iOS first way? And Component Kit was my answer to that question. So it uses the same concepts of like components and we use the same. ability, re-render everything conceptually at least, when anything changes. View reconciliation, right? So you're not directly managing UI views.
Starting point is 00:14:17 You're instead just stating, hey, I want there to be a button that has this caption. The framework takes care of creating the actual button view. And I'm pretty proud of the balance that it struck in terms of the syntax was appealing, the performance was amazing. And it allowed us to solve a problem that we really needed to solve as a business. this. And again, this was 2014. So years before Swift UI, Swift didn't exist yet. Swift UI didn't exist yet. React Native didn't exist yet. It was very early on the scene. And it did take some convincing of other iOS engineers because it was still a very alien way to write code on iOS.
Starting point is 00:14:54 But once convinced, everybody loved it. Everybody thought this is a really great way to write the UI for a complex product like Facebook news feed. So the big challenge there was inventing the framework, getting it adopted in news feed and then getting it adopted everywhere else. So I had lots of work to do. How did you convince people? Because this declarative framework was such a different way of doing things. I imagine there was a lot of pushback. How did you drive those difficult conversations?
Starting point is 00:15:23 Tons of pushback. Some people were convinced when they saw concrete examples of, hey, here's what the same code would look like in component kit. It's now like a third as much code. Some people were convinced when they can see the performance, right? Oh, look, it allows us to render all the viewed hierarchies on a background thread and then only do the minimal amount of work on the main thread. They were like, that's really cool.
Starting point is 00:15:46 But there were plenty of people who were holdouts even then. And we had to call in mediators, right? Basically, like there were other senior engineers at the time because when I was inventing component kid I was an IC6. There were other more senior engineers who would, you know, get us to huddle up and try to talk through how do we find a path forward that we can all agree on. And I think Lee Byron was very involved in these conversations. I know Alan Kenastraro was a senior engineer at the time who was very involved in this,
Starting point is 00:16:14 helping us like mediate between these different groups. But I think the fact that React had a lot of cred as a framework at the company on the web really helped, right? Because we could point and be like, look at what React is doing on the web. We wanted to do the same on iOS. There aren't any really good reasons why we can't do it. It's not impossible to do on the platform. we have proven we can.
Starting point is 00:16:33 So get on board. And I acknowledge the downsides of Component Kit, right? By now, it's very creaky and old because it was a C++, objective C++ framework. Now we have a Swift API for it. That's great. But still, at the time, the weirdnesses of Component Kit were even then somewhat unappealing.
Starting point is 00:16:52 But my pitch was always, yes, it's a little weird. It's not the usual way of writing code in iOS. But here's all the amazing things we get. That's why you should do it. So that's the pitch that we had to make again and again and again to skeptical iOS engineers. Is there anything that you learned in trying to convince these people that were very against this approach that is kind of useful and general learning for anyone that's trying to have some new developer offering and convince people to use it?
Starting point is 00:17:20 Allies are super useful, right? I still remember there were some engineers like Clement Gensmer and Greg Meck, who carried a lot of weight in the company and they sought and liked it. great, I wasn't alone and they could help convince other people because, you know, I have one way of convincing people, which isn't always effective and they have other ways of convincing people, which often were more effective. And so it was nice to be able to break it down and like, you know, see the different ways that this discussion happened over time. There were opportunities for compromise. The other big alternative out there was this framework called panels, which hadn't really gotten off the ground
Starting point is 00:17:51 yet, but was supposed to be like the next way to write UI at Facebook. And I knew them really well because one of them was like my mentor. And so I, you know, was very, very close to Jonathan Dan, the guy behind panels. And boy, they had a really hard time because they felt like they were developing the next thing. And then I came along as like, actually, let's do component kit. Wasn't so good. But we found a way to compromise and we adopted some of the panels data source technology to power component kit, which was a good compromise and allowed us all to feel like we had to win. Instead of sticking to your guns and every little thing, if you can find a way to bring people into your fold into the tent, that's really, really helpful.
Starting point is 00:18:26 With all that pushback, did you ever doubt the direction that you're going in? No, I was very convinced that this was the right call for Facebook newsfeed. I will say, this goes for all declarative UI frameworks, React, Swift UI, Component Kit. They're really good at some things. Like a Facebook news feed is the perfect thing for it because it's like a scrolling list of complicated multi-level nesting. And it's mostly static, right? There's some animation and cool stuff, but mostly it just is like a list of stuff. That's the perfect application for it.
Starting point is 00:18:56 When you look at like a super dynamic drag and drop interface, eh, maybe not the right thing for it, right? Maybe not the ideal case anyway. You can make it work, but it's not going to be incredibly natural. So I'm very aware that like there are tradeoffs to these different paradigms.
Starting point is 00:19:12 And I wasn't drinking the Kool-Aid in terms of telling everyone, component kit's the only way to write UI's on Facebook. Like that should be the, you know, our only option is component kit. No. But in general, for what we wanted to use it for, yes,
Starting point is 00:19:24 I was very convinced that it was the right path forward. you know, the next project you worked on was Component Script. What was the motivation behind that project? And, you know, what's the story behind it? So Component Script was interesting because it was a total and complete failure. And I worked on it for like two years. At the time, my manager was a guy named Ari Grant, who was a force of nature, right? He was like all over the place, very busy, carried a lot of influence.
Starting point is 00:19:52 And Ari felt really strongly that we needed to get out of the per platform. platform silo, right? So like iOS had component kit, Android had a React and component kit inspired by then called Litho. But this meant we were writing everything multiple times, right? We had to write it in component kit for iOS. We had to write it in Android. So you wanted to have a cross-platform solution. React Native was not that solution. And we knew that. At this time, we tried React Native and it didn't go well. The reason was, in my opinion, this is just my opinion. React Native is designed to be in charge of the entire app. It works really well if your entire app is React Native. Or if you have entire app to React Native and then small
Starting point is 00:20:26 little pieces on the very bottom are native or bridged. Where it doesn't work is the way we wrote software at that time, which was we had this large, complex native app and we wanted to slot in small pieces of cross platform in different areas, right? So like, oh, maybe this little square on this screen is rendered using JavaScript. Maybe this tab is rendered in JavaScript and this tab is native. React Native could not do that for us at the time. They've done a lot of architectural changes to React Native in the last 10 years since then, and maybe it's better at it now, but at the time, it didn't really work. So we wanted cross-platform.
Starting point is 00:21:03 When you React Native was not it, what could we do? And so Ari asked me to go and work on this. And at the time, it was like, okay, this is the next nudge, right? Like, We Byron nudged me to work on React for iOS. That was Component Kit. Great. This is the next nudge. Work on cross-platform for our UI rendering frameworks that we use on iOS and Android.
Starting point is 00:21:22 And so I came up with a framework called ComponentScript. The idea was basically at first I took the React APIs, the actual React implementation. I said, what if we just made a different React Native, right? So exactly like React Native except that it works on top of Component Kit and Witho because that's what we already have. This turned out to be too difficult. React had a really large surface area and a very complex surface area and trying to make that work on component kit and with it was too challenging.
Starting point is 00:21:47 So I was like, all right, I'll do a smaller paired down API that feels just like React, but actually is simpler and make that. work on top of component kit and witho. And I made it work. It was a real framework. People built real features on it. You could build full screens. You could build individual units. You could do all kinds of, you know, bi-directional embeddings. You could have a native screen that had a component script unit, which had a native component inside of that. You could have a component script screen, which had a native section, all this stuff, really cool features. And for me, it was a real learning experience because I learned that just because it was technically excellent, didn't mean it was
Starting point is 00:22:23 going to win. It checked all the boxes we needed in terms of interop and type safety, but it didn't win and didn't come close to winning because there were many other factors that I didn't take into account. So a great example of writing a lot of code and doing a lot of technical work doesn't mean that it's going to win. I mean, if we were to kind of postmortem, why it didn't win, what are the things that you did well and what are the things that maybe could have gone better? I mean, doing well, I just mentioned it did check off. It checked all the technical boxes that we, as in like the core product interest group cared about, right?
Starting point is 00:23:01 Like it was type safe. It integrated with GraphQL and component kit and witho, our existing native frameworks. It was bidirectional. So you would never be suddenly cut off. There would never be a point where you're like, oh, I just need to embed this native component and I can't do it. No, you could always do it. The mistakes were, number one, I wasn't really aiming at a particular target engineer, right?
Starting point is 00:23:23 So React Native was focused on, like, web engineers who wanted to write for mobile. Component Kit was focused on, hey, we have iOS engineers that already know how to write iOS code. Let's let them write iOS code, but have excellent performance. ComponentScript is like, hey, you can write JavaScript, but it's not React. So like iOS engineers are like, I don't want to learn a whole new language.
Starting point is 00:23:44 I don't want to learn JavaScript. And JavaScript engineers were like, I'll use React Native. I don't want to touch this like weird not React API. No, thank you. So we were kind of stuck. Number two is that like we on the product infrastructure group really cared about GraphQL. We were like, hey, we want data consistency everywhere. So this framework needs to be based on GraphQL.
Starting point is 00:24:03 But it turns out GraphQL can be kind of a pain sometimes, right? Especially at that time, GraphQL tooling was slow and a lot of a lot of hassle. We fixed it a lot since then. But at the time, it was bad. And so trying to build on top of this slow, janky native GraphQL stack, really slowed us down. Meanwhile, there was another framework out there that was, you know, coming in with a server-driven sort of UI approach. And their solution was like, don't worry about data consistency. What if we just didn't do it? And we were all horrified. We're like,
Starting point is 00:24:37 what? You don't have data consistency. So if you like a post on one screen and you go to another screen, it won't show you that the post is liked. And the answer was yes, 60% of the time, 80% of the time, products just don't care. And for the 20% that do care, you can hack something in there that makes it work. So we were pretty horrified by not using GraphQL, but that was a huge advantage if you could just skip all that stuff. But I refused to compromise and that was a problem. And then finally, I went really wide. I was like, all right, I'm just going to talk to all engineers, all mobile engineers, and be like, you guys should all try out ComponentScript. And this meant that I got little pings of interest all over the place because there were a few engineers here and there that were
Starting point is 00:25:17 like, sure, I'll try JavaScript. Sure, I'll try cross platform. But there wasn't any individual team that was like, yes, this is how we want to write products from now on. And so that meant that it never went anywhere, right? Individual engineers would try individual little things here and there, but that was not going to get any momentum. Funny thing was, just when I finally pulled the plug-in component script, the group's team was like, oh, we just decided we were going to go all in on component script. And I was like, oh, man, no.
Starting point is 00:25:42 But even that would not have been enough momentum, right? It was too little too late. So you wrote about this retrospection. It's very detailed. One of the best retrospectives. I've read, why did you publish that so publicly? What was the motivation behind it? I don't recall. It might have been encouraged that I write it, but I certainly wanted to write it. It was cathartic to talk about what went wrong. And even at the time, I had a reputation, right,
Starting point is 00:26:09 people who knew who I was. So everyone would always be like, hey, how's that component script thing going? And the postmortem was a convenient way for me to rip the bandaid off and be candid about, hey, it didn't work and here's why and not have to constantly rehash that conversation over and over and over. But also, I hope that it would influence the way that people did stuff at the company in the future, right? Like, hopefully no one made the same mistake after that if they read my postmortem, or at least they were aware of what they were walking into. And, you know, in this case, you drove a very ambitious project. And it did fail in the end when it comes to performance reviews in a half where something like this is happening or a year where something like this is happening. How does that play out and should people be worried about, you know, their projects getting canceled or things like that?
Starting point is 00:26:54 The thing that made me realize it needed to be canceled is that I got a meets most. So performance did its job there. My manager at the time did the right thing and was like, this is not working. He was also a new manager for me. So I think he like could see it with fresh eyes and be like, this is not going to work. And then when I did cancel it, I like to think I did it in the right way, which is there were products and features. is written in ComponentScript, and I help those teams migrate back to Native code or to react native or whatever they wanted. And I completely deleted the framework. I didn't leave it as
Starting point is 00:27:27 like, you know, oh, this one product is still on Component Scripts where it's to weave it around forever and someone will have to clean it up someday. No, I was like, I'm driving this all the way and I'm deleting the code. It's going to be gone from the repo, which I think garnered some goodwill because it showed others. This is the right way to clean up after your mess. So I feel like I got, if anything, a positive bump after the fact, right? Like there was enough relief of like, all right, this showed people how to wind up, wind down a project that isn't working out. And he posted publicly about it, talking about the lessons learned.
Starting point is 00:27:59 And there's no mess left behind. So if anything, I feel like it helped in the immediate aftermath. So if anyone is like staring down the barrel of like, I think my framework's not going well, but I'm afraid to kill it. You might get more goodwill from killing it responsibly than just like dragging it out and constantly waiting until it's too late. Were there signs that, like, looking back, you could have maybe avoided some of the pain of, I don't know,
Starting point is 00:28:24 meets most or, you know, kind of like it going on as long as it did? Yeah, I mean, look, there were, there was, it was a two-year project. And for the last year, I knew it wasn't going right. And I should have listened to my gut, right? There were some literally sleepless nights, not a lot, but like somewhere. I was like, this doesn't feel right. It's not going well. I don't understand what to do.
Starting point is 00:28:43 And I'm a coding machine. So my reaction was, I just need to write more code. I just need to help more features convert and it'll suddenly take off. And I should have listened instead to that part of my gut that was telling me this is not going to work out. Just go do something you love and find a different way to have impact. And that would have been much better for me in the short and long run. You said before that, you know, for sure, you never wanted to try management and it was not
Starting point is 00:29:09 right for you. for someone who's considering that kind of decision, how did you know that management's not right for you? I like writing code. I really like writing code a lot. And as a manager, you can't write codes. I mean, for me, it's a no-brainer, right? I'm also just, I'm less good at the non-code-related parts of the job. So, like, driving alignment and writing docs. I'm just not good at that stuff. And so for me, I'm like, yeah, I don't want to touch that. And finally, I feel like I'm very good at communication with other. engineers in a technical role. I'm very good at like, hey, we need to solve this technical problem. Let's all get on the same page about how to solve it. I don't think I'm as good at doing that when I'm not quite, when I'm more removed from
Starting point is 00:29:51 the problem, right? Managers have to do a lot of direction setting and influencing people without directly pointing to like this line of code is the problem. And that I think I'm less good at. So for me, I always knew. Management is not for me. But it depends on the person. Obviously, I'm a pretty extreme case.
Starting point is 00:30:08 What about picking the don't. domain that you went with. So from what I see in your career, it's almost entirely on the iOS side with some cross-platform work. How did you align on iOS? And is that something that you feel strongly about being tied to? Or is that just where things have taken you? That's where things have taken me. I don't change around a lot. I've never really changed teams once at this company, right? Like I've been shifted on different teams as part of reorgs. But I don't know. I just kind of roll with the punches and I like what I'm doing. I feel like I like. like the team, so why mess it up? I admire engineers that are like, you know what, I want to go see
Starting point is 00:30:45 what this AI thing is about. I'm going to go check it out. Or like, oh, man, I really want to go arc on ARVR. That's not me. I knew I liked mobile and I felt like I was getting the right opportunities to work on stuff I cared about. So I just kept rolling with it. And I think it has worked out really well for me because it allowed me to build deep knowledge expertise about how all different parts of our system work. Right. If you want to know the guts of the GraphQL cogen or or value object generation or book or all these things, I know what's up. And so it's really helped me get really deep in this particular domain. And that means I have a lot of knowledge about it that helps answer questions from others.
Starting point is 00:31:23 Very useful. Would I do mobile if I was a brand new engineer today? Maybe not. Maybe I do AI because that seems like the hot stuff, right? Or I don't know what else. But I don't feel too bad about sticking with it. You talked about the technical depth. Let's say someone's goal was to be like you.
Starting point is 00:31:40 They really wanted to, you know, super aggressively pursue the high IC career path. They want to go IC9 or bust. Do you think that technical depth is better than breath for becoming the highest levels of senior IC? I mean, it depends on how you operate. I've seen lots of different engineers that operate in different ways. I will say I have breadth and depth, right? As in like not that, you know, it's perfect. It's not like I only know mobile though, right?
Starting point is 00:32:07 Like I know a lot about how Buck operates. I know a lot about how GraphQL schema works. And so for me, the thing that helped me personally worked for me, maybe not for everyone, when I run into a problem instead of being like, all right, got to go talk to the GraphQL team. I'm like, screw it. I'm just going to figure out what the problem is. I'm going to dive eight levels deep into their co-gen guts until I find the problem. And then I'll either fix it myself and now I know GraphQL code gen.
Starting point is 00:32:34 Or I will show up to the GraphQL team and I'll be like, hey, ran into this problem, debug it eight levels deep. Here's the problem. How do I fix it? Which impresses the GraphQL team means that I'm not taking up all their time. And I've learned something new about a new system. And if you keep doing that enough, then you will discover a lot about a lot of different systems. And you'll understand them. And that'll give you so much knowledge and so much, it's like a superpower to be able to dive into all these systems that you now know.
Starting point is 00:33:00 It's also organic. Right. We talked before about code review and how if you just review code that organically gives you actual discussions about how do we want to write our code? Same thing with this, right? Instead of being like, hmm, which systems do I need to go learn for my job? I'm like, they'll come to me.
Starting point is 00:33:16 I'm going to have a problem that I run into. GraphQL is going to block my code from landing. Great. Now I have a reason to go delve into GraphQL Code Gen. I'm not going to study it from first principles and be like, well, I should go learn the GraphQL CoGen systems just because. But when it comes up, sure, I'll do that. A lot of people that get promoted to these really high levels,
Starting point is 00:33:35 one thing I've noticed is the, the expectation, patients become, I guess, scarier and scarier for people or they get there and they kind of get worried that they can meet expectations. You know, for you as an IC9 and you're writing code, how do you make sure that it's, you know, I see nine code? Like there's this, does it, you don't worry about that. I've flipped the switch off. I just don't care.
Starting point is 00:33:58 I used to worry about that too, a lot. And then I was like, you know what? I'm just going to do what I love. And I'm going to check in with my manager often to make sure that I'm solving problems that needs solving, right? I'm not just going to go work on something that doesn't matter. But as long as I'm working on what's important for my org, and I like what I'm doing, I'm just not going to worry about it and I'm going to do it. And that has served me really well, right? Component script being the exception where like eventually it was no longer important for the
Starting point is 00:34:26 company or the org. And that was like someone needed to prod me to realize that. But they prodded me and I realized it and the problem was solved, right? Like in some sense, like getting a meat's most was freeing in the sense of like, well, if that happens again, I'll know that like I went too deep and too hard and didn't listen and now I go listen and fix it. So yeah, my answer is I just flip the switch off and don't worry about it because that's counterproductive. As a senior I see, you are in forums with other senior ICs and also you have a viewpoint that others don't, which you could see what work is technically difficult and exceptional.
Starting point is 00:35:00 What are some other engineers that you think are exceptional and what in your opinion makes their work exceptional? I've got a list, so I'm going to go down the list. Okay. I really admire Justin Chiquitapur, who's an engineer who works very much like me. He writes a lot of code. That's the part of the job he enjoys. He and I have a very similar working style.
Starting point is 00:35:21 So for that reason, I get along with him great. Another engineer that I've worked on for, worked with for a very, very long time is Wei Han, who joined the company on the same day I did in 2012. And our careers often overlapped. We work together on a lot of things, including component script for a while. And she is many different archetypes. She does not fit in one box, but she's more of a fixer. She's very good at like, hey, this metric is not right.
Starting point is 00:35:44 What is the deal? Which is something I can kind of do, but she can really do. And so I love someone that can dive again. It's like diving 10 layers into systems you don't know and figuring out what the hell is going on here. She's great at that. He's no longer with meta, but Michael Bolan was always an engineer I looked up to it because he was a great project starter. He could identify the need.
Starting point is 00:36:03 Hey, we need a fuzzy file searcher that works. on an insanely large repose. What do we do? He kickstarted a project called Miles and just did it, right? Which is like backend, binaries on multiple platforms, deployment, documentation, naming, all this stuff that he could just do. And he did it over and over and over again. That's just one of the many things he started. I think he started Buck, too.
Starting point is 00:36:25 Let's see here. Bob Baldwin is a very senior product engineer. I mean, I think he works on him for now, but for a long time he was on product. And he's an excellent communicator. He can really boil down the message, which is something I think, a lot of engineers very much struggle with. And it's a really important skill is writing and communication. So I really admired his communication and how he could make things clear.
Starting point is 00:36:45 Another engineer that's similar is Oliver Ricard, who is a very, very good writer and a very good communicator and his posts are an absolute masterworks. Whenever someone is like, hey, my engineer needs to work on communication, I'm like, go look at Oliver's posts. That's the bar. That's what you should be aiming for. And finally, I'm aware of what I'm not, the skills that I'm missing. So another senior engineer that I work with almost every day is Nolan O'Brien.
Starting point is 00:37:10 And he is like my polar opposite. He writes code, but not a whole lot. He is extremely good at driving alignment between different teams. And he's extremely good at managing the Apple relationship, which is something I never had patience to do, right? Like meta and Apple, they don't always get along. Nolan finds a way to communicate between these two companies and try to get us on the same page, focus on what we can do together. And I really admire him for that.
Starting point is 00:37:35 So that's my list of other senior engineers I really, really admire. The last thing that I'd like to ask you is you have a lot of, you know, experience at this point. And if you were to go back to yourself right when you had graduated Princeton and give yourself some career advice, what would you say? Nothing. It worked out pretty well for me. I'm not screwed with it, man. The funny thing is when I was graduating Princeton in 2010, I thought about applying. I was like, should I be self-employed and write iPhone apps? Or should I go work for a company? And I actually applied to Facebook.
Starting point is 00:38:10 And I'm pretty sure at the time, what they would do is they would send you this puzzle. They'd send you like a mysterious puzzle that you had to like solve the mystery and then you could apply. And I threw it in the trash. I was like, I don't have time for that. I'm not doing that. And so I'm like, what if I joined Facebook in 2010? What would that have been like? It probably would have been a lot worse because I would have been around for all the HTML5 stuff.
Starting point is 00:38:30 And I would have just been like, oh, no, no, no. But yeah, I don't think I would offer any advice to myself at the time because my personal situation worked out really well. As far as general career advice, I don't know, do what you like, right? Like, I feel like it's really hard to fake enthusiasm or like find enthusiasm for something you really don't enjoy doing. So like find what you love doing and do that. And if that intersects with what the industry needs, you're in a really lucky place. You know, I used to always hear that advice and think that is cliche. It's very cliche.
Starting point is 00:39:05 Yeah. But actually, there's so much stuff downstream of that. Like, your productivity comes from you loving the work. I mean, you have insane output. And your curiosity and the learning, it's got to be order of magnitude more than it would be if you hated it. And you didn't proactively dig, you know, 10 layers deep. So I think it's good if you, if you like solving problems. that's the thing, right? Because it's not like every single moment I'm debugging some really
Starting point is 00:39:33 bad code deep in some awful system. I'm loving what I'm doing. But I like the challenge of solving problems. And so if you like that, you're in good, you're in a good place. Thanks so much for your time, Adam. I really appreciate it. I was really looking forward talking to you. So thanks so much for sharing your career story with the community. Sure thing. Thanks, Ryan. Thank you for listening to the podcast. It's a passion project of mine that I really enjoyed building. Another passion project that I've been working on kind of in secret is building an ergonomic keyboard that I wish existed and I finally have a prototype so I'd love to show you what we've built. It's ultra low profile and ergonomic and I couldn't find anything like it
Starting point is 00:40:12 on the market. So that's why we built it. I'll put a link to the keyboard in the description. You can take a look and learn more about the project there. We could definitely use your support. Also, if you have any feedback for me about the show, I'd love to hear it. Comments on you have led to guests coming on like Ilya Gregoric and David Fowler. I wasn't aware of them until someone dropped a comment. Also, feedback in the comments helped me learn to reduce the number of cliffhangers in the intros. So your comments definitely make a difference. Please keep letting me know what you'd like to see more of in the show, and I'll see you in the next episode.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.