Coding Isn't About Code Anymore — Transcript
Full transcript
- 0:00I've been spending a lot more time
- 0:01talking to engineers outside of my
- 0:03little bubble in San Francisco recently.
- 0:06It's a combination of the events I've
- 0:07been going to, the courses I've been
- 0:09helping with, and all sorts of other
- 0:10things. I've been having a lot more of
- 0:12these conversations about what it means
- 0:14to code with AI and what even is an
- 0:16engineer. Today, I've been thinking
- 0:18about this a lot, and I've been kind of
- 0:19wanting to do a video on it for a while,
- 0:21but I'll be real with you guys. I know
- 0:23what my comment section looks like and I
- 0:24know how much a lot of you will hate
- 0:26this video. So, honestly, I'm not doing
- 0:29it for those people. I'm probably just
- 0:31going to ignore the comments on this one
- 0:32entirely because I I fear what they're
- 0:35going to look like. But I'm not making
- 0:37this video for the people who are going
- 0:38to be leaving the nasty comments that
- 0:39Theo's not a real engineer. He's just a
- 0:41JavaScript dev that thinks AI is so
- 0:43smart. It probably is smarter than him.
- 0:45This video is just it. We can ignore
- 0:48those people. This video is for
- 0:49developers who are actually trying to
- 0:51ship, take advantage of these
- 0:52technologies, and figure out what their
- 0:54role is over time. Because if you
- 0:56haven't changed how you code over the
- 0:58last year as a result of these tools,
- 1:00you might not actually have a job in the
- 1:02next year or two. We are at that point
- 1:03now. I've danced around it for years and
- 1:05I was wrong. Everything has changed. And
- 1:08most importantly, the way that we work
- 1:10and what our roles are has changed. It's
- 1:12changed on a really deep fundamental
- 1:14level. The simplest way I can put this
- 1:17is that we're not really engineers
- 1:19anymore. So if we're not engineers, what
- 1:21are we? Are we tech leads? Are we
- 1:23product managers? Are we designers? Are
- 1:25we visionaries? What's our role? I'm
- 1:28going to make the argument that our role
- 1:30as gardeners. The best thing we can do
- 1:32now is maintain a healthy garden. This
- 1:35is going to take a lot of explanation.
- 1:38And I'm going to do my best to explain
- 1:40it. But if I am wrong about this whole
- 1:42engineers are becoming gardeners thing,
- 1:44then I guess I'm just an influencer. And
- 1:46I'm not a very good influencer if I
- 1:48don't take a quick break for today's
- 1:49sponsor. I don't know if you guys have
- 1:50noticed, but it seems like a lot of
- 1:52stuff is being hacked recently. That's
- 1:54because as good as AI is at writing
- 1:56code, it's also pretty good at writing
- 1:57exploits and finding these types of
- 1:59things. There's a problem, though. The
- 2:01models we use every day don't have the
- 2:03capability to really scan and tell us
- 2:05what could be insecure about our code.
- 2:07But they're more than happy to write
- 2:08insecure code. That's why we need to be
- 2:10actively monitoring every change as it
- 2:12goes in, understanding the blast radius
- 2:13of the changes that we're making, and
- 2:15also ideally give us the ability to deep
- 2:17scan our work to find things that might
- 2:19have been missed from the past. Wouldn't
- 2:20it be nice if there was someone who
- 2:22could do that? Good news. Today's
- 2:23sponsor is Code Rabbit and their new
- 2:25Code Rabbit rabbit secure product is
- 2:26here for just this. They can do deep
- 2:28scans to find things that you might have
- 2:30missed in the past. And they can scan
- 2:31every PR as they come in, making sure
- 2:34they are as secure as possible. Back in
- 2:36my day, an exploit being discovered
- 2:38wouldn't be exploited for two or more
- 2:40years relatively often. Now, as soon as
- 2:43the patch is live on the repo, we see
- 2:45people exploiting it immediately. Best
- 2:47thing you can do to prevent this is to
- 2:49make your code secure before it even
- 2:50goes out. When you start shipping
- 2:52faster, it's much easier to let things
- 2:53slip through the cracks. That's what
- 2:55Codepcure is here to help prevent.
- 2:57Understanding the reachability,
- 2:58exploitability, and the blast radius of
- 3:00every change has never been more
- 3:02important. You can get started now with
- 3:0314 days free at soyv.link/codabrabbit.
- 3:06This is one of those videos that's going
- 3:08to have a lot of layers to it and get a
- 3:10little bit chaotic. So, sorry in advance
- 3:12to you and also to my poor editor who's
- 3:15going to have to figure out how to turn
- 3:16this into a somewhat cohesive video. I
- 3:18already see people in my chat who are
- 3:20concerned that this is going to be a sad
- 3:23video and I really don't want it to be
- 3:26that. I'm going to start backwards here
- 3:28a bit because I want people to stop
- 3:30being scared of this part and instead be
- 3:33excited about this one. So, let's fixate
- 3:36first on this bit. The idea of
- 3:39engineers. I don't know about y'all, but
- 3:42the thing I love about engineering is
- 3:44the feeling of finding the right pieces,
- 3:48assembling them the right way, and
- 3:50creating something that is really
- 3:52meaningful and impactful. I love the
- 3:55Lego building block aspect of things.
- 3:58And most importantly, I love how you can
- 4:01change the size of the blocks, so to
- 4:03speak. Like with Legos, you always have
- 4:05those same low-level building blocks.
- 4:08Unlike with Legos where you just have
- 4:10these single blocks you are assembling
- 4:12in different ways. In engineering, you
- 4:14have different levels of primitives. The
- 4:16building blocks could be the actual
- 4:18silicon in the chip or you can abstract
- 4:20higher and be living in software writing
- 4:22assembly or you can abstract higher to a
- 4:24language like C or you can start using
- 4:26runtimes or packages or other tools. You
- 4:29can build your code in a way where the
- 4:30lines are composable or the functions
- 4:32are composable or the modules are
- 4:34composable. The flexibility in where you
- 4:38break things apart and the dynamic
- 4:40nature of how we can assemble them
- 4:42together is just so fun. I love
- 4:46it. That's why I love writing software.
- 4:48That's why I love building. That's why I
- 4:49love all of the stuff that we've been
- 4:51doing forever. And what I have been
- 4:53scared of is losing that. And I know a
- 4:55lot of people seem to have a fear that
- 4:58that feeling of like tinkering and
- 5:00finding the right pieces and getting
- 5:01them together the right way is going to
- 5:03be gone because when you start using AI
- 5:05it is a lot of what we have loved about
- 5:08software dev when you start going down
- 5:10this rabbit hole just isn't there
- 5:12anymore and that sucks. But the good
- 5:14news that I hope you can get out of this
- 5:17video is that when you get through it,
- 5:19when you come out the other end, the
- 5:21types of problems you'll be solving, the
- 5:23types of tools you'll be assembling, the
- 5:24types of building blocks you'll be
- 5:26building and building with are so much
- 5:28more fun than I've ever had building
- 5:30software before. Like, I genuinely am
- 5:33just unable like I've been going to bed
- 5:35at 6 a.m. at least once or twice a week
- 5:36recently because I get so sucked in to
- 5:38the stuff that I'm building. It's just
- 5:40so fun and rewarding. And I'm not doing
- 5:43this out of fear or FOMO or worry that
- 5:45I'll be left behind. I'm doing this
- 5:47because I love it right now. So, if
- 5:49you're coming in here fearing what's
- 5:51happening, I hope you can open your mind
- 5:54a little bit and just tone down that
- 5:56fear slightly because I felt it a bit
- 5:58too. I am lucky that my career is not
- 6:00just software dev. So, I was able to get
- 6:02through it faster because it didn't feel
- 6:03like my world was crumbling. It just
- 6:04felt like one of my hobbies was. But
- 6:06then I found a deeper love for it on the
- 6:08other side. Let me now explain how I got
- 6:11here. I don't know how to make this
- 6:13video in any way other than it being
- 6:15really personal. So, I think I'm just
- 6:18going to do that. I think the best place
- 6:20to explain why I think this way starts
- 6:23back with my time at Twitch. For those
- 6:25who don't know, I was working at Twitch
- 6:27from 2017 to 2021. I hopped around Teams
- 6:30a decent bit when I was there, but I
- 6:33want to focus on a specific
- 6:35cross-section here, which is roughly
- 6:37from 2019 to 2021. There's a couple
- 6:40reasons I want to focus on this area,
- 6:42but the simplest way to put it is from
- 6:442017 to 2018, I did pretty well. From 18
- 6:47to 19, I almost got fired because I just
- 6:50did not like the things I was working
- 6:52on. When the team I joined for at Twitch
- 6:55folded and the exec who pulled me into
- 6:57Twitch retired, I was just not happy.
- 7:00The main reason I survived this window
- 7:03where I was this unhappy was because my
- 7:06new manager who I got thrown under with
- 7:08a team shakeup internally had taken a
- 7:10liking to me. Knew I was a decentish.
- 7:13Still not great but like motivated. He
- 7:16was a front-end guy. I was a deep
- 7:17systems backend guy mostly doing like
- 7:19video infrastructure and elixir. And I
- 7:22had to move to a different video team
- 7:24the VOD team and work in Go and was just
- 7:26miserable. He saw how miserable I was.
- 7:28He pulled me aside and told me I should
- 7:30go try out this new React TypeScript
- 7:33thing that we were starting to use more
- 7:34internally. I didn't like it much at
- 7:36first, but it made some sense. But then
- 7:39hooks happened, which was when React
- 7:41added more functional programming
- 7:43patterns, and I got, for lack of a
- 7:45non-pun way you're describing it, hooked
- 7:48quite quickly because I was already a
- 7:50huge functional programming nerd due to
- 7:51Elixir. And the mental model for hooks
- 7:54clicked so much better for me. And I
- 7:56went from feeling like I didn't belong
- 7:58when I joined in 2017 to like mid 2017,
- 8:01mid 2018 being like, "Oh I
- 8:03understand where everything is in my
- 8:04head. I know how all these parts come
- 8:06together. I understand the system. I can
- 8:09change anything in the system and know
- 8:10what will happen." And that feeling was
- 8:12the first time I had that like a thing
- 8:14that mattered. I understood the outside
- 8:17and inside of and I could reason about
- 8:19how things would behave when changes
- 8:21were made. I did not get that same
- 8:23intuition especially as I was joining a
- 8:25team that already had a gigantic
- 8:26codebase in a language I was not
- 8:28familiar with and were they were
- 8:29building in a way I was not used to at
- 8:31all. I was really struggling to get that
- 8:33same grasp around the VOD platform code.
- 8:37So when React Hooks happened and at the
- 8:39same time Twitch was starting to move
- 8:41away from the old decrepit Ember plus
- 8:44Rails codebase for the site and towards
- 8:46a Go plus GraphQL plus React TypeScript
- 8:49codebase. That was a huge shift for me
- 8:52and I got to be there when the thing
- 8:54started to be made and I got to be the
- 8:56person advocating for this new way of
- 8:59building that I got to like see a bit
- 9:02earlier than others did like why it was
- 9:04valuable because most of the people who
- 9:06were part of this huge rewrite had been
- 9:08writing React code for 5 years had been
- 9:09writing web code for 10 years and I had
- 9:11just moved to web code like a few weeks
- 9:14prior with a bunch of weird niche
- 9:16functional programming experience and I
- 9:18was just so genuinely exced excited that
- 9:21they pulled me under their wing for the
- 9:22team running the like core web product.
- 9:26I should give a little bit of background
- 9:28on like how teams are structured at
- 9:30Twitch. Most of the teams are feature
- 9:32teams. So, right now I'm live and I have
- 9:35a bunch of people in chat. The chat team
- 9:37is a team. So, there's a team that is
- 9:39chat. Their job is running all of the
- 9:42chat related things. Then there's a team
- 9:43that is the creator dashboard. The
- 9:45creator dashboard is the view that I was
- 9:47just in here where I could see
- 9:49everything going on in my stream on
- 9:50Twitch. Then one of my personal
- 9:51favorites is the mod tools team. This is
- 9:53the team that built a lot of the
- 9:54moderation platform stuff that we used
- 9:56at Twitch to allow mods to keep our chat
- 9:59safe. Things like the mod view platform
- 10:01that I built and talked about in a bunch
- 10:02of other videos. These are just like,
- 10:04funny enough, the three teams I was on
- 10:06for like core product in my time at
- 10:08Twitch. And all of these teams are
- 10:10focused on like one specific surface
- 10:13area that they own all of. So the mod
- 10:16tools team owns the backend infra, the
- 10:18database, the client, the web code, and
- 10:22all of the things people interface with.
- 10:24The chat team owns the backend, the
- 10:26protocols, the way that messages go to
- 10:29and from the chat, and of course like
- 10:31all of the backend info side, as well as
- 10:32all of like the emoji stuff and the
- 10:35important like features built into T or
- 10:37the chat inside of Twitch. Creator
- 10:39dashboard is, as you expect, very
- 10:41similar, but this is one of the two main
- 10:43types of product and engine teams at
- 10:45Twitch. There's a very hard separation
- 10:48between them. I'll call this side
- 10:50product. I'm going to call the other
- 10:52side platforms because while mod tools,
- 10:55chat, and creator dashboard, they owned
- 10:58their portions of the website and their
- 10:59portions of the back end, their portions
- 11:01of the database, we still needed a team
- 11:03to make sure the APIs didn't fall over
- 11:05and could scale the way Twitch did. And
- 11:07it's not the responsibility of each
- 11:09product team to make sure that every
- 11:11single thing they do scales and plugs in
- 11:12perfectly with everything else. That
- 11:14would just be insane if every single
- 11:15team had to build their own scalable
- 11:17infra for every single thing. It would
- 11:19be hell. So we end up also with teams
- 11:21like browser clients. Browser clients
- 11:23was the team that managed the repo for
- 11:25the website, the repo for the electron
- 11:26app that was still being maintained, the
- 11:28repo for all of the different web
- 11:30product stuff that we had at Twitch,
- 11:32like the smaller mobile site that we
- 11:33were pushing in other countries at the
- 11:34time. Then we had the GraphQL Edge team.
- 11:36We referred to the GraphQL API as the
- 11:38edge because it was just the
- 11:40front-facing thing that the user APIs
- 11:42would interface with. Like when you're
- 11:44doing things on Twitch, the graphical
- 11:45edge is what hits and then we would
- 11:47federate out to the smaller services the
- 11:49different teams owned. And of course
- 11:51there's like the data database platforms
- 11:53team, the video infrastructure platform
- 11:54team. There were different teams for the
- 11:56different platforms within Twitch. And
- 11:58this meant that a relationship had to be
- 12:00built between the product teams and the
- 12:03platform that the product teams were
- 12:04building on. This ended up being one of
- 12:07my favorite parts of working at a
- 12:09company like Twitch is that I got to
- 12:11spend most of my time on product. I was
- 12:13never at any point formally on a
- 12:15platform team. But if you ask the
- 12:17platform teams, they would possibly say
- 12:19otherwise depending on who you're
- 12:20talking to because I spent so much time
- 12:23hanging out with the platform teams. For
- 12:25example, with browser clients, the guys
- 12:26who ran the repo for the Twitch site, I
- 12:29was the only non browser clients or
- 12:32platform team member that was in their
- 12:34weekly planning meetings because I just
- 12:38cared a lot about the platform. This all
- 12:40started because of a conversation I had
- 12:42early on when I was working on the site.
- 12:44And I was reading through the docs for
- 12:46this new Twitch rewrite in React. And I
- 12:49was trying my best to take what I
- 12:50learned from the docs and apply it to my
- 12:52code. And I made a PR that was not very
- 12:54good. And I remember a guy named Derek
- 12:57jumped on it and like came over to my
- 12:59desk and asked me just questions on like
- 13:01why I wrote it this way. And I showed
- 13:02him the pages in the docs that led me
- 13:04there and the examples in the codebase
- 13:06that I was referencing. He thanked me
- 13:07for that. said it was super super
- 13:09helpful. Ran back to his desk and within
- 13:1130 minutes had two PRs up. One getting
- 13:14rid of the junk in the docs that misled
- 13:16me and the other rewriting all the code
- 13:18in the code base that confused me. And
- 13:21that's when I realized how important
- 13:23that work was. That if you weren't
- 13:26setting up your team for success, then
- 13:29that would just constantly be lowering
- 13:31the bar. And every time something even
- 13:34gets to the point where it's a poll
- 13:35request that isn't good, that shows an
- 13:38opportunity to improve things to make it
- 13:40so the next person doesn't make those
- 13:43mistakes. And if you don't take those
- 13:44opportunities as soon as you see them,
- 13:46the quality of everything around you is
- 13:48going to erode so fast. And this is the
- 13:51first time I'd like really seen that in
- 13:54action. I like this framing from Twitch
- 13:56chat. Thank you, Thus. Hopefully I
- 13:59pronounced that right. Do not fix the
- 14:01symptom, fix the cause. Exactly. And I
- 14:04ended up really loving this. There was a
- 14:07combination of other fun things like
- 14:08when I was on the safety platform/safety
- 14:11tooling team internally, not for mod
- 14:13tools yet, but for internal safety
- 14:15stuff, we were kind of running our own
- 14:16like clone of the Twitch infrastructure
- 14:19so that it was easy to hop between the
- 14:21internal tools and external tools
- 14:22without having your mind get all like
- 14:24screwed up because everything was so
- 14:25different. But our repo was smaller and
- 14:27only had like 300 users instead of the
- 14:29like millions that the core Twitch site
- 14:30had. So I was able to experiment with
- 14:32ideas that we weren't sure were ready
- 14:34yet for the main Twitch repo and then
- 14:36bring them to the browser client team
- 14:37being like, "Yo, we dog fooded these
- 14:39four ideas. These two kind of worked.
- 14:41This one seems worth it. We should
- 14:43figure out how to do this in the main
- 14:44Twitch site." And they loved that so
- 14:46much. Like to this day, a lot of my
- 14:47friends from Twitch are still just
- 14:49people from the browser clients team. I
- 14:51absolutely love that team. They offered
- 14:53multiple times to let me switch to their
- 14:54team, but I just liked building product
- 14:57too much to do it. I love building
- 14:59things people actually use and play with
- 15:01and interact with that make their lives
- 15:04better in some small way. And I don't
- 15:06like the platform side unless it's
- 15:08making a product better. And I don't
- 15:09like the product side unless the
- 15:11platform is good and also honestly in
- 15:13continuing to improve as well. And it's
- 15:15this relationship between making product
- 15:17that solves real problems for people and
- 15:19building platforms that allow those
- 15:21products to grow and succeed that made
- 15:24this relationship just so fun and
- 15:26enticing for me. So huge shout out to
- 15:28the browser clients team in particular
- 15:30at Twitch for really flipping how I
- 15:32think about engineering. It was one of
- 15:33the like the moments in my life that
- 15:35formed the way I work now. And I have
- 15:38been thinking back on this moment a lot
- 15:40recently because I've been trying to
- 15:42figure out why I was able to make the
- 15:44move to working with agents so quickly.
- 15:46I already see the comment below this
- 15:48video. The reason Theo could make the
- 15:50move so fast is because he was writing
- 15:51shitty JavaScript slop so he doesn't
- 15:53care about the quality of the code. I
- 15:55hope that what I'm describing here shows
- 15:57exactly the opposite. that the quality
- 16:00of the code is as much a communication
- 16:03and like organization problem as it is
- 16:07like the code that you're writing and
- 16:08the quality of the engineers. And
- 16:10ideally, if all goes well in the world,
- 16:13an okay engineer and a phenomenal
- 16:15engineer can both write good enough code
- 16:18to merge where it will not degrade the
- 16:20quality of your codebase. Before we go
- 16:22to this next section, I want to call out
- 16:23a few of the things I didn't say at any
- 16:26point so far. I did not talk about
- 16:28becoming a manager. I did not talk about
- 16:30super intense code review processes. I
- 16:33did not talk about building a bunch of
- 16:35guard rails and unit tests to prevent
- 16:37things from going certain ways. I didn't
- 16:38talk about code coverage. I didn't talk
- 16:40about any of that All I've talked
- 16:42about is this relationship between
- 16:44setting up a platform that good product
- 16:47can grow out of and setting up product
- 16:50to give feedback to the platform so that
- 16:52they can grow together. So what happened
- 16:55next? What happened next is that I quit
- 16:57my job at Twitch. And this was a big
- 17:00forcing function for how I worked. Both
- 17:03because I'm now out of a job, but also
- 17:06just cuz it it changed why I cared. Not
- 17:10just what I cared about, but more
- 17:11importantly the why. Because a lot of
- 17:13the reasons I would care about the
- 17:15platform the way I did before is that it
- 17:17would set up my co-workers to do better
- 17:19things. It would set up other teams to
- 17:21make better product. And I got to evolve
- 17:23everyone around me by making these
- 17:25changes. Everything I had done at Twitch
- 17:27was trying to make it easier for all of
- 17:28us to ship good stuff. It was not
- 17:31necessarily focused on faster, although
- 17:33that was a nice consequence of things. I
- 17:35was regularly pulled in to try and get
- 17:37timelines back on track when road maps
- 17:39started to get blown up, but I really
- 17:41just wanted to focus on like building
- 17:43the platform out so it was easy to do
- 17:45the right thing and there was no
- 17:47examples of how to do the wrong thing.
- 17:49But then I went from working at a
- 17:50company with 1500 employees to a company
- 17:52with one me. And my priorities
- 17:56necessarily had to shift because when I
- 17:59started paying, it was just me. And now
- 18:02I don't have a platform client team to
- 18:05rely on for making sure our Webpack
- 18:07bundle works properly across all the
- 18:09different ways it can be used. I don't
- 18:11have a back-end video infrastructure and
- 18:12platform team. I don't have a GraphQL
- 18:14edge distribution team. I didn't have
- 18:17the teams who owned these things
- 18:18anymore. And my first instinct was to
- 18:21try and replicate the things those teams
- 18:23did and to try and build out all of the
- 18:25stuff I love. And I was spinning up
- 18:27GraphQL backends with Elixir powering
- 18:29them and spinning up crazy complex
- 18:32client bundles where I was going through
- 18:34and manually managing the way the
- 18:35bundles were split and stuff like that.
- 18:36I was able to make a product that kind
- 18:37of worked, but I ended up just doing all
- 18:40of the jobs of all of these different
- 18:42people that no longer were my
- 18:43co-workers. And I realized that I had to
- 18:46change the way I was thinking about
- 18:48these things. I still wanted to set up
- 18:50everything in my codebase for success so
- 18:52that the right thing was easy and the
- 18:54wrong thing was hard. But I had to make
- 18:56all of the things faster and easier to
- 18:58do and less work to maintain. And then a
- 19:01thing happened that the people who have
- 19:03been here for a while have heard of. T3
- 19:06stack. The T3 stack happened because I
- 19:09needed the confidence of the platforms I
- 19:11was used to without the friction that
- 19:14was necessary to build them. And I
- 19:16created this set of tools that to be
- 19:19clear, I didn't really create the tools.
- 19:20My innovation here wasn't particularly
- 19:23innovative. I took three sets of tools
- 19:25people were using well and assembled
- 19:27them into one. And it was Nex.js
- 19:29TypeScript client with Nex.js as the
- 19:32server alongside of course React on the
- 19:35client. I brought in Tailwind because I
- 19:37started finally to like Tailwind around
- 19:38this point. The more important pieces
- 19:39were how the front end and back end
- 19:41worked together though. The back end was
- 19:43using Prisma for the database because it
- 19:45was full stack type safety from the
- 19:47database to the back end. And then I
- 19:49used a new tool called TRPC that I'd
- 19:51fallen in love with that made it easy to
- 19:53define functions on the back end in
- 19:54Typescript and then call them on the
- 19:56front end without having to define a
- 19:57bunch of contracts between the two. You
- 19:59still got a contract out of it, but the
- 20:01contract was TypeScript. wasn't another
- 20:03language like GraphQL or another weird
- 20:05standard like Open API or something. And
- 20:07this was the thing that blew me up
- 20:09initially on YouTube when I started
- 20:11telling people about my stack cuz I made
- 20:13this before I'd even started doing
- 20:14YouTube videos. And my first video was
- 20:16actually just me streaming trying to
- 20:18explain it to people I'd met on Twitter
- 20:19when I was a nobody. And yes, chat, you
- 20:21remembered correctly. I learned TRRPC
- 20:24because Tanner Lindsley gave it to me as
- 20:25homework because he saw Fred Shot, the
- 20:28creator of Astro, and Ryan Carnegie, the
- 20:31creator of SolidJS, were following me on
- 20:32Twitter. So, when I requested to join
- 20:34one of his Twitter spaces back in the
- 20:36day, he let me up. We talked about some
- 20:38weird proposals I had for making it
- 20:39easier to make these contracts between
- 20:40back end and front end. He brought up
- 20:42TRPC. I went and explored it and fell in
- 20:44love immediately. Alex, the main creator
- 20:47maintainer of TRPC, is still a good
- 20:48friend. This is the community that we
- 20:50got Julius from, who is now the T3 code
- 20:52guy. So much happened because of this T3
- 20:54stack moment. And that moment happened
- 20:57because I loved how good it felt to have
- 21:00a platform you understood and could
- 21:03build on top of confidently. And most of
- 21:06T3 stack came out of my product. I was
- 21:08building the best stack I could within
- 21:11Ping to make the Ping product as easy
- 21:13and like able to be maintained as
- 21:16possible while I also was doing my
- 21:17YouTube channel and was also doing all
- 21:20of the like fundraising for what became
- 21:22T3 tools which is now T3 Code and T3
- 21:24Chat getting into Y Combinator doing all
- 21:26the business side there doing all the
- 21:27sales marketing and everything I
- 21:29couldn't be spending 10 to 15 hours a
- 21:32day coding like I wanted to so I was
- 21:34putting all this effort in to make sure
- 21:36that when I did have time to code it was
- 21:37very clear where the time should go and
- 21:40that I was probably 50/50 split between
- 21:41my time spent doing platform code making
- 21:44it easier to work on Ping to the actual
- 21:46product code making the product itself
- 21:48better. This sounds insane when you
- 21:50think about it that like half the poll
- 21:51requests I was filing as a solo dev did
- 21:54not affect the users at all. They did
- 21:56not see any difference from half the
- 21:57poll requests I was filing and merging.
- 21:59But those poll requests made it so the
- 22:01other half were way easier to land. And
- 22:03that was the back and forth, the the
- 22:05pendulum swing between the two that I've
- 22:08been doing my whole career since.
- 22:09Knowing when to tap out on product
- 22:11because the thing is harder than it
- 22:13should be. Give it up for a minute, go
- 22:15back to the platform, make the platform
- 22:17easier to build on top of. And then once
- 22:20that is in a good state again, go back
- 22:21and build the feature. That back and
- 22:23forth is what leveled me up more than
- 22:26almost anything in my career is learning
- 22:28when and how to tap out of one side and
- 22:31go to the other and to not treat them as
- 22:33different like roles or teams or things
- 22:37that you can only do one of but to blur
- 22:39the lines more. And this is why I was
- 22:41able to like make all the friends I made
- 22:43at Twitch because I was the platform
- 22:45team's favorite product guy and the
- 22:46product people loved me because I was
- 22:48their connection to the platform. And I
- 22:49cannot tell you how many times I was
- 22:51getting blocked in a product meeting
- 22:53because the other engineers or some team
- 22:55leader, someone was convinced there was
- 22:57no way that the GraphQL Edge team would
- 23:00let us do this thing that was obviously
- 23:02the right call. So, I would hop on a
- 23:04quick meeting with the guy running that
- 23:05team, Tony, and say, "Hey, I'm probably
- 23:07not the right person for this because
- 23:08I'm not the backend engineer on my
- 23:10team." But the backend engineers are
- 23:11convinced that this weird recursive data
- 23:14structure we need for the layout of the
- 23:16dashboard in here, funny enough, like
- 23:18cuz everything here is mobile and can be
- 23:20like built like nested. The best way to
- 23:23encode this is just a JSON blob. And my
- 23:26team was insisting that the GraphQL team
- 23:28would not let us just put a JSON blob in
- 23:30the GraphQL API and that we had to make
- 23:32this super complex node system to fetch
- 23:35them all as a flat array and then
- 23:37reconstruct it into the dynamic layout.
- 23:41I knew this was wrong and stupid. I
- 23:43couldn't convince my team. So I went to
- 23:45my friend who ran the other team, the
- 23:48GraphQL Edge team, and I explained the
- 23:50situation to him. I didn't tell him what
- 23:51the options were. I just told him what
- 23:53the problem was. to which he responded
- 23:55like he interrupted me to say why don't
- 23:57you just store the JSON blob I asked him
- 23:58if there's any reason not to he thought
- 24:00about it for a second said no that seems
- 24:01like the right call here like okay how
- 24:04do I convince my team that this is the
- 24:05right call he said I don't know none of
- 24:07them ever hit me up and then he vented
- 24:08to me we he ended up using the rest of
- 24:10the call to vent to me about how
- 24:12frustrating it is to be on platforms in
- 24:15GraphQL land and to feel like nobody on
- 24:17the other side like no one from product
- 24:19cares at all about what he's doing and
- 24:21he's just stuck saying no on shitty PRs
- 24:22all day and he was so thankful to have
- 24:25somebody from the front-end teams on the
- 24:27product side hit him up for a call that
- 24:29we ended up chatting all the time and to
- 24:30this day Tony is still a very good
- 24:31friend he runs a lot of the platform for
- 24:33Netflix now if I recall love Tony
- 24:35death but like these are the
- 24:36conversations that shaped who I am now
- 24:38was the realization that so many of
- 24:41these things so many of the pieces of
- 24:43friction you encounter as a dev are like
- 24:46one conversation and one small change in
- 24:48the platform away from not needing to
- 24:50happen and all of this is such a
- 24:53waste of our time. Like I put more time
- 24:56into those conversations trying to just
- 25:00get a JSON blob stored than I spent just
- 25:03building the dashboard itself. It was
- 25:05insane. I was going mad. Those were the
- 25:08moments that shaped me the most. And one
- 25:10of the things I was really thankful
- 25:11about when I left is that I could just
- 25:14do the thing on both sides. I could
- 25:16constantly be refining both ends. When I
- 25:18was working on teams like the creator
- 25:19dashboard, every conversation was one
- 25:22around which costs us the least internal
- 25:24political Is it better for us
- 25:26to invent our own node graph system in
- 25:29order to represent some pretty basic
- 25:31data? Or is it worse to have a
- 25:34conversation with this team that might
- 25:35say no, lose the time, and have to do it
- 25:37this way? Anyways, some of this was
- 25:38internal politics, but a lot of this was
- 25:40just the platform and the way it worked
- 25:42and the lack of understanding one side
- 25:44had of the other. This is why I got so
- 25:46deep in like blurring the lines between
- 25:48them. And I think that's the biggest
- 25:50part of why I have had so much fun. Now,
- 25:53fast forward a whole bunch into the
- 25:55future. I want to talk about instead of
- 25:57the start of something, I want to talk
- 25:58about the end of something. I want to
- 26:00talk about my last big handcoded
- 26:02overhaul. The last time probably for the
- 26:05rest of my life where I sat down and
- 26:08rebuilt something by hand. And the few
- 26:10times I tried to have agents help, they
- 26:12just couldn't do it. So, I gave up and
- 26:14did it all myself. I see people in chat
- 26:16already guessing what it is. I'm curious
- 26:18if any of y'all remember what it is.
- 26:20Someone already got it was T3 chat
- 26:22convex. I went from super skeptical
- 26:25about Convex because it at the time to
- 26:27me seemed like a closed source
- 26:28alternative to the T3 stack that I
- 26:30didn't love. Since then, Convex has
- 26:32become both open- source and way more
- 26:34mature than anything I had built for
- 26:35this type of stuff. It is a combination
- 26:36of a backend, a database, an API layer,
- 26:39a SDK for the client and the server.
- 26:42talked about convex a lot in my videos.
- 26:44Definitely search convex seal. You'll
- 26:45find a ton of them. Still how I love to
- 26:47build most like full stack services when
- 26:49I'm building things. Absolutely love
- 26:50Convex. Up until I was ready to use
- 26:53Convex and T3 chat, I was building my
- 26:54own sync engine by hand and it was
- 26:57horrible. It worked, but maintaining it
- 26:59was hell. The T3 chat port from my
- 27:03custom sync engine to Convex was one of
- 27:06the hairiest and most difficult
- 27:09overhauls I've ever done. And for the
- 27:11most part, when I finally could merge
- 27:14that like 25 plus thousand line of code
- 27:17PR where I shifted everything over, most
- 27:19people didn't feel a difference beyond
- 27:22like if they were using it on their
- 27:23phone and their computer at the same
- 27:24time, it was more likely to keep things
- 27:25in sync. This is probably the most I've
- 27:27worked on one big underlying tech change
- 27:30in my life. I spent a whole month cuz I
- 27:32I started the month with COVID, funny
- 27:34enough, and I got the news at the end of
- 27:36the month that I had to have my hand
- 27:37reconstructed. So, I knew this was going
- 27:38to be my last time like sitting in
- 27:39coding for a while. So, I spent the
- 27:41whole month on this and it had its rough
- 27:43edges. We ended up at the time being one
- 27:45of the biggest convex customers. So, it
- 27:47caused a lot of like not outages, but
- 27:49like weird edges breaking for certain
- 27:51things we were doing a lot of that other
- 27:53customers weren't. All got smoothed out
- 27:54really quick by them. But god damn, this
- 27:56was so much work and it was so much fun
- 27:59and none of our users could possibly
- 28:01have really noticed the difference until
- 28:03it was done and then it was shipped and
- 28:05then after is when we really got to
- 28:08start doing the fun The reason I
- 28:10did this overhaul wasn't because I was
- 28:12tired of maintaining the custom sync
- 28:14code, although I was. It wasn't because
- 28:16the database costs for how I was doing
- 28:18things were absurd, because they were.
- 28:20It was because at this point in time, we
- 28:22had scaled up the team a bit. I had
- 28:23pulled Julius full-time. I had Mark
- 28:25constantly putting up the fires I was
- 28:27creating, and I was the only person who
- 28:29could touch the backend code for the
- 28:31database stuff because it was the
- 28:33rightish platform for what we need at
- 28:35the time, but I was the only person who
- 28:37understood it. And as a result, I was
- 28:39blocking my team constantly. And it was
- 28:42really fragile and breaking all the
- 28:44time, too. The move to Convex fixed that
- 28:46and allowed me to not be able to code
- 28:48for a few months because of my hand and
- 28:50still continue iterating on top of T3
- 28:52chat and shipping and improving the
- 28:54product. What I'm trying to say is I
- 28:55love these overhauls, the ones where no
- 28:57one outside can or should feel a
- 28:59difference, but we know it sets us up to
- 29:02work much more effectively. and then
- 29:04feeling, seeing, and experiencing the
- 29:08increased movement that I and my
- 29:10teammates get on the product side once
- 29:13this stuff lands. The thing that was
- 29:15exciting about this overhaul was
- 29:17watching how many more PRs Mark and
- 29:20Julius were putting up and landing as a
- 29:22result of how much easier they could
- 29:23move around in the codebase. Hopefully,
- 29:26you can kind of see where we're going
- 29:27now. I was writing slop before agents
- 29:30were. The setup we had for T3 chat
- 29:33before we had convex was a bunch of
- 29:36theosync engine slop and it was
- 29:38constantly causing friction. It was
- 29:40getting in the way of my team. It just
- 29:42wasn't good. I was an incredibly
- 29:44effective chef when it came to cooking
- 29:45slop. Even at the time, I wouldn't have
- 29:47defended how it was implemented. I would
- 29:49just defend why it was implemented. And
- 29:51this is why, as chat pointed out, I had
- 29:53the five videos of me switching the
- 29:55database in T3 chat. It was a great
- 29:57opportunity for me to try out different
- 29:58things, learn stuff, and build a
- 30:00scalable platform at an absurd pace
- 30:03while also having to run my channel and
- 30:04my company all at the same time. And it
- 30:06was such a fun era. I I loved every
- 30:08moment of it. But the important thing to
- 30:09know about my slop is that my slop was
- 30:11blocking my team. The reality is that
- 30:14where the slop comes from doesn't
- 30:15matter. Neither does who your team is.
- 30:17Let me reframe this now. Sonnet 4.5 slop
- 30:20was blocking Opus 5.5. Do you see where
- 30:23we're going now? all of the time and
- 30:26effort I was spending on the right side
- 30:28of this line doing this platform work,
- 30:32setting up my team and setting up myself
- 30:35to be more successful building. That was
- 30:37always one of the things I loved doing,
- 30:39but I loved it both because it's fun,
- 30:41but also because I would see the impact
- 30:42it had on the other side. It would take
- 30:44a long time to see that impact. It would
- 30:46take even longer to do the changes in
- 30:47the first place, but it was very
- 30:49satisfying work that really made me feel
- 30:51like an engineer. This work has gotten
- 30:5410 times more important than it's ever
- 30:57been. I remember one of the first like
- 31:00cool conversations I ever had like where
- 31:02I felt like I should not be allowed to
- 31:04do this was when I was tweeting back
- 31:06when I had like 50 followers about
- 31:09TypeScript stuff we were doing at Twitch
- 31:10because our TypeScript times for checks
- 31:12had gotten to like 15 to 20 minutes and
- 31:15our like npm rundev command time was at
- 31:18like the 3 to 5 minute mark just to
- 31:20start working on a project at a given
- 31:23time like on a random day and I was so
- 31:26desperate to fix this that I just
- 31:28randomly replied to a certain person on
- 31:31the TypeScript team, Daniel Rosen Bosser
- 31:33on Twitter, asking for some info on some
- 31:35stuff he was talking about on Twitter
- 31:36about performance for TypeScript. He DM'
- 31:38me, we chatted and I got to intro him to
- 31:41the browser clients team and somehow be
- 31:44the one to broker this meeting between
- 31:46the platform team at Twitch and the
- 31:47TypeScript team at Typescript when I was
- 31:5021 years old and felt like I didn't
- 31:52belong anywhere yet. That was the like,
- 31:54oh all of these things are
- 31:56malleable. All of these things can be
- 31:58changed and improved. All of these
- 32:00things are made by people no more
- 32:02special than you or I. And you can just
- 32:05talk to them about things and work with
- 32:07them on things and get things changed.
- 32:09And to this day, like when I just put
- 32:11out TS Rust, the TypeScript team hit me
- 32:12up and we did a great talk and I got to
- 32:14chat with Hellsburg, the creator of
- 32:16Typescript, about the language that
- 32:18changed my life. And it's just so
- 32:19cool. And that this is the stuff
- 32:21I love. And the reason I bring up the TS
- 32:23Rust thing is because all of the
- 32:26that got me where I am now and that I
- 32:29loved then matters more and is making
- 32:32more cool opportunities. The same
- 32:34mindset that led to me replying to Rose
- 32:36and Waser on Twitter to get this meeting
- 32:38between the browser clients team at
- 32:39Twitch and the TypeScript team is the
- 32:41mindset that led to me building TS Rust.
- 32:44And the best way I can describe this
- 32:46mindset is gardening. I use gardening as
- 32:50the analogy here because I want to
- 32:52emphasize that we shouldn't be the ones
- 32:54growing the code. We now need to build
- 32:57environments where the code can grow in
- 33:00the right direction, have the right
- 33:01nutrients, have the right support
- 33:03systems, and have the right monitoring
- 33:05and everything else in place that the
- 33:07likelihood the plant grows successfully
- 33:08is as high as possible. And the
- 33:10likelihood that you can recover it
- 33:11before it becomes a weed and infects
- 33:13your garden is as high as possible, too.
- 33:15I know this because I was already doing
- 33:17it. The time I was spending trying to
- 33:20improve the type checks at Twitch were
- 33:23to make it so everybody could work on
- 33:25the codebase more easily and check
- 33:28things faster, work on things more
- 33:29confidently and just grow. And it was a
- 33:33few months ago when I was working on T3
- 33:34code, I was seeing how much time was
- 33:36spent in our CI and how much RAM and CPU
- 33:39is spent on my machines typeing the
- 33:41code. Even with the TypeScript Go
- 33:43rewrite, T3 code is just a massive
- 33:45project and it took a lot of CPU time to
- 33:48check. Previously, when you end up in
- 33:50those scenarios, the amount of effort it
- 33:52would take to make things better was so
- 33:55high and the amount of value that people
- 33:57would get was so low that it was rarely
- 33:59worth it. For example, when I was at
- 34:01Twitch working on this giant repo, we
- 34:03could have rewritten TypeScript and Go
- 34:05then. We had a bunch of incredible Go
- 34:06engineers at Twitch. absolutely could
- 34:08have dedicated like 20 people to
- 34:10rewriting TypeScript in Go before the
- 34:12TypeScript team even thought to do it.
- 34:13But that would have been an absurd
- 34:15undertaking that would not have been
- 34:16worth our effort or time to unblock a
- 34:19measly 600 to 800 front-end engineers
- 34:21from having to wait as long for their
- 34:23dev servers to start. Now I am rewriting
- 34:25TypeScript in Rust so that a threeperson
- 34:27team can move slightly faster. The
- 34:30costbenefit analysis there was just like
- 34:34it was really difficult but we still
- 34:35would do it. I remember one of the
- 34:37changes we made in order to like more
- 34:38heavily adopt hooks in the codebase, we
- 34:41had to move from Apollo GraphQL 2 to
- 34:43three on the client. This resulted in a
- 34:45bunch of legacy stuff that Apollo had
- 34:47removed that we were using heavily
- 34:48across Twitch. So what we ended up doing
- 34:50is we made one shared PR with the move
- 34:53to Apollo 3. We took every single
- 34:56TypeScript file that was broken as a
- 34:57result, put them in a Google sheet, and
- 35:00then would go through the sheet and had
- 35:02volunteers take chunks of this sheet
- 35:05that was sorted alphabetically and
- 35:07assign them to ourselves. And it was our
- 35:09job to manually go through each of these
- 35:11files and fix the type errors and then
- 35:14test and make sure that the code
- 35:15actually worked. This was for thousands
- 35:17of files across this gigantic codebase.
- 35:19We literally had an Excel spreadsheet,
- 35:20well Google sheet that we would share to
- 35:23figure out who owned what to get all of
- 35:25this through cuz that's what it took to
- 35:28make a change to our GraphQL client
- 35:32connection. This is the one package that
- 35:34lets us define the GraphQL syntax to get
- 35:36the data. And this took a team of like
- 35:38eight people plus a bunch of assistants
- 35:40like a month plus to do. That's one
- 35:43prompt now. And this is what's
- 35:45so cool. Historically, gardening work
- 35:48was only really worth it if you were
- 35:50shipping at such a scale and the
- 35:52friction was so high that you could
- 35:54justify the insane investment necessary
- 35:57to do it. And this only happened at big
- 36:00companies that were architected
- 36:02correctly to split between platforms and
- 36:04product. There's a lot of companies that
- 36:05are right now because they didn't
- 36:07separate product and platforms properly.
- 36:09And now the product engines are stuck
- 36:11doing platform work. they don't
- 36:12understand well enough and they just
- 36:14cannot keep up or move fast enough. But
- 36:16the calculus is very different. Now,
- 36:18I've been hinting at the fact that
- 36:19agents make it way easier to do these
- 36:21types of changes, to make these types of
- 36:23wins. That's just one side of the
- 36:25equation. The other side is arguably
- 36:27even more interesting. All of the things
- 36:29I've talked about here that were
- 36:30blocking me or slowing me and my
- 36:32teammates down were annoying, but they
- 36:35would like maybe like best case if I
- 36:37could have filed 10 poll requests a week
- 36:39with these things being broken, fixing
- 36:41them could get me up to like 12 to 15.
- 36:43Maybe your agents get blocked much
- 36:45harder by these things. If it takes 5
- 36:48minutes to spin up the dev server to
- 36:51even check if the code works or not,
- 36:54your agent is going to be blocked
- 36:55insanely deeply by that. Hell, if you're
- 36:58using five minute TTLs, you're also
- 37:00going to be wasting a ton of tokens
- 37:01because you're not going to be hitting
- 37:02cache reads when you wait that long to
- 37:04validate a change. If your CI is too
- 37:07slow or it takes too much RAM and CPU to
- 37:09use, you become heavily limited by how
- 37:12much you can parallelize the work. If
- 37:13your release pipeline is too slow and
- 37:16you're scared of doing a release because
- 37:18it might take too long or worse, there's
- 37:20something bad in it, then the next
- 37:21release to fix it takes even longer,
- 37:23then you're not going to be hitting
- 37:24merge as much. The constant maintenance
- 37:27of the platform has never been more
- 37:30important because not doing this blocks
- 37:32your agents even harder than it blocked
- 37:34us. And all the work that you can
- 37:36possibly do to trim these pieces of
- 37:40friction, to kill these weeds, to get
- 37:41these problems out of your
- 37:43garden is so important. And there's one
- 37:46really big reason why that I've been
- 37:48dancing around. Slop grows faster than
- 37:51weeds do. If you are not constantly
- 37:55maintaining your garden, you will very
- 37:57quickly come back to a garden that is
- 37:59composed primarily of weeds. This is the
- 38:02problem that is destroying so many
- 38:05things. And this is what our job
- 38:07actually is going to be. We have to
- 38:09spend a ton of time making sure we're
- 38:10putting the right fertilizer in the
- 38:11garden. We have to spend a lot of time
- 38:13making sure that once the plants start
- 38:14to sprout that we put the right post up
- 38:17and like wrap the right material around
- 38:20the plant so that it keeps growing
- 38:21vertically and doesn't fall over and
- 38:23break in a terrible way. And you have to
- 38:26be removing the weeds as soon as you
- 38:27notice them appearing. Just to give an
- 38:30example of the type of work I'm talking
- 38:31about here, here's a PR that I was
- 38:33particularly proud of. This PR involved
- 38:36me deleting around half of all the unit
- 38:39tests in T3 code because the more I was
- 38:42looking at them and the more I was
- 38:44working in the codebase, the more I
- 38:46realized how many of these tests are
- 38:48useless and more importantly how much
- 38:50the useless tests multiply and result in
- 38:53more and more unnecessary edge cases
- 38:55being tested for no good reason
- 38:57whatsoever. And that's why I was able to
- 38:58delete 250,000 lines of code from the
- 39:01codebase in one PR. And we've had no
- 39:03regressions that any of the deleted
- 39:04tests would have caught. I think of the
- 39:0611,000 tests, I brought back four of
- 39:08them total. This is a phenomenal example
- 39:11of gardening. This is the type of thing
- 39:14that is our job. Now, I just got a
- 39:16fantastic follow-up question. How are we
- 39:18preventing it from happening again? By
- 39:20monitoring it. We can put a lot of
- 39:22things and we made some guidance changes
- 39:24to the repo to the agents and things
- 39:27like that to steer agents away from
- 39:29making bad tests. But even just deleting
- 39:31all of the slop, killing all the weeds
- 39:32was enough to help a lot. But there were
- 39:34still bad tests popping up here and
- 39:36there. So whenever one of us noticed
- 39:38one, we would ask the person who
- 39:40contributed it to go find the thread
- 39:42where it happened and ask their agent
- 39:44why. What led to you adding this test?
- 39:46Why did you think this test was a good
- 39:48idea? and we would use the info it would
- 39:50give us to go to the root of the
- 39:52problem, whatever stem this weed grew
- 39:55from and kill that. And this is just
- 39:57like one of the types of examples of the
- 39:59gardening I'm talking about. If we
- 40:01scroll through the PR, we'll see a few
- 40:02others. This one in particular is one
- 40:04I'm really fond of. I was getting tired
- 40:07of the performance regressions I was
- 40:09seeing in the wire protocol for how we
- 40:11get data from your server on your
- 40:13machine where everything is running over
- 40:15to the client on your phone or the
- 40:17computer that has all of the data that
- 40:20you're actually interfacing with. I had
- 40:21put a ton of time into making this as
- 40:24efficient as possible so that it would
- 40:26be as little as like 5 kilobytes to load
- 40:28even a big thread. I had put a ton of
- 40:31work into this, but it kept regressing.
- 40:33After a week of improving the
- 40:34performance here, subtle small PRs that
- 40:37didn't seem like they were going to
- 40:38cause problems here did. So, I built the
- 40:41thread transfer impact tool, which is an
- 40:43action that runs on every PR that has a
- 40:46bunch of real event data from real
- 40:48codeex threads and cloud threads, runs
- 40:51it through a fully simulated endto-end
- 40:53pipe, and checks how much data goes
- 40:55through the pipe. and then it would
- 40:57print it in every PR and flag a bunch of
- 41:00big red X's when anything caused a
- 41:02meaningful regression whatsoever. This
- 41:04worked incredibly well for a bunch of
- 41:06reasons. It puts feedback in the PR that
- 41:09a babysitting agent will notice and
- 41:11address. It gives the developers and the
- 41:14reviewers clear feedback on whether or
- 41:16not this is getting regressed or not and
- 41:18if these metrics we care about are
- 41:19changing. But the most important thing,
- 41:21this is really silly. It gives the agent
- 41:24the information. This is a thing we care
- 41:25about and it should be optimized for. To
- 41:27go back to the garden analogy, this is
- 41:29like the wood stake you put in next to a
- 41:32plant. So, the plant will grow in that
- 41:33direction. I put a wood stake in with
- 41:36this action. This CI tool, this one
- 41:39additional check that actually takes
- 41:40like almost no time. I think it takes
- 41:42under 45 seconds to run. It might be 30.
- 41:44This one small check I added to RCI has
- 41:47been an incredibly useful wooden post in
- 41:50the garden, guiding the plants to grow
- 41:52up the right way and away from the weeds
- 41:55and the other things I don't want them
- 41:56near in the garden. Do you know how much
- 41:58fun it was to do this work? By the way,
- 41:59I know I'm a bit of a nerd about this
- 42:01protocol stuff, but I really like
- 42:03representations of data and finding the
- 42:06right set of data to send to and from
- 42:08like different platforms, product,
- 42:10feature, whatever. It's just so fun. And
- 42:13that side of my brain has never been so
- 42:16valuable. The vast majority of my work
- 42:18for T3 Chat after like month two was
- 42:21unblocking my team by improving the
- 42:23platform so everyone else could build
- 42:25the features that our users needed. Now
- 42:27I'm doing that with and for agents. I am
- 42:30building up the best possible code base
- 42:33to contribute to. That might have some
- 42:35parts that are tedious. It might have
- 42:36some checks that are strict, but it is
- 42:38the best godamn garden I've ever been
- 42:40lucky enough to see, much less work in.
- 42:43And I am constantly quadruple checking
- 42:46my agents to see where they're getting
- 42:47stuck, what weeds they're tripping over,
- 42:50what fertilizer they're most confused
- 42:51by, what posts they need to grow
- 42:54against. And if you don't think this is
- 42:55engineering, I don't know if you ever
- 42:57were an engineer, cuz I've never felt
- 42:59more like I was building a platform than
- 43:02I do today. And it's just so goddamn
- 43:05fun. Even if you don't love this type of
- 43:07like maintenance and platform work, I
- 43:09think you'll love what happens on the
- 43:10other side. Because that was the magic
- 43:12that made me go from enjoying doing this
- 43:15for the sake of doing it to almost
- 43:18feeling bad for any second I'm not
- 43:20spending doing this because I've seen
- 43:21how much impact it has. This is PRs
- 43:24merged per day over time since T3 code
- 43:26started. And my face is covering these
- 43:29vertical lines because of how vertical
- 43:30they are. This is what happens when you
- 43:33maintain your garden. Well, we went from
- 43:35pretty consistently like 2 to 20 PRs
- 43:38merged a day to a bad like weekend day
- 43:42where we're busy being 60 merged and
- 43:44active days being in the 400 plus range.
- 43:47This is because our garden is really
- 43:49healthy. This is what happens when you
- 43:51make a good garden. Don't tell me
- 43:54potato stumbled on the same
- 43:56goddamn analogy as me. Why do I learn
- 43:59this now? I didn't even see this post. I
- 44:02would have liked it if I saw it. Thank
- 44:04you, chat. But god damn. Apparently, I'm
- 44:06not as unique as I like to think. I
- 44:08don't think I'm that unique, but Lauren
- 44:09and I are too aligned recently. It's
- 44:11dangerous. Anyways, she seems to fully
- 44:13agree. Every team needs a gardener.
- 44:15Someone quietly watching the stream of
- 44:16PR flowing in the codebase, noticing the
- 44:18smells. The third is record this week.
- 44:20The lint suppressions creeping like ivy
- 44:22across your carefully planned garden.
- 44:24Steady hand tending the weeds that would
- 44:26engulf it if in slop if left unchecked.
- 44:29Yep. If I go any longer, this video is
- 44:31going to literally go on forever. So, I
- 44:33think I am going to stop it here. Let me
- 44:36know if you enjoyed this. And if you can
- 44:38fight the obnoxious commenters, cuz I
- 44:40know they're going to be obnoxious for
- 44:41this one. And if you did like this
- 44:42enough, let me know if I should do more
- 44:45things like this because I would love to
- 44:47talk more about the techniques I've been
- 44:49using to maintain my garden and make my
- 44:51codebases pleasant to work in. Some of
- 44:53them are working great. Some of them I
- 44:54don't know if they are yet or not, but
- 44:56it's just a really fun time to be trying
- 44:58to build these ways. I've never enjoyed
- 45:00my work more than I do today. And I hope
- 45:01some of what I shared here will help you
- 45:03enjoy it the same. I know that this
- 45:05whole world is changing really fast and
- 45:06that it is scary, but if you find the
- 45:08magic within it, it is also the most fun
- 45:11it's ever been. And if even one of you
- 45:13can now see the magic where you might
- 45:14have missed it before, then this was
- 45:15worth all the shitty comments I'm about
- 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.