YouTube2Text

Coding Isn't About Code Anymore — Transcript

by Theo - t3․gg · 9,542 words · 1,294 segments · language en · Watch on YouTube

Full transcript

  1. 0:00I've been spending a lot more time
  2. 0:01talking to engineers outside of my
  3. 0:03little bubble in San Francisco recently.
  4. 0:06It's a combination of the events I've
  5. 0:07been going to, the courses I've been
  6. 0:09helping with, and all sorts of other
  7. 0:10things. I've been having a lot more of
  8. 0:12these conversations about what it means
  9. 0:14to code with AI and what even is an
  10. 0:16engineer. Today, I've been thinking
  11. 0:18about this a lot, and I've been kind of
  12. 0:19wanting to do a video on it for a while,
  13. 0:21but I'll be real with you guys. I know
  14. 0:23what my comment section looks like and I
  15. 0:24know how much a lot of you will hate
  16. 0:26this video. So, honestly, I'm not doing
  17. 0:29it for those people. I'm probably just
  18. 0:31going to ignore the comments on this one
  19. 0:32entirely because I I fear what they're
  20. 0:35going to look like. But I'm not making
  21. 0:37this video for the people who are going
  22. 0:38to be leaving the nasty comments that
  23. 0:39Theo's not a real engineer. He's just a
  24. 0:41JavaScript dev that thinks AI is so
  25. 0:43smart. It probably is smarter than him.
  26. 0:45This video is just it. We can ignore
  27. 0:48those people. This video is for
  28. 0:49developers who are actually trying to
  29. 0:51ship, take advantage of these
  30. 0:52technologies, and figure out what their
  31. 0:54role is over time. Because if you
  32. 0:56haven't changed how you code over the
  33. 0:58last year as a result of these tools,
  34. 1:00you might not actually have a job in the
  35. 1:02next year or two. We are at that point
  36. 1:03now. I've danced around it for years and
  37. 1:05I was wrong. Everything has changed. And
  38. 1:08most importantly, the way that we work
  39. 1:10and what our roles are has changed. It's
  40. 1:12changed on a really deep fundamental
  41. 1:14level. The simplest way I can put this
  42. 1:17is that we're not really engineers
  43. 1:19anymore. So if we're not engineers, what
  44. 1:21are we? Are we tech leads? Are we
  45. 1:23product managers? Are we designers? Are
  46. 1:25we visionaries? What's our role? I'm
  47. 1:28going to make the argument that our role
  48. 1:30as gardeners. The best thing we can do
  49. 1:32now is maintain a healthy garden. This
  50. 1:35is going to take a lot of explanation.
  51. 1:38And I'm going to do my best to explain
  52. 1:40it. But if I am wrong about this whole
  53. 1:42engineers are becoming gardeners thing,
  54. 1:44then I guess I'm just an influencer. And
  55. 1:46I'm not a very good influencer if I
  56. 1:48don't take a quick break for today's
  57. 1:49sponsor. I don't know if you guys have
  58. 1:50noticed, but it seems like a lot of
  59. 1:52stuff is being hacked recently. That's
  60. 1:54because as good as AI is at writing
  61. 1:56code, it's also pretty good at writing
  62. 1:57exploits and finding these types of
  63. 1:59things. There's a problem, though. The
  64. 2:01models we use every day don't have the
  65. 2:03capability to really scan and tell us
  66. 2:05what could be insecure about our code.
  67. 2:07But they're more than happy to write
  68. 2:08insecure code. That's why we need to be
  69. 2:10actively monitoring every change as it
  70. 2:12goes in, understanding the blast radius
  71. 2:13of the changes that we're making, and
  72. 2:15also ideally give us the ability to deep
  73. 2:17scan our work to find things that might
  74. 2:19have been missed from the past. Wouldn't
  75. 2:20it be nice if there was someone who
  76. 2:22could do that? Good news. Today's
  77. 2:23sponsor is Code Rabbit and their new
  78. 2:25Code Rabbit rabbit secure product is
  79. 2:26here for just this. They can do deep
  80. 2:28scans to find things that you might have
  81. 2:30missed in the past. And they can scan
  82. 2:31every PR as they come in, making sure
  83. 2:34they are as secure as possible. Back in
  84. 2:36my day, an exploit being discovered
  85. 2:38wouldn't be exploited for two or more
  86. 2:40years relatively often. Now, as soon as
  87. 2:43the patch is live on the repo, we see
  88. 2:45people exploiting it immediately. Best
  89. 2:47thing you can do to prevent this is to
  90. 2:49make your code secure before it even
  91. 2:50goes out. When you start shipping
  92. 2:52faster, it's much easier to let things
  93. 2:53slip through the cracks. That's what
  94. 2:55Codepcure is here to help prevent.
  95. 2:57Understanding the reachability,
  96. 2:58exploitability, and the blast radius of
  97. 3:00every change has never been more
  98. 3:02important. You can get started now with
  99. 3:0314 days free at soyv.link/codabrabbit.
  100. 3:06This is one of those videos that's going
  101. 3:08to have a lot of layers to it and get a
  102. 3:10little bit chaotic. So, sorry in advance
  103. 3:12to you and also to my poor editor who's
  104. 3:15going to have to figure out how to turn
  105. 3:16this into a somewhat cohesive video. I
  106. 3:18already see people in my chat who are
  107. 3:20concerned that this is going to be a sad
  108. 3:23video and I really don't want it to be
  109. 3:26that. I'm going to start backwards here
  110. 3:28a bit because I want people to stop
  111. 3:30being scared of this part and instead be
  112. 3:33excited about this one. So, let's fixate
  113. 3:36first on this bit. The idea of
  114. 3:39engineers. I don't know about y'all, but
  115. 3:42the thing I love about engineering is
  116. 3:44the feeling of finding the right pieces,
  117. 3:48assembling them the right way, and
  118. 3:50creating something that is really
  119. 3:52meaningful and impactful. I love the
  120. 3:55Lego building block aspect of things.
  121. 3:58And most importantly, I love how you can
  122. 4:01change the size of the blocks, so to
  123. 4:03speak. Like with Legos, you always have
  124. 4:05those same low-level building blocks.
  125. 4:08Unlike with Legos where you just have
  126. 4:10these single blocks you are assembling
  127. 4:12in different ways. In engineering, you
  128. 4:14have different levels of primitives. The
  129. 4:16building blocks could be the actual
  130. 4:18silicon in the chip or you can abstract
  131. 4:20higher and be living in software writing
  132. 4:22assembly or you can abstract higher to a
  133. 4:24language like C or you can start using
  134. 4:26runtimes or packages or other tools. You
  135. 4:29can build your code in a way where the
  136. 4:30lines are composable or the functions
  137. 4:32are composable or the modules are
  138. 4:34composable. The flexibility in where you
  139. 4:38break things apart and the dynamic
  140. 4:40nature of how we can assemble them
  141. 4:42together is just so fun. I love
  142. 4:46it. That's why I love writing software.
  143. 4:48That's why I love building. That's why I
  144. 4:49love all of the stuff that we've been
  145. 4:51doing forever. And what I have been
  146. 4:53scared of is losing that. And I know a
  147. 4:55lot of people seem to have a fear that
  148. 4:58that feeling of like tinkering and
  149. 5:00finding the right pieces and getting
  150. 5:01them together the right way is going to
  151. 5:03be gone because when you start using AI
  152. 5:05it is a lot of what we have loved about
  153. 5:08software dev when you start going down
  154. 5:10this rabbit hole just isn't there
  155. 5:12anymore and that sucks. But the good
  156. 5:14news that I hope you can get out of this
  157. 5:17video is that when you get through it,
  158. 5:19when you come out the other end, the
  159. 5:21types of problems you'll be solving, the
  160. 5:23types of tools you'll be assembling, the
  161. 5:24types of building blocks you'll be
  162. 5:26building and building with are so much
  163. 5:28more fun than I've ever had building
  164. 5:30software before. Like, I genuinely am
  165. 5:33just unable like I've been going to bed
  166. 5:35at 6 a.m. at least once or twice a week
  167. 5:36recently because I get so sucked in to
  168. 5:38the stuff that I'm building. It's just
  169. 5:40so fun and rewarding. And I'm not doing
  170. 5:43this out of fear or FOMO or worry that
  171. 5:45I'll be left behind. I'm doing this
  172. 5:47because I love it right now. So, if
  173. 5:49you're coming in here fearing what's
  174. 5:51happening, I hope you can open your mind
  175. 5:54a little bit and just tone down that
  176. 5:56fear slightly because I felt it a bit
  177. 5:58too. I am lucky that my career is not
  178. 6:00just software dev. So, I was able to get
  179. 6:02through it faster because it didn't feel
  180. 6:03like my world was crumbling. It just
  181. 6:04felt like one of my hobbies was. But
  182. 6:06then I found a deeper love for it on the
  183. 6:08other side. Let me now explain how I got
  184. 6:11here. I don't know how to make this
  185. 6:13video in any way other than it being
  186. 6:15really personal. So, I think I'm just
  187. 6:18going to do that. I think the best place
  188. 6:20to explain why I think this way starts
  189. 6:23back with my time at Twitch. For those
  190. 6:25who don't know, I was working at Twitch
  191. 6:27from 2017 to 2021. I hopped around Teams
  192. 6:30a decent bit when I was there, but I
  193. 6:33want to focus on a specific
  194. 6:35cross-section here, which is roughly
  195. 6:37from 2019 to 2021. There's a couple
  196. 6:40reasons I want to focus on this area,
  197. 6:42but the simplest way to put it is from
  198. 6:442017 to 2018, I did pretty well. From 18
  199. 6:47to 19, I almost got fired because I just
  200. 6:50did not like the things I was working
  201. 6:52on. When the team I joined for at Twitch
  202. 6:55folded and the exec who pulled me into
  203. 6:57Twitch retired, I was just not happy.
  204. 7:00The main reason I survived this window
  205. 7:03where I was this unhappy was because my
  206. 7:06new manager who I got thrown under with
  207. 7:08a team shakeup internally had taken a
  208. 7:10liking to me. Knew I was a decentish.
  209. 7:13Still not great but like motivated. He
  210. 7:16was a front-end guy. I was a deep
  211. 7:17systems backend guy mostly doing like
  212. 7:19video infrastructure and elixir. And I
  213. 7:22had to move to a different video team
  214. 7:24the VOD team and work in Go and was just
  215. 7:26miserable. He saw how miserable I was.
  216. 7:28He pulled me aside and told me I should
  217. 7:30go try out this new React TypeScript
  218. 7:33thing that we were starting to use more
  219. 7:34internally. I didn't like it much at
  220. 7:36first, but it made some sense. But then
  221. 7:39hooks happened, which was when React
  222. 7:41added more functional programming
  223. 7:43patterns, and I got, for lack of a
  224. 7:45non-pun way you're describing it, hooked
  225. 7:48quite quickly because I was already a
  226. 7:50huge functional programming nerd due to
  227. 7:51Elixir. And the mental model for hooks
  228. 7:54clicked so much better for me. And I
  229. 7:56went from feeling like I didn't belong
  230. 7:58when I joined in 2017 to like mid 2017,
  231. 8:01mid 2018 being like, "Oh I
  232. 8:03understand where everything is in my
  233. 8:04head. I know how all these parts come
  234. 8:06together. I understand the system. I can
  235. 8:09change anything in the system and know
  236. 8:10what will happen." And that feeling was
  237. 8:12the first time I had that like a thing
  238. 8:14that mattered. I understood the outside
  239. 8:17and inside of and I could reason about
  240. 8:19how things would behave when changes
  241. 8:21were made. I did not get that same
  242. 8:23intuition especially as I was joining a
  243. 8:25team that already had a gigantic
  244. 8:26codebase in a language I was not
  245. 8:28familiar with and were they were
  246. 8:29building in a way I was not used to at
  247. 8:31all. I was really struggling to get that
  248. 8:33same grasp around the VOD platform code.
  249. 8:37So when React Hooks happened and at the
  250. 8:39same time Twitch was starting to move
  251. 8:41away from the old decrepit Ember plus
  252. 8:44Rails codebase for the site and towards
  253. 8:46a Go plus GraphQL plus React TypeScript
  254. 8:49codebase. That was a huge shift for me
  255. 8:52and I got to be there when the thing
  256. 8:54started to be made and I got to be the
  257. 8:56person advocating for this new way of
  258. 8:59building that I got to like see a bit
  259. 9:02earlier than others did like why it was
  260. 9:04valuable because most of the people who
  261. 9:06were part of this huge rewrite had been
  262. 9:08writing React code for 5 years had been
  263. 9:09writing web code for 10 years and I had
  264. 9:11just moved to web code like a few weeks
  265. 9:14prior with a bunch of weird niche
  266. 9:16functional programming experience and I
  267. 9:18was just so genuinely exced excited that
  268. 9:21they pulled me under their wing for the
  269. 9:22team running the like core web product.
  270. 9:26I should give a little bit of background
  271. 9:28on like how teams are structured at
  272. 9:30Twitch. Most of the teams are feature
  273. 9:32teams. So, right now I'm live and I have
  274. 9:35a bunch of people in chat. The chat team
  275. 9:37is a team. So, there's a team that is
  276. 9:39chat. Their job is running all of the
  277. 9:42chat related things. Then there's a team
  278. 9:43that is the creator dashboard. The
  279. 9:45creator dashboard is the view that I was
  280. 9:47just in here where I could see
  281. 9:49everything going on in my stream on
  282. 9:50Twitch. Then one of my personal
  283. 9:51favorites is the mod tools team. This is
  284. 9:53the team that built a lot of the
  285. 9:54moderation platform stuff that we used
  286. 9:56at Twitch to allow mods to keep our chat
  287. 9:59safe. Things like the mod view platform
  288. 10:01that I built and talked about in a bunch
  289. 10:02of other videos. These are just like,
  290. 10:04funny enough, the three teams I was on
  291. 10:06for like core product in my time at
  292. 10:08Twitch. And all of these teams are
  293. 10:10focused on like one specific surface
  294. 10:13area that they own all of. So the mod
  295. 10:16tools team owns the backend infra, the
  296. 10:18database, the client, the web code, and
  297. 10:22all of the things people interface with.
  298. 10:24The chat team owns the backend, the
  299. 10:26protocols, the way that messages go to
  300. 10:29and from the chat, and of course like
  301. 10:31all of the backend info side, as well as
  302. 10:32all of like the emoji stuff and the
  303. 10:35important like features built into T or
  304. 10:37the chat inside of Twitch. Creator
  305. 10:39dashboard is, as you expect, very
  306. 10:41similar, but this is one of the two main
  307. 10:43types of product and engine teams at
  308. 10:45Twitch. There's a very hard separation
  309. 10:48between them. I'll call this side
  310. 10:50product. I'm going to call the other
  311. 10:52side platforms because while mod tools,
  312. 10:55chat, and creator dashboard, they owned
  313. 10:58their portions of the website and their
  314. 10:59portions of the back end, their portions
  315. 11:01of the database, we still needed a team
  316. 11:03to make sure the APIs didn't fall over
  317. 11:05and could scale the way Twitch did. And
  318. 11:07it's not the responsibility of each
  319. 11:09product team to make sure that every
  320. 11:11single thing they do scales and plugs in
  321. 11:12perfectly with everything else. That
  322. 11:14would just be insane if every single
  323. 11:15team had to build their own scalable
  324. 11:17infra for every single thing. It would
  325. 11:19be hell. So we end up also with teams
  326. 11:21like browser clients. Browser clients
  327. 11:23was the team that managed the repo for
  328. 11:25the website, the repo for the electron
  329. 11:26app that was still being maintained, the
  330. 11:28repo for all of the different web
  331. 11:30product stuff that we had at Twitch,
  332. 11:32like the smaller mobile site that we
  333. 11:33were pushing in other countries at the
  334. 11:34time. Then we had the GraphQL Edge team.
  335. 11:36We referred to the GraphQL API as the
  336. 11:38edge because it was just the
  337. 11:40front-facing thing that the user APIs
  338. 11:42would interface with. Like when you're
  339. 11:44doing things on Twitch, the graphical
  340. 11:45edge is what hits and then we would
  341. 11:47federate out to the smaller services the
  342. 11:49different teams owned. And of course
  343. 11:51there's like the data database platforms
  344. 11:53team, the video infrastructure platform
  345. 11:54team. There were different teams for the
  346. 11:56different platforms within Twitch. And
  347. 11:58this meant that a relationship had to be
  348. 12:00built between the product teams and the
  349. 12:03platform that the product teams were
  350. 12:04building on. This ended up being one of
  351. 12:07my favorite parts of working at a
  352. 12:09company like Twitch is that I got to
  353. 12:11spend most of my time on product. I was
  354. 12:13never at any point formally on a
  355. 12:15platform team. But if you ask the
  356. 12:17platform teams, they would possibly say
  357. 12:19otherwise depending on who you're
  358. 12:20talking to because I spent so much time
  359. 12:23hanging out with the platform teams. For
  360. 12:25example, with browser clients, the guys
  361. 12:26who ran the repo for the Twitch site, I
  362. 12:29was the only non browser clients or
  363. 12:32platform team member that was in their
  364. 12:34weekly planning meetings because I just
  365. 12:38cared a lot about the platform. This all
  366. 12:40started because of a conversation I had
  367. 12:42early on when I was working on the site.
  368. 12:44And I was reading through the docs for
  369. 12:46this new Twitch rewrite in React. And I
  370. 12:49was trying my best to take what I
  371. 12:50learned from the docs and apply it to my
  372. 12:52code. And I made a PR that was not very
  373. 12:54good. And I remember a guy named Derek
  374. 12:57jumped on it and like came over to my
  375. 12:59desk and asked me just questions on like
  376. 13:01why I wrote it this way. And I showed
  377. 13:02him the pages in the docs that led me
  378. 13:04there and the examples in the codebase
  379. 13:06that I was referencing. He thanked me
  380. 13:07for that. said it was super super
  381. 13:09helpful. Ran back to his desk and within
  382. 13:1130 minutes had two PRs up. One getting
  383. 13:14rid of the junk in the docs that misled
  384. 13:16me and the other rewriting all the code
  385. 13:18in the code base that confused me. And
  386. 13:21that's when I realized how important
  387. 13:23that work was. That if you weren't
  388. 13:26setting up your team for success, then
  389. 13:29that would just constantly be lowering
  390. 13:31the bar. And every time something even
  391. 13:34gets to the point where it's a poll
  392. 13:35request that isn't good, that shows an
  393. 13:38opportunity to improve things to make it
  394. 13:40so the next person doesn't make those
  395. 13:43mistakes. And if you don't take those
  396. 13:44opportunities as soon as you see them,
  397. 13:46the quality of everything around you is
  398. 13:48going to erode so fast. And this is the
  399. 13:51first time I'd like really seen that in
  400. 13:54action. I like this framing from Twitch
  401. 13:56chat. Thank you, Thus. Hopefully I
  402. 13:59pronounced that right. Do not fix the
  403. 14:01symptom, fix the cause. Exactly. And I
  404. 14:04ended up really loving this. There was a
  405. 14:07combination of other fun things like
  406. 14:08when I was on the safety platform/safety
  407. 14:11tooling team internally, not for mod
  408. 14:13tools yet, but for internal safety
  409. 14:15stuff, we were kind of running our own
  410. 14:16like clone of the Twitch infrastructure
  411. 14:19so that it was easy to hop between the
  412. 14:21internal tools and external tools
  413. 14:22without having your mind get all like
  414. 14:24screwed up because everything was so
  415. 14:25different. But our repo was smaller and
  416. 14:27only had like 300 users instead of the
  417. 14:29like millions that the core Twitch site
  418. 14:30had. So I was able to experiment with
  419. 14:32ideas that we weren't sure were ready
  420. 14:34yet for the main Twitch repo and then
  421. 14:36bring them to the browser client team
  422. 14:37being like, "Yo, we dog fooded these
  423. 14:39four ideas. These two kind of worked.
  424. 14:41This one seems worth it. We should
  425. 14:43figure out how to do this in the main
  426. 14:44Twitch site." And they loved that so
  427. 14:46much. Like to this day, a lot of my
  428. 14:47friends from Twitch are still just
  429. 14:49people from the browser clients team. I
  430. 14:51absolutely love that team. They offered
  431. 14:53multiple times to let me switch to their
  432. 14:54team, but I just liked building product
  433. 14:57too much to do it. I love building
  434. 14:59things people actually use and play with
  435. 15:01and interact with that make their lives
  436. 15:04better in some small way. And I don't
  437. 15:06like the platform side unless it's
  438. 15:08making a product better. And I don't
  439. 15:09like the product side unless the
  440. 15:11platform is good and also honestly in
  441. 15:13continuing to improve as well. And it's
  442. 15:15this relationship between making product
  443. 15:17that solves real problems for people and
  444. 15:19building platforms that allow those
  445. 15:21products to grow and succeed that made
  446. 15:24this relationship just so fun and
  447. 15:26enticing for me. So huge shout out to
  448. 15:28the browser clients team in particular
  449. 15:30at Twitch for really flipping how I
  450. 15:32think about engineering. It was one of
  451. 15:33the like the moments in my life that
  452. 15:35formed the way I work now. And I have
  453. 15:38been thinking back on this moment a lot
  454. 15:40recently because I've been trying to
  455. 15:42figure out why I was able to make the
  456. 15:44move to working with agents so quickly.
  457. 15:46I already see the comment below this
  458. 15:48video. The reason Theo could make the
  459. 15:50move so fast is because he was writing
  460. 15:51shitty JavaScript slop so he doesn't
  461. 15:53care about the quality of the code. I
  462. 15:55hope that what I'm describing here shows
  463. 15:57exactly the opposite. that the quality
  464. 16:00of the code is as much a communication
  465. 16:03and like organization problem as it is
  466. 16:07like the code that you're writing and
  467. 16:08the quality of the engineers. And
  468. 16:10ideally, if all goes well in the world,
  469. 16:13an okay engineer and a phenomenal
  470. 16:15engineer can both write good enough code
  471. 16:18to merge where it will not degrade the
  472. 16:20quality of your codebase. Before we go
  473. 16:22to this next section, I want to call out
  474. 16:23a few of the things I didn't say at any
  475. 16:26point so far. I did not talk about
  476. 16:28becoming a manager. I did not talk about
  477. 16:30super intense code review processes. I
  478. 16:33did not talk about building a bunch of
  479. 16:35guard rails and unit tests to prevent
  480. 16:37things from going certain ways. I didn't
  481. 16:38talk about code coverage. I didn't talk
  482. 16:40about any of that All I've talked
  483. 16:42about is this relationship between
  484. 16:44setting up a platform that good product
  485. 16:47can grow out of and setting up product
  486. 16:50to give feedback to the platform so that
  487. 16:52they can grow together. So what happened
  488. 16:55next? What happened next is that I quit
  489. 16:57my job at Twitch. And this was a big
  490. 17:00forcing function for how I worked. Both
  491. 17:03because I'm now out of a job, but also
  492. 17:06just cuz it it changed why I cared. Not
  493. 17:10just what I cared about, but more
  494. 17:11importantly the why. Because a lot of
  495. 17:13the reasons I would care about the
  496. 17:15platform the way I did before is that it
  497. 17:17would set up my co-workers to do better
  498. 17:19things. It would set up other teams to
  499. 17:21make better product. And I got to evolve
  500. 17:23everyone around me by making these
  501. 17:25changes. Everything I had done at Twitch
  502. 17:27was trying to make it easier for all of
  503. 17:28us to ship good stuff. It was not
  504. 17:31necessarily focused on faster, although
  505. 17:33that was a nice consequence of things. I
  506. 17:35was regularly pulled in to try and get
  507. 17:37timelines back on track when road maps
  508. 17:39started to get blown up, but I really
  509. 17:41just wanted to focus on like building
  510. 17:43the platform out so it was easy to do
  511. 17:45the right thing and there was no
  512. 17:47examples of how to do the wrong thing.
  513. 17:49But then I went from working at a
  514. 17:50company with 1500 employees to a company
  515. 17:52with one me. And my priorities
  516. 17:56necessarily had to shift because when I
  517. 17:59started paying, it was just me. And now
  518. 18:02I don't have a platform client team to
  519. 18:05rely on for making sure our Webpack
  520. 18:07bundle works properly across all the
  521. 18:09different ways it can be used. I don't
  522. 18:11have a back-end video infrastructure and
  523. 18:12platform team. I don't have a GraphQL
  524. 18:14edge distribution team. I didn't have
  525. 18:17the teams who owned these things
  526. 18:18anymore. And my first instinct was to
  527. 18:21try and replicate the things those teams
  528. 18:23did and to try and build out all of the
  529. 18:25stuff I love. And I was spinning up
  530. 18:27GraphQL backends with Elixir powering
  531. 18:29them and spinning up crazy complex
  532. 18:32client bundles where I was going through
  533. 18:34and manually managing the way the
  534. 18:35bundles were split and stuff like that.
  535. 18:36I was able to make a product that kind
  536. 18:37of worked, but I ended up just doing all
  537. 18:40of the jobs of all of these different
  538. 18:42people that no longer were my
  539. 18:43co-workers. And I realized that I had to
  540. 18:46change the way I was thinking about
  541. 18:48these things. I still wanted to set up
  542. 18:50everything in my codebase for success so
  543. 18:52that the right thing was easy and the
  544. 18:54wrong thing was hard. But I had to make
  545. 18:56all of the things faster and easier to
  546. 18:58do and less work to maintain. And then a
  547. 19:01thing happened that the people who have
  548. 19:03been here for a while have heard of. T3
  549. 19:06stack. The T3 stack happened because I
  550. 19:09needed the confidence of the platforms I
  551. 19:11was used to without the friction that
  552. 19:14was necessary to build them. And I
  553. 19:16created this set of tools that to be
  554. 19:19clear, I didn't really create the tools.
  555. 19:20My innovation here wasn't particularly
  556. 19:23innovative. I took three sets of tools
  557. 19:25people were using well and assembled
  558. 19:27them into one. And it was Nex.js
  559. 19:29TypeScript client with Nex.js as the
  560. 19:32server alongside of course React on the
  561. 19:35client. I brought in Tailwind because I
  562. 19:37started finally to like Tailwind around
  563. 19:38this point. The more important pieces
  564. 19:39were how the front end and back end
  565. 19:41worked together though. The back end was
  566. 19:43using Prisma for the database because it
  567. 19:45was full stack type safety from the
  568. 19:47database to the back end. And then I
  569. 19:49used a new tool called TRPC that I'd
  570. 19:51fallen in love with that made it easy to
  571. 19:53define functions on the back end in
  572. 19:54Typescript and then call them on the
  573. 19:56front end without having to define a
  574. 19:57bunch of contracts between the two. You
  575. 19:59still got a contract out of it, but the
  576. 20:01contract was TypeScript. wasn't another
  577. 20:03language like GraphQL or another weird
  578. 20:05standard like Open API or something. And
  579. 20:07this was the thing that blew me up
  580. 20:09initially on YouTube when I started
  581. 20:11telling people about my stack cuz I made
  582. 20:13this before I'd even started doing
  583. 20:14YouTube videos. And my first video was
  584. 20:16actually just me streaming trying to
  585. 20:18explain it to people I'd met on Twitter
  586. 20:19when I was a nobody. And yes, chat, you
  587. 20:21remembered correctly. I learned TRRPC
  588. 20:24because Tanner Lindsley gave it to me as
  589. 20:25homework because he saw Fred Shot, the
  590. 20:28creator of Astro, and Ryan Carnegie, the
  591. 20:31creator of SolidJS, were following me on
  592. 20:32Twitter. So, when I requested to join
  593. 20:34one of his Twitter spaces back in the
  594. 20:36day, he let me up. We talked about some
  595. 20:38weird proposals I had for making it
  596. 20:39easier to make these contracts between
  597. 20:40back end and front end. He brought up
  598. 20:42TRPC. I went and explored it and fell in
  599. 20:44love immediately. Alex, the main creator
  600. 20:47maintainer of TRPC, is still a good
  601. 20:48friend. This is the community that we
  602. 20:50got Julius from, who is now the T3 code
  603. 20:52guy. So much happened because of this T3
  604. 20:54stack moment. And that moment happened
  605. 20:57because I loved how good it felt to have
  606. 21:00a platform you understood and could
  607. 21:03build on top of confidently. And most of
  608. 21:06T3 stack came out of my product. I was
  609. 21:08building the best stack I could within
  610. 21:11Ping to make the Ping product as easy
  611. 21:13and like able to be maintained as
  612. 21:16possible while I also was doing my
  613. 21:17YouTube channel and was also doing all
  614. 21:20of the like fundraising for what became
  615. 21:22T3 tools which is now T3 Code and T3
  616. 21:24Chat getting into Y Combinator doing all
  617. 21:26the business side there doing all the
  618. 21:27sales marketing and everything I
  619. 21:29couldn't be spending 10 to 15 hours a
  620. 21:32day coding like I wanted to so I was
  621. 21:34putting all this effort in to make sure
  622. 21:36that when I did have time to code it was
  623. 21:37very clear where the time should go and
  624. 21:40that I was probably 50/50 split between
  625. 21:41my time spent doing platform code making
  626. 21:44it easier to work on Ping to the actual
  627. 21:46product code making the product itself
  628. 21:48better. This sounds insane when you
  629. 21:50think about it that like half the poll
  630. 21:51requests I was filing as a solo dev did
  631. 21:54not affect the users at all. They did
  632. 21:56not see any difference from half the
  633. 21:57poll requests I was filing and merging.
  634. 21:59But those poll requests made it so the
  635. 22:01other half were way easier to land. And
  636. 22:03that was the back and forth, the the
  637. 22:05pendulum swing between the two that I've
  638. 22:08been doing my whole career since.
  639. 22:09Knowing when to tap out on product
  640. 22:11because the thing is harder than it
  641. 22:13should be. Give it up for a minute, go
  642. 22:15back to the platform, make the platform
  643. 22:17easier to build on top of. And then once
  644. 22:20that is in a good state again, go back
  645. 22:21and build the feature. That back and
  646. 22:23forth is what leveled me up more than
  647. 22:26almost anything in my career is learning
  648. 22:28when and how to tap out of one side and
  649. 22:31go to the other and to not treat them as
  650. 22:33different like roles or teams or things
  651. 22:37that you can only do one of but to blur
  652. 22:39the lines more. And this is why I was
  653. 22:41able to like make all the friends I made
  654. 22:43at Twitch because I was the platform
  655. 22:45team's favorite product guy and the
  656. 22:46product people loved me because I was
  657. 22:48their connection to the platform. And I
  658. 22:49cannot tell you how many times I was
  659. 22:51getting blocked in a product meeting
  660. 22:53because the other engineers or some team
  661. 22:55leader, someone was convinced there was
  662. 22:57no way that the GraphQL Edge team would
  663. 23:00let us do this thing that was obviously
  664. 23:02the right call. So, I would hop on a
  665. 23:04quick meeting with the guy running that
  666. 23:05team, Tony, and say, "Hey, I'm probably
  667. 23:07not the right person for this because
  668. 23:08I'm not the backend engineer on my
  669. 23:10team." But the backend engineers are
  670. 23:11convinced that this weird recursive data
  671. 23:14structure we need for the layout of the
  672. 23:16dashboard in here, funny enough, like
  673. 23:18cuz everything here is mobile and can be
  674. 23:20like built like nested. The best way to
  675. 23:23encode this is just a JSON blob. And my
  676. 23:26team was insisting that the GraphQL team
  677. 23:28would not let us just put a JSON blob in
  678. 23:30the GraphQL API and that we had to make
  679. 23:32this super complex node system to fetch
  680. 23:35them all as a flat array and then
  681. 23:37reconstruct it into the dynamic layout.
  682. 23:41I knew this was wrong and stupid. I
  683. 23:43couldn't convince my team. So I went to
  684. 23:45my friend who ran the other team, the
  685. 23:48GraphQL Edge team, and I explained the
  686. 23:50situation to him. I didn't tell him what
  687. 23:51the options were. I just told him what
  688. 23:53the problem was. to which he responded
  689. 23:55like he interrupted me to say why don't
  690. 23:57you just store the JSON blob I asked him
  691. 23:58if there's any reason not to he thought
  692. 24:00about it for a second said no that seems
  693. 24:01like the right call here like okay how
  694. 24:04do I convince my team that this is the
  695. 24:05right call he said I don't know none of
  696. 24:07them ever hit me up and then he vented
  697. 24:08to me we he ended up using the rest of
  698. 24:10the call to vent to me about how
  699. 24:12frustrating it is to be on platforms in
  700. 24:15GraphQL land and to feel like nobody on
  701. 24:17the other side like no one from product
  702. 24:19cares at all about what he's doing and
  703. 24:21he's just stuck saying no on shitty PRs
  704. 24:22all day and he was so thankful to have
  705. 24:25somebody from the front-end teams on the
  706. 24:27product side hit him up for a call that
  707. 24:29we ended up chatting all the time and to
  708. 24:30this day Tony is still a very good
  709. 24:31friend he runs a lot of the platform for
  710. 24:33Netflix now if I recall love Tony
  711. 24:35death but like these are the
  712. 24:36conversations that shaped who I am now
  713. 24:38was the realization that so many of
  714. 24:41these things so many of the pieces of
  715. 24:43friction you encounter as a dev are like
  716. 24:46one conversation and one small change in
  717. 24:48the platform away from not needing to
  718. 24:50happen and all of this is such a
  719. 24:53waste of our time. Like I put more time
  720. 24:56into those conversations trying to just
  721. 25:00get a JSON blob stored than I spent just
  722. 25:03building the dashboard itself. It was
  723. 25:05insane. I was going mad. Those were the
  724. 25:08moments that shaped me the most. And one
  725. 25:10of the things I was really thankful
  726. 25:11about when I left is that I could just
  727. 25:14do the thing on both sides. I could
  728. 25:16constantly be refining both ends. When I
  729. 25:18was working on teams like the creator
  730. 25:19dashboard, every conversation was one
  731. 25:22around which costs us the least internal
  732. 25:24political Is it better for us
  733. 25:26to invent our own node graph system in
  734. 25:29order to represent some pretty basic
  735. 25:31data? Or is it worse to have a
  736. 25:34conversation with this team that might
  737. 25:35say no, lose the time, and have to do it
  738. 25:37this way? Anyways, some of this was
  739. 25:38internal politics, but a lot of this was
  740. 25:40just the platform and the way it worked
  741. 25:42and the lack of understanding one side
  742. 25:44had of the other. This is why I got so
  743. 25:46deep in like blurring the lines between
  744. 25:48them. And I think that's the biggest
  745. 25:50part of why I have had so much fun. Now,
  746. 25:53fast forward a whole bunch into the
  747. 25:55future. I want to talk about instead of
  748. 25:57the start of something, I want to talk
  749. 25:58about the end of something. I want to
  750. 26:00talk about my last big handcoded
  751. 26:02overhaul. The last time probably for the
  752. 26:05rest of my life where I sat down and
  753. 26:08rebuilt something by hand. And the few
  754. 26:10times I tried to have agents help, they
  755. 26:12just couldn't do it. So, I gave up and
  756. 26:14did it all myself. I see people in chat
  757. 26:16already guessing what it is. I'm curious
  758. 26:18if any of y'all remember what it is.
  759. 26:20Someone already got it was T3 chat
  760. 26:22convex. I went from super skeptical
  761. 26:25about Convex because it at the time to
  762. 26:27me seemed like a closed source
  763. 26:28alternative to the T3 stack that I
  764. 26:30didn't love. Since then, Convex has
  765. 26:32become both open- source and way more
  766. 26:34mature than anything I had built for
  767. 26:35this type of stuff. It is a combination
  768. 26:36of a backend, a database, an API layer,
  769. 26:39a SDK for the client and the server.
  770. 26:42talked about convex a lot in my videos.
  771. 26:44Definitely search convex seal. You'll
  772. 26:45find a ton of them. Still how I love to
  773. 26:47build most like full stack services when
  774. 26:49I'm building things. Absolutely love
  775. 26:50Convex. Up until I was ready to use
  776. 26:53Convex and T3 chat, I was building my
  777. 26:54own sync engine by hand and it was
  778. 26:57horrible. It worked, but maintaining it
  779. 26:59was hell. The T3 chat port from my
  780. 27:03custom sync engine to Convex was one of
  781. 27:06the hairiest and most difficult
  782. 27:09overhauls I've ever done. And for the
  783. 27:11most part, when I finally could merge
  784. 27:14that like 25 plus thousand line of code
  785. 27:17PR where I shifted everything over, most
  786. 27:19people didn't feel a difference beyond
  787. 27:22like if they were using it on their
  788. 27:23phone and their computer at the same
  789. 27:24time, it was more likely to keep things
  790. 27:25in sync. This is probably the most I've
  791. 27:27worked on one big underlying tech change
  792. 27:30in my life. I spent a whole month cuz I
  793. 27:32I started the month with COVID, funny
  794. 27:34enough, and I got the news at the end of
  795. 27:36the month that I had to have my hand
  796. 27:37reconstructed. So, I knew this was going
  797. 27:38to be my last time like sitting in
  798. 27:39coding for a while. So, I spent the
  799. 27:41whole month on this and it had its rough
  800. 27:43edges. We ended up at the time being one
  801. 27:45of the biggest convex customers. So, it
  802. 27:47caused a lot of like not outages, but
  803. 27:49like weird edges breaking for certain
  804. 27:51things we were doing a lot of that other
  805. 27:53customers weren't. All got smoothed out
  806. 27:54really quick by them. But god damn, this
  807. 27:56was so much work and it was so much fun
  808. 27:59and none of our users could possibly
  809. 28:01have really noticed the difference until
  810. 28:03it was done and then it was shipped and
  811. 28:05then after is when we really got to
  812. 28:08start doing the fun The reason I
  813. 28:10did this overhaul wasn't because I was
  814. 28:12tired of maintaining the custom sync
  815. 28:14code, although I was. It wasn't because
  816. 28:16the database costs for how I was doing
  817. 28:18things were absurd, because they were.
  818. 28:20It was because at this point in time, we
  819. 28:22had scaled up the team a bit. I had
  820. 28:23pulled Julius full-time. I had Mark
  821. 28:25constantly putting up the fires I was
  822. 28:27creating, and I was the only person who
  823. 28:29could touch the backend code for the
  824. 28:31database stuff because it was the
  825. 28:33rightish platform for what we need at
  826. 28:35the time, but I was the only person who
  827. 28:37understood it. And as a result, I was
  828. 28:39blocking my team constantly. And it was
  829. 28:42really fragile and breaking all the
  830. 28:44time, too. The move to Convex fixed that
  831. 28:46and allowed me to not be able to code
  832. 28:48for a few months because of my hand and
  833. 28:50still continue iterating on top of T3
  834. 28:52chat and shipping and improving the
  835. 28:54product. What I'm trying to say is I
  836. 28:55love these overhauls, the ones where no
  837. 28:57one outside can or should feel a
  838. 28:59difference, but we know it sets us up to
  839. 29:02work much more effectively. and then
  840. 29:04feeling, seeing, and experiencing the
  841. 29:08increased movement that I and my
  842. 29:10teammates get on the product side once
  843. 29:13this stuff lands. The thing that was
  844. 29:15exciting about this overhaul was
  845. 29:17watching how many more PRs Mark and
  846. 29:20Julius were putting up and landing as a
  847. 29:22result of how much easier they could
  848. 29:23move around in the codebase. Hopefully,
  849. 29:26you can kind of see where we're going
  850. 29:27now. I was writing slop before agents
  851. 29:30were. The setup we had for T3 chat
  852. 29:33before we had convex was a bunch of
  853. 29:36theosync engine slop and it was
  854. 29:38constantly causing friction. It was
  855. 29:40getting in the way of my team. It just
  856. 29:42wasn't good. I was an incredibly
  857. 29:44effective chef when it came to cooking
  858. 29:45slop. Even at the time, I wouldn't have
  859. 29:47defended how it was implemented. I would
  860. 29:49just defend why it was implemented. And
  861. 29:51this is why, as chat pointed out, I had
  862. 29:53the five videos of me switching the
  863. 29:55database in T3 chat. It was a great
  864. 29:57opportunity for me to try out different
  865. 29:58things, learn stuff, and build a
  866. 30:00scalable platform at an absurd pace
  867. 30:03while also having to run my channel and
  868. 30:04my company all at the same time. And it
  869. 30:06was such a fun era. I I loved every
  870. 30:08moment of it. But the important thing to
  871. 30:09know about my slop is that my slop was
  872. 30:11blocking my team. The reality is that
  873. 30:14where the slop comes from doesn't
  874. 30:15matter. Neither does who your team is.
  875. 30:17Let me reframe this now. Sonnet 4.5 slop
  876. 30:20was blocking Opus 5.5. Do you see where
  877. 30:23we're going now? all of the time and
  878. 30:26effort I was spending on the right side
  879. 30:28of this line doing this platform work,
  880. 30:32setting up my team and setting up myself
  881. 30:35to be more successful building. That was
  882. 30:37always one of the things I loved doing,
  883. 30:39but I loved it both because it's fun,
  884. 30:41but also because I would see the impact
  885. 30:42it had on the other side. It would take
  886. 30:44a long time to see that impact. It would
  887. 30:46take even longer to do the changes in
  888. 30:47the first place, but it was very
  889. 30:49satisfying work that really made me feel
  890. 30:51like an engineer. This work has gotten
  891. 30:5410 times more important than it's ever
  892. 30:57been. I remember one of the first like
  893. 31:00cool conversations I ever had like where
  894. 31:02I felt like I should not be allowed to
  895. 31:04do this was when I was tweeting back
  896. 31:06when I had like 50 followers about
  897. 31:09TypeScript stuff we were doing at Twitch
  898. 31:10because our TypeScript times for checks
  899. 31:12had gotten to like 15 to 20 minutes and
  900. 31:15our like npm rundev command time was at
  901. 31:18like the 3 to 5 minute mark just to
  902. 31:20start working on a project at a given
  903. 31:23time like on a random day and I was so
  904. 31:26desperate to fix this that I just
  905. 31:28randomly replied to a certain person on
  906. 31:31the TypeScript team, Daniel Rosen Bosser
  907. 31:33on Twitter, asking for some info on some
  908. 31:35stuff he was talking about on Twitter
  909. 31:36about performance for TypeScript. He DM'
  910. 31:38me, we chatted and I got to intro him to
  911. 31:41the browser clients team and somehow be
  912. 31:44the one to broker this meeting between
  913. 31:46the platform team at Twitch and the
  914. 31:47TypeScript team at Typescript when I was
  915. 31:5021 years old and felt like I didn't
  916. 31:52belong anywhere yet. That was the like,
  917. 31:54oh all of these things are
  918. 31:56malleable. All of these things can be
  919. 31:58changed and improved. All of these
  920. 32:00things are made by people no more
  921. 32:02special than you or I. And you can just
  922. 32:05talk to them about things and work with
  923. 32:07them on things and get things changed.
  924. 32:09And to this day, like when I just put
  925. 32:11out TS Rust, the TypeScript team hit me
  926. 32:12up and we did a great talk and I got to
  927. 32:14chat with Hellsburg, the creator of
  928. 32:16Typescript, about the language that
  929. 32:18changed my life. And it's just so
  930. 32:19cool. And that this is the stuff
  931. 32:21I love. And the reason I bring up the TS
  932. 32:23Rust thing is because all of the
  933. 32:26that got me where I am now and that I
  934. 32:29loved then matters more and is making
  935. 32:32more cool opportunities. The same
  936. 32:34mindset that led to me replying to Rose
  937. 32:36and Waser on Twitter to get this meeting
  938. 32:38between the browser clients team at
  939. 32:39Twitch and the TypeScript team is the
  940. 32:41mindset that led to me building TS Rust.
  941. 32:44And the best way I can describe this
  942. 32:46mindset is gardening. I use gardening as
  943. 32:50the analogy here because I want to
  944. 32:52emphasize that we shouldn't be the ones
  945. 32:54growing the code. We now need to build
  946. 32:57environments where the code can grow in
  947. 33:00the right direction, have the right
  948. 33:01nutrients, have the right support
  949. 33:03systems, and have the right monitoring
  950. 33:05and everything else in place that the
  951. 33:07likelihood the plant grows successfully
  952. 33:08is as high as possible. And the
  953. 33:10likelihood that you can recover it
  954. 33:11before it becomes a weed and infects
  955. 33:13your garden is as high as possible, too.
  956. 33:15I know this because I was already doing
  957. 33:17it. The time I was spending trying to
  958. 33:20improve the type checks at Twitch were
  959. 33:23to make it so everybody could work on
  960. 33:25the codebase more easily and check
  961. 33:28things faster, work on things more
  962. 33:29confidently and just grow. And it was a
  963. 33:33few months ago when I was working on T3
  964. 33:34code, I was seeing how much time was
  965. 33:36spent in our CI and how much RAM and CPU
  966. 33:39is spent on my machines typeing the
  967. 33:41code. Even with the TypeScript Go
  968. 33:43rewrite, T3 code is just a massive
  969. 33:45project and it took a lot of CPU time to
  970. 33:48check. Previously, when you end up in
  971. 33:50those scenarios, the amount of effort it
  972. 33:52would take to make things better was so
  973. 33:55high and the amount of value that people
  974. 33:57would get was so low that it was rarely
  975. 33:59worth it. For example, when I was at
  976. 34:01Twitch working on this giant repo, we
  977. 34:03could have rewritten TypeScript and Go
  978. 34:05then. We had a bunch of incredible Go
  979. 34:06engineers at Twitch. absolutely could
  980. 34:08have dedicated like 20 people to
  981. 34:10rewriting TypeScript in Go before the
  982. 34:12TypeScript team even thought to do it.
  983. 34:13But that would have been an absurd
  984. 34:15undertaking that would not have been
  985. 34:16worth our effort or time to unblock a
  986. 34:19measly 600 to 800 front-end engineers
  987. 34:21from having to wait as long for their
  988. 34:23dev servers to start. Now I am rewriting
  989. 34:25TypeScript in Rust so that a threeperson
  990. 34:27team can move slightly faster. The
  991. 34:30costbenefit analysis there was just like
  992. 34:34it was really difficult but we still
  993. 34:35would do it. I remember one of the
  994. 34:37changes we made in order to like more
  995. 34:38heavily adopt hooks in the codebase, we
  996. 34:41had to move from Apollo GraphQL 2 to
  997. 34:43three on the client. This resulted in a
  998. 34:45bunch of legacy stuff that Apollo had
  999. 34:47removed that we were using heavily
  1000. 34:48across Twitch. So what we ended up doing
  1001. 34:50is we made one shared PR with the move
  1002. 34:53to Apollo 3. We took every single
  1003. 34:56TypeScript file that was broken as a
  1004. 34:57result, put them in a Google sheet, and
  1005. 35:00then would go through the sheet and had
  1006. 35:02volunteers take chunks of this sheet
  1007. 35:05that was sorted alphabetically and
  1008. 35:07assign them to ourselves. And it was our
  1009. 35:09job to manually go through each of these
  1010. 35:11files and fix the type errors and then
  1011. 35:14test and make sure that the code
  1012. 35:15actually worked. This was for thousands
  1013. 35:17of files across this gigantic codebase.
  1014. 35:19We literally had an Excel spreadsheet,
  1015. 35:20well Google sheet that we would share to
  1016. 35:23figure out who owned what to get all of
  1017. 35:25this through cuz that's what it took to
  1018. 35:28make a change to our GraphQL client
  1019. 35:32connection. This is the one package that
  1020. 35:34lets us define the GraphQL syntax to get
  1021. 35:36the data. And this took a team of like
  1022. 35:38eight people plus a bunch of assistants
  1023. 35:40like a month plus to do. That's one
  1024. 35:43prompt now. And this is what's
  1025. 35:45so cool. Historically, gardening work
  1026. 35:48was only really worth it if you were
  1027. 35:50shipping at such a scale and the
  1028. 35:52friction was so high that you could
  1029. 35:54justify the insane investment necessary
  1030. 35:57to do it. And this only happened at big
  1031. 36:00companies that were architected
  1032. 36:02correctly to split between platforms and
  1033. 36:04product. There's a lot of companies that
  1034. 36:05are right now because they didn't
  1035. 36:07separate product and platforms properly.
  1036. 36:09And now the product engines are stuck
  1037. 36:11doing platform work. they don't
  1038. 36:12understand well enough and they just
  1039. 36:14cannot keep up or move fast enough. But
  1040. 36:16the calculus is very different. Now,
  1041. 36:18I've been hinting at the fact that
  1042. 36:19agents make it way easier to do these
  1043. 36:21types of changes, to make these types of
  1044. 36:23wins. That's just one side of the
  1045. 36:25equation. The other side is arguably
  1046. 36:27even more interesting. All of the things
  1047. 36:29I've talked about here that were
  1048. 36:30blocking me or slowing me and my
  1049. 36:32teammates down were annoying, but they
  1050. 36:35would like maybe like best case if I
  1051. 36:37could have filed 10 poll requests a week
  1052. 36:39with these things being broken, fixing
  1053. 36:41them could get me up to like 12 to 15.
  1054. 36:43Maybe your agents get blocked much
  1055. 36:45harder by these things. If it takes 5
  1056. 36:48minutes to spin up the dev server to
  1057. 36:51even check if the code works or not,
  1058. 36:54your agent is going to be blocked
  1059. 36:55insanely deeply by that. Hell, if you're
  1060. 36:58using five minute TTLs, you're also
  1061. 37:00going to be wasting a ton of tokens
  1062. 37:01because you're not going to be hitting
  1063. 37:02cache reads when you wait that long to
  1064. 37:04validate a change. If your CI is too
  1065. 37:07slow or it takes too much RAM and CPU to
  1066. 37:09use, you become heavily limited by how
  1067. 37:12much you can parallelize the work. If
  1068. 37:13your release pipeline is too slow and
  1069. 37:16you're scared of doing a release because
  1070. 37:18it might take too long or worse, there's
  1071. 37:20something bad in it, then the next
  1072. 37:21release to fix it takes even longer,
  1073. 37:23then you're not going to be hitting
  1074. 37:24merge as much. The constant maintenance
  1075. 37:27of the platform has never been more
  1076. 37:30important because not doing this blocks
  1077. 37:32your agents even harder than it blocked
  1078. 37:34us. And all the work that you can
  1079. 37:36possibly do to trim these pieces of
  1080. 37:40friction, to kill these weeds, to get
  1081. 37:41these problems out of your
  1082. 37:43garden is so important. And there's one
  1083. 37:46really big reason why that I've been
  1084. 37:48dancing around. Slop grows faster than
  1085. 37:51weeds do. If you are not constantly
  1086. 37:55maintaining your garden, you will very
  1087. 37:57quickly come back to a garden that is
  1088. 37:59composed primarily of weeds. This is the
  1089. 38:02problem that is destroying so many
  1090. 38:05things. And this is what our job
  1091. 38:07actually is going to be. We have to
  1092. 38:09spend a ton of time making sure we're
  1093. 38:10putting the right fertilizer in the
  1094. 38:11garden. We have to spend a lot of time
  1095. 38:13making sure that once the plants start
  1096. 38:14to sprout that we put the right post up
  1097. 38:17and like wrap the right material around
  1098. 38:20the plant so that it keeps growing
  1099. 38:21vertically and doesn't fall over and
  1100. 38:23break in a terrible way. And you have to
  1101. 38:26be removing the weeds as soon as you
  1102. 38:27notice them appearing. Just to give an
  1103. 38:30example of the type of work I'm talking
  1104. 38:31about here, here's a PR that I was
  1105. 38:33particularly proud of. This PR involved
  1106. 38:36me deleting around half of all the unit
  1107. 38:39tests in T3 code because the more I was
  1108. 38:42looking at them and the more I was
  1109. 38:44working in the codebase, the more I
  1110. 38:46realized how many of these tests are
  1111. 38:48useless and more importantly how much
  1112. 38:50the useless tests multiply and result in
  1113. 38:53more and more unnecessary edge cases
  1114. 38:55being tested for no good reason
  1115. 38:57whatsoever. And that's why I was able to
  1116. 38:58delete 250,000 lines of code from the
  1117. 39:01codebase in one PR. And we've had no
  1118. 39:03regressions that any of the deleted
  1119. 39:04tests would have caught. I think of the
  1120. 39:0611,000 tests, I brought back four of
  1121. 39:08them total. This is a phenomenal example
  1122. 39:11of gardening. This is the type of thing
  1123. 39:14that is our job. Now, I just got a
  1124. 39:16fantastic follow-up question. How are we
  1125. 39:18preventing it from happening again? By
  1126. 39:20monitoring it. We can put a lot of
  1127. 39:22things and we made some guidance changes
  1128. 39:24to the repo to the agents and things
  1129. 39:27like that to steer agents away from
  1130. 39:29making bad tests. But even just deleting
  1131. 39:31all of the slop, killing all the weeds
  1132. 39:32was enough to help a lot. But there were
  1133. 39:34still bad tests popping up here and
  1134. 39:36there. So whenever one of us noticed
  1135. 39:38one, we would ask the person who
  1136. 39:40contributed it to go find the thread
  1137. 39:42where it happened and ask their agent
  1138. 39:44why. What led to you adding this test?
  1139. 39:46Why did you think this test was a good
  1140. 39:48idea? and we would use the info it would
  1141. 39:50give us to go to the root of the
  1142. 39:52problem, whatever stem this weed grew
  1143. 39:55from and kill that. And this is just
  1144. 39:57like one of the types of examples of the
  1145. 39:59gardening I'm talking about. If we
  1146. 40:01scroll through the PR, we'll see a few
  1147. 40:02others. This one in particular is one
  1148. 40:04I'm really fond of. I was getting tired
  1149. 40:07of the performance regressions I was
  1150. 40:09seeing in the wire protocol for how we
  1151. 40:11get data from your server on your
  1152. 40:13machine where everything is running over
  1153. 40:15to the client on your phone or the
  1154. 40:17computer that has all of the data that
  1155. 40:20you're actually interfacing with. I had
  1156. 40:21put a ton of time into making this as
  1157. 40:24efficient as possible so that it would
  1158. 40:26be as little as like 5 kilobytes to load
  1159. 40:28even a big thread. I had put a ton of
  1160. 40:31work into this, but it kept regressing.
  1161. 40:33After a week of improving the
  1162. 40:34performance here, subtle small PRs that
  1163. 40:37didn't seem like they were going to
  1164. 40:38cause problems here did. So, I built the
  1165. 40:41thread transfer impact tool, which is an
  1166. 40:43action that runs on every PR that has a
  1167. 40:46bunch of real event data from real
  1168. 40:48codeex threads and cloud threads, runs
  1169. 40:51it through a fully simulated endto-end
  1170. 40:53pipe, and checks how much data goes
  1171. 40:55through the pipe. and then it would
  1172. 40:57print it in every PR and flag a bunch of
  1173. 41:00big red X's when anything caused a
  1174. 41:02meaningful regression whatsoever. This
  1175. 41:04worked incredibly well for a bunch of
  1176. 41:06reasons. It puts feedback in the PR that
  1177. 41:09a babysitting agent will notice and
  1178. 41:11address. It gives the developers and the
  1179. 41:14reviewers clear feedback on whether or
  1180. 41:16not this is getting regressed or not and
  1181. 41:18if these metrics we care about are
  1182. 41:19changing. But the most important thing,
  1183. 41:21this is really silly. It gives the agent
  1184. 41:24the information. This is a thing we care
  1185. 41:25about and it should be optimized for. To
  1186. 41:27go back to the garden analogy, this is
  1187. 41:29like the wood stake you put in next to a
  1188. 41:32plant. So, the plant will grow in that
  1189. 41:33direction. I put a wood stake in with
  1190. 41:36this action. This CI tool, this one
  1191. 41:39additional check that actually takes
  1192. 41:40like almost no time. I think it takes
  1193. 41:42under 45 seconds to run. It might be 30.
  1194. 41:44This one small check I added to RCI has
  1195. 41:47been an incredibly useful wooden post in
  1196. 41:50the garden, guiding the plants to grow
  1197. 41:52up the right way and away from the weeds
  1198. 41:55and the other things I don't want them
  1199. 41:56near in the garden. Do you know how much
  1200. 41:58fun it was to do this work? By the way,
  1201. 41:59I know I'm a bit of a nerd about this
  1202. 42:01protocol stuff, but I really like
  1203. 42:03representations of data and finding the
  1204. 42:06right set of data to send to and from
  1205. 42:08like different platforms, product,
  1206. 42:10feature, whatever. It's just so fun. And
  1207. 42:13that side of my brain has never been so
  1208. 42:16valuable. The vast majority of my work
  1209. 42:18for T3 Chat after like month two was
  1210. 42:21unblocking my team by improving the
  1211. 42:23platform so everyone else could build
  1212. 42:25the features that our users needed. Now
  1213. 42:27I'm doing that with and for agents. I am
  1214. 42:30building up the best possible code base
  1215. 42:33to contribute to. That might have some
  1216. 42:35parts that are tedious. It might have
  1217. 42:36some checks that are strict, but it is
  1218. 42:38the best godamn garden I've ever been
  1219. 42:40lucky enough to see, much less work in.
  1220. 42:43And I am constantly quadruple checking
  1221. 42:46my agents to see where they're getting
  1222. 42:47stuck, what weeds they're tripping over,
  1223. 42:50what fertilizer they're most confused
  1224. 42:51by, what posts they need to grow
  1225. 42:54against. And if you don't think this is
  1226. 42:55engineering, I don't know if you ever
  1227. 42:57were an engineer, cuz I've never felt
  1228. 42:59more like I was building a platform than
  1229. 43:02I do today. And it's just so goddamn
  1230. 43:05fun. Even if you don't love this type of
  1231. 43:07like maintenance and platform work, I
  1232. 43:09think you'll love what happens on the
  1233. 43:10other side. Because that was the magic
  1234. 43:12that made me go from enjoying doing this
  1235. 43:15for the sake of doing it to almost
  1236. 43:18feeling bad for any second I'm not
  1237. 43:20spending doing this because I've seen
  1238. 43:21how much impact it has. This is PRs
  1239. 43:24merged per day over time since T3 code
  1240. 43:26started. And my face is covering these
  1241. 43:29vertical lines because of how vertical
  1242. 43:30they are. This is what happens when you
  1243. 43:33maintain your garden. Well, we went from
  1244. 43:35pretty consistently like 2 to 20 PRs
  1245. 43:38merged a day to a bad like weekend day
  1246. 43:42where we're busy being 60 merged and
  1247. 43:44active days being in the 400 plus range.
  1248. 43:47This is because our garden is really
  1249. 43:49healthy. This is what happens when you
  1250. 43:51make a good garden. Don't tell me
  1251. 43:54potato stumbled on the same
  1252. 43:56goddamn analogy as me. Why do I learn
  1253. 43:59this now? I didn't even see this post. I
  1254. 44:02would have liked it if I saw it. Thank
  1255. 44:04you, chat. But god damn. Apparently, I'm
  1256. 44:06not as unique as I like to think. I
  1257. 44:08don't think I'm that unique, but Lauren
  1258. 44:09and I are too aligned recently. It's
  1259. 44:11dangerous. Anyways, she seems to fully
  1260. 44:13agree. Every team needs a gardener.
  1261. 44:15Someone quietly watching the stream of
  1262. 44:16PR flowing in the codebase, noticing the
  1263. 44:18smells. The third is record this week.
  1264. 44:20The lint suppressions creeping like ivy
  1265. 44:22across your carefully planned garden.
  1266. 44:24Steady hand tending the weeds that would
  1267. 44:26engulf it if in slop if left unchecked.
  1268. 44:29Yep. If I go any longer, this video is
  1269. 44:31going to literally go on forever. So, I
  1270. 44:33think I am going to stop it here. Let me
  1271. 44:36know if you enjoyed this. And if you can
  1272. 44:38fight the obnoxious commenters, cuz I
  1273. 44:40know they're going to be obnoxious for
  1274. 44:41this one. And if you did like this
  1275. 44:42enough, let me know if I should do more
  1276. 44:45things like this because I would love to
  1277. 44:47talk more about the techniques I've been
  1278. 44:49using to maintain my garden and make my
  1279. 44:51codebases pleasant to work in. Some of
  1280. 44:53them are working great. Some of them I
  1281. 44:54don't know if they are yet or not, but
  1282. 44:56it's just a really fun time to be trying
  1283. 44:58to build these ways. I've never enjoyed
  1284. 45:00my work more than I do today. And I hope
  1285. 45:01some of what I shared here will help you
  1286. 45:03enjoy it the same. I know that this
  1287. 45:05whole world is changing really fast and
  1288. 45:06that it is scary, but if you find the
  1289. 45:08magic within it, it is also the most fun
  1290. 45:11it's ever been. And if even one of you
  1291. 45:13can now see the magic where you might
  1292. 45:14have missed it before, then this was
  1293. 45:15worth all the shitty comments I'm about
  1294. 45:17to see. Until next time, peace nerds.

About this transcript

This page contains the full transcript of Coding Isn't About Code Anymore by Theo - t3․gg, generated from the public captions YouTube serves with the video. The transcript has 9,542 words across 1,294 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.

What you can do with it

Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to choose a caption track available on the video.

Free YouTube transcript tool

YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, caption language selection, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.