1
00:00:00,080 --> 00:00:01,759
It's annoying how damn it bro.

2
00:00:01,760 --> 00:00:02,959
>> Everyone's got a grill me story.

3
00:00:02,960 --> 00:00:07,278
It just has this weird emergent behavior where the models start thinking a little bit

4
00:00:07,279 --> 00:00:10,239
outside the box [music] and they start throwing ideas at you.

5
00:00:10,240 --> 00:00:13,598
>> I guess the idea of the tracer bullet is like a tracer bullet that leaves a mark.

6
00:00:13,599 --> 00:00:17,599
>> I just started using these phrases in my prompts [music] when I was talking to the

7
00:00:17,600 --> 00:00:21,438
agent and I started noticing that it was saying those phrases back to me.

8
00:00:21,439 --> 00:00:23,839
It was saying, "Okay, I'll turn this into a tracer bullet."

9
00:00:23,840 --> 00:00:28,559
This is what I call a leading word where you lead the agent just with a simple phrase

10
00:00:28,560 --> 00:00:29,518
that you repeat.

11
00:00:29,519 --> 00:00:33,519
How do I go about and find those fundamentals that matter and go back to?

12
00:00:33,520 --> 00:00:37,599
>> It's really tough because strategic programming has always been really hard to learn.

13
00:00:37,600 --> 00:00:41,199
I think of learning strategic programming is kind of like you've got a huge mixing desk

14
00:00:41,200 --> 00:00:43,199
in [music] front of you with loads of these different sliders.

15
00:00:43,200 --> 00:00:45,150
You turn it up, you've got more microservices.

16
00:00:45,200 --> 00:00:46,718
You turn it down, you've got a monolith.

17
00:00:46,719 --> 00:00:48,398
It's kind of like you're mixing some music,

18
00:00:48,399 --> 00:00:52,159
but you can't hear what's wrong until 9 months later until the mistakes come and get

19
00:00:52,160 --> 00:00:56,319
you. >> How do you convince non-engineering stakeholders that investing in software fundamentals

20
00:00:56,320 --> 00:00:59,439
are important? You need some sort of metric for figuring this out.

21
00:00:59,440 --> 00:01:02,399
I think the first step to this is

22
00:01:05,519 --> 00:01:09,359
I got the grill of my life when building a pretty simple API endpoint using the grill

23
00:01:09,360 --> 00:01:11,919
me skill. It asked me 35 questions.

24
00:01:11,920 --> 00:01:17,039
I kid you not. It was intense and annoying and it forced me to think more.

25
00:01:17,040 --> 00:01:20,239
Today's guest is a creator of this popular skill, Matt PCO.

26
00:01:20,240 --> 00:01:24,494
Matt is a developer turned educator well known for his total TypeScript series and now

27
00:01:24,495 --> 00:01:27,150
[music] for his AI skills and educational videos.

28
00:01:27,200 --> 00:01:31,279
Today we cover Matt's unusual path [music] into tech after years of being a voice coach

29
00:01:31,280 --> 00:01:33,679
and building his own DIY coaching software.

30
00:01:33,680 --> 00:01:38,879
Matt's popular skills grill me wayfinder and why these skills became so widespread.

31
00:01:38,880 --> 00:01:42,879
Taking inspiration from decades old programming books to build better software with AI

32
00:01:42,880 --> 00:01:46,959
and many more. If you want to understand which software engineing fundamental approaches

33
00:01:46,960 --> 00:01:50,719
remain very useful when working with AI agents, this episode is for you.

34
00:01:50,720 --> 00:01:55,279
This episode is presented by Turbopuffer, Vector, and Ftech Search built on object storage.

35
00:01:55,280 --> 00:01:57,679
It's fast, cheap, and extremely scalable.

36
00:01:57,680 --> 00:01:59,359
This episode is presented by Linear,

37
00:01:59,360 --> 00:02:03,118
and I wanted to take you back in time to remind you how we used to get work done.

38
00:02:03,119 --> 00:02:06,639
Back when every line of code was written by an engineer like you or me,

39
00:02:06,640 --> 00:02:10,429
a tracker's job was to keep people in sync without slowing people down.

40
00:02:10,479 --> 00:02:14,318
Linear was built to be fast and low friction and you could tell.

41
00:02:14,319 --> 00:02:16,399
In last year's the pragmatic engineer survey,

42
00:02:16,400 --> 00:02:20,639
Linear was the most loved tracker tool and Jura the most disliked one for its sluggish

43
00:02:20,640 --> 00:02:24,878
performance. And data coming from the pragmatic engineer audience showed how linear started

44
00:02:24,879 --> 00:02:30,030
to gain traction against existing tools, especially as startups and mid-size companies.

45
00:02:30,080 --> 00:02:32,399
And since then, Linear grew up.

46
00:02:32,400 --> 00:02:35,679
They added all the stuff that larger companies need to manage work, projects,

47
00:02:35,680 --> 00:02:37,999
initiatives, road maps, and customer requests.

48
00:02:38,000 --> 00:02:40,159
and large companies started to switch.

49
00:02:40,160 --> 00:02:44,750
For example, healthcare company Oscar helped move 600 engineers from Jira to Lineer.

50
00:02:44,800 --> 00:02:49,630
OpenAI started with 100 seats and moved all 3,000 staff without any mandate.

51
00:02:49,680 --> 00:02:52,829
Coinbase, Cash App, Brex, and Ramper all on linear.

52
00:02:52,879 --> 00:02:57,119
Many of them saw linear as a way to consolidate a single tool that brings planning and

53
00:02:57,120 --> 00:02:58,238
building together.

54
00:02:58,239 --> 00:03:00,958
So now let's fast forward to today.

55
00:03:00,959 --> 00:03:05,359
When you have AI agents inside a company, those agents need context to work well.

56
00:03:05,360 --> 00:03:09,310
They need access to things like specs, customer requests, history.

57
00:03:09,360 --> 00:03:12,350
Oh wait, these are all already in linear.

58
00:03:12,400 --> 00:03:15,839
So when agents arrive, Linear became the ideal context layer.

59
00:03:15,840 --> 00:03:19,679
Today, 80% of enterprise workspaces in linear have adopted agents.

60
00:03:19,680 --> 00:03:24,109
You can use agents like Codeex, Cloud Code, linear agent or your own agent.

61
00:03:24,159 --> 00:03:28,158
Coinbase and RAM both built their own internal agents and describe linear as a place

62
00:03:28,159 --> 00:03:31,919
that their agent goes and picks up the context before starting work.

63
00:03:31,920 --> 00:03:33,359
See how it works at linear.app/pragmatic.

64
00:03:33,360 --> 00:03:34,560
app/pragmatic.

65
00:03:35,360 --> 00:03:37,390
>> Matt, it's great to have you on the podcast.

66
00:03:37,440 --> 00:03:38,958
>> Great [clears throat] to finally be here.

67
00:03:38,959 --> 00:03:40,798
I'm a huge fan. I've watched so many of these.

68
00:03:40,799 --> 00:03:43,679
I feel like this is like the tiny desk of being a software engineer.

69
00:03:43,680 --> 00:03:44,158
You know what I mean?

70
00:03:44,159 --> 00:03:45,598
This is this is big stuff.

71
00:03:45,599 --> 00:03:46,639
So, I'm glad to be here.

72
00:03:46,640 --> 00:03:49,199
>> And it's also great to reconnect cuz about a year ago,

73
00:03:49,200 --> 00:03:53,598
we we we had lunch after at Microsoft Build as well, which which was really fun.

74
00:03:53,599 --> 00:03:55,919
But now it's it's good to jump into this.

75
00:03:55,920 --> 00:03:59,438
And with this, I wanted to ask about your background.

76
00:03:59,439 --> 00:04:03,759
you unlike many people in tech and on this podcast,

77
00:04:03,760 --> 00:04:07,199
you didn't start out to study computer science, right?

78
00:04:07,200 --> 00:04:07,919
>> Absolutely not.

79
00:04:07,920 --> 00:04:12,878
So for six years before I became a developer, I was a voice coach.

80
00:04:12,879 --> 00:04:17,550
I was a singing teacher working uh in London and working in X2 where I went to university.

81
00:04:17,600 --> 00:04:19,279
I was teaching accents.

82
00:04:19,280 --> 00:04:20,399
I was teaching singing.

83
00:04:20,400 --> 00:04:21,758
I was teaching voice.

84
00:04:21,759 --> 00:04:23,359
I did a master's in it.

85
00:04:23,360 --> 00:04:26,799
I spent a lot of time thinking that was what my career was going to be.

86
00:04:26,800 --> 00:04:31,039
you know, I didn't have any inkling of tech, didn't sort of think about it at all.

87
00:04:31,040 --> 00:04:33,839
I sort of ran my own website and stuff, but yeah,

88
00:04:33,840 --> 00:04:40,239
so I did that for a long time and it's been an extremely important influence on my life

89
00:04:40,240 --> 00:04:42,159
and I think my personality as well.

90
00:04:42,160 --> 00:04:47,918
C can you get a bit deeper where where did the voice come from and what do you do as

91
00:04:47,919 --> 00:04:52,559
a voice coach? Who are people who came to you for help and what kind of help?

92
00:04:52,560 --> 00:04:54,399
>> So, I started as a singing teacher.

93
00:04:54,400 --> 00:04:56,159
I was in a band and stuff at university.

94
00:04:56,160 --> 00:05:00,399
I sort of had a bit of uh experience doing singing and so I set up my own company kind

95
00:05:00,400 --> 00:05:06,879
of at university and uh and doing that stuff and it was people who just wanted to sing

96
00:05:06,880 --> 00:05:11,119
better who wanted to use their voice for choirs who wanted to just do it as a hobby.

97
00:05:11,120 --> 00:05:12,879
It wasn't anything particularly professional.

98
00:05:12,880 --> 00:05:17,519
Then I went and did a masters in it and I started going to drama schools to teach people

99
00:05:17,520 --> 00:05:22,589
Shakespeare and stuff and like uh getting people in who uh wanted to do public speaking.

100
00:05:22,639 --> 00:05:25,918
I did a couple of big gigs for uh consulting companies, you know,

101
00:05:25,919 --> 00:05:29,599
going and teaching them how to deliver speeches and how to talk better.

102
00:05:29,600 --> 00:05:30,559
It was wild, you know,

103
00:05:30,560 --> 00:05:36,159
and it was the reason I got out of it was because I realized in order to do it at a decent

104
00:05:36,160 --> 00:05:37,439
level, you had to live in London.

105
00:05:37,440 --> 00:05:38,638
I didn't want to live in London.

106
00:05:38,639 --> 00:05:39,839
I tried it for like two years.

107
00:05:39,840 --> 00:05:40,719
I just hated it.

108
00:05:40,720 --> 00:05:42,799
I hated it. I didn't grow up in London.

109
00:05:42,800 --> 00:05:45,359
I wanted to get back to the countryside and where I was from.

110
00:05:45,360 --> 00:05:46,799
And and that's what I did.

111
00:05:46,800 --> 00:05:48,638
And so I learned how to be a developer.

112
00:05:48,639 --> 00:05:53,280
I was essentially selftaught in order to have something I could do remotely.

113
00:05:53,919 --> 00:05:58,079
>> So So basically you were looking at like professions that you could do from outside

114
00:05:58,080 --> 00:06:02,319
of London that had a career or perspective or future.

115
00:06:02,320 --> 00:06:07,679
>> Exactly. And I was I'd sort of taught myself how to build stuff and just sort of build

116
00:06:07,680 --> 00:06:12,079
basic stuff in JavaScript because I was interesting in making my lessons better for my

117
00:06:12,080 --> 00:06:14,879
students. So I'd actually made sort of little flashcard apps.

118
00:06:14,880 --> 00:06:19,198
I was working like the first app I ever built was the most ambitious thing I've ever

119
00:06:19,199 --> 00:06:22,879
attempted. It was like a a web audio analyzer.

120
00:06:22,880 --> 00:06:27,758
So I could analyze the spectrogram of your voice to see which resonant frequencies were

121
00:06:27,759 --> 00:06:31,999
happening, whether you were whether your T1 and T2 were like properly balanced and things

122
00:06:32,000 --> 00:06:35,918
like that. Extremely in-depth, ran terribly, but actually, you know,

123
00:06:35,919 --> 00:06:37,679
made my lessons that little bit better.

124
00:06:37,680 --> 00:06:41,679
And so I was doing pretty hardcore stuff terribly straight away.

125
00:06:41,680 --> 00:06:45,038
And I realized, okay, I started looking at job postings and I thought, well,

126
00:06:45,039 --> 00:06:47,359
I could do a bit of JavaScript, I could do a bit of SAS,

127
00:06:47,360 --> 00:06:49,038
I could do a bit of bits and bobs.

128
00:06:49,039 --> 00:06:50,159
And I just jumped into it.

129
00:06:50,160 --> 00:06:54,159
I, you know, quit my job, had a couple of months off, and eventually got a job.

130
00:06:54,160 --> 00:06:56,318
This was about 2017 where it's,

131
00:06:56,319 --> 00:06:59,439
it was a little bit easier to get a job in the UK than it is now.

132
00:06:59,440 --> 00:07:01,038
And I just went from there.

133
00:07:01,039 --> 00:07:04,159
>> I guess in some ways you you you were also lucky because that was the peak.

134
00:07:04,160 --> 00:07:07,918
That was a time where demand was so high for engineers that people had a boot camps with

135
00:07:07,919 --> 00:07:12,959
a few months of experience and and I I think people got a chances from a lot of places

136
00:07:12,960 --> 00:07:16,079
who had the drive and the motivation and and the smarts, right?

137
00:07:16,080 --> 00:07:20,079
>> Yeah. And because I had this history of talking to people,

138
00:07:20,080 --> 00:07:22,239
that was an unbelievable advantage, right?

139
00:07:22,240 --> 00:07:26,079
I could actually go into an interview and sound like a reasonable person instead of someone

140
00:07:26,080 --> 00:07:29,119
who come straight from a CS degree who maybe didn't have those skills.

141
00:07:29,120 --> 00:07:34,399
So I had this bizarre ability of having zero technical knowledge or very little >> in

142
00:07:34,400 --> 00:07:39,038
the beginning >> but the ability to explain technical knowledge to people right >> and

143
00:07:39,039 --> 00:07:43,038
so that basically all I needed to do was increase my technical knowledge a little bit

144
00:07:43,039 --> 00:07:47,839
and I was very passionate about it and that increased quite quickly and then it was sort

145
00:07:47,840 --> 00:07:51,198
of seemed to be an unfair combination because I just rose through the ranks very quickly

146
00:07:51,199 --> 00:07:56,159
in various different companies and I don't know it felt I felt different from the other

147
00:07:56,160 --> 00:08:00,959
software developers I was working with that make sense And then how did you step up on

148
00:08:00,960 --> 00:08:03,198
the ladder? So like you decided I'm going to do this.

149
00:08:03,199 --> 00:08:04,159
You taught yourself.

150
00:08:04,160 --> 00:08:05,359
You went to some interviews.

151
00:08:05,360 --> 00:08:09,038
You got to give I I'm assuming it must have been a small company, right?

152
00:08:09,039 --> 00:08:13,918
>> Yeah. A tiny company with a couple of really inspiring software developers who work

153
00:08:13,919 --> 00:08:17,119
there. Basically a guy I won't say his name because he he likes his anonymity,

154
00:08:17,120 --> 00:08:21,519
but basically a guy who lived in Sandals who lived in a a canal boat for a long time

155
00:08:21,520 --> 00:08:25,439
like a you know long hair proper hardcore you know.

156
00:08:25,440 --> 00:08:28,079
It was around the time that Microsoft bought GitHub.

157
00:08:28,080 --> 00:08:32,510
I remember him coming in almost in tears at [laughter]

158
00:08:32,560 --> 00:08:34,478
>> Yeah. Microsoft hater.

159
00:08:34,479 --> 00:08:35,199
>> Yeah, absolutely.

160
00:08:35,200 --> 00:08:36,158
You know, classic.

161
00:08:36,159 --> 00:08:42,478
You know, I remember first thing he got me to do was set up CentOS 6 on my um on my Windows

162
00:08:42,479 --> 00:08:45,599
PC. >> It's a pretty hardcore Linux distribution.

163
00:08:45,600 --> 00:08:49,838
>> Really hardcore Linux distribution because that's what our application was running

164
00:08:49,839 --> 00:08:51,199
on in the cloud or something, you know.

165
00:08:51,200 --> 00:08:56,319
So, really lovely, wonderful guy and someone who taught me a lot straight away.

166
00:08:56,320 --> 00:09:00,799
And so I basically that company ran into financial troubles and so I had to move to an

167
00:09:00,800 --> 00:09:03,439
agency pretty quickly and I got a higher job there.

168
00:09:03,440 --> 00:09:07,359
From there nine months later I I moved to another agency and then another agency.

169
00:09:07,360 --> 00:09:12,398
So just sort of bouncing around different agencies and then I was working in open source

170
00:09:12,399 --> 00:09:14,319
which is kind of the next part of the story.

171
00:09:14,320 --> 00:09:18,159
>> And with the agencies that what tech stack were you using at the time?

172
00:09:18,160 --> 00:09:20,559
>> Yeah, it was Typescript, it was React.

173
00:09:20,560 --> 00:09:22,239
>> Oh, was Typescript already back then?

174
00:09:22,240 --> 00:09:27,919
Well, I was pretty uh hardcore on Typescript already almost as in my second job.

175
00:09:27,920 --> 00:09:31,518
I think I I was doing, you know, presentations on how important TypeScript was.

176
00:09:31,519 --> 00:09:36,559
We were working for a uh automobile manufacturer building a learning management system,

177
00:09:36,560 --> 00:09:40,159
right? You know, classic boring agency stuff, right?

178
00:09:40,160 --> 00:09:44,559
And the front-end team at that time was pretty small and we had a backend team in Portugal,

179
00:09:44,560 --> 00:09:46,799
right? So classic front end backend split.

180
00:09:46,800 --> 00:09:51,278
The backend team were racing ahead and at the time I joined the front end team was really

181
00:09:51,279 --> 00:09:52,958
slow. We had a ton of bugs.

182
00:09:52,959 --> 00:09:56,879
The backend team kept changing their contracts without telling us and we thought we need

183
00:09:56,880 --> 00:09:58,799
something to link us up a bit better.

184
00:09:58,800 --> 00:10:02,559
TypeScript felt like the obvious thing and once we shipped it we like our velocity just

185
00:10:02,560 --> 00:10:06,079
went you know we were faster than the backend team and eventually they took people off

186
00:10:06,080 --> 00:10:07,679
our team because we were so quick.

187
00:10:07,680 --> 00:10:09,679
So yeah that was my history with Typescript.

188
00:10:09,680 --> 00:10:11,599
That's kind of my origin story with it.

189
00:10:11,600 --> 00:10:12,958
>> How did you get into open source?

190
00:10:12,959 --> 00:10:15,278
Was it at work? Was it on the side?

191
00:10:15,279 --> 00:10:20,479
It was um I would been constantly playing around with open source on the side and I was

192
00:10:20,480 --> 00:10:21,359
interested in different things.

193
00:10:21,360 --> 00:10:22,639
By then I was into Twitter.

194
00:10:22,640 --> 00:10:25,999
I was sort of looking at people online and thinking that's something someone I want to

195
00:10:26,000 --> 00:10:28,319
emulate, someone I want to look at.

196
00:10:28,320 --> 00:10:33,278
And there was a guy who crossed my radar called uh David Koshid who's um the state machine

197
00:10:33,279 --> 00:10:35,599
and Typescript guy on Twitter.

198
00:10:35,600 --> 00:10:40,590
A lovely lovely guy and I owe a lot of you know my career to him really.

199
00:10:40,640 --> 00:10:42,639
And I was working on a project.

200
00:10:42,640 --> 00:10:46,639
This is I think in my fourth job where we needed a state machine.

201
00:10:46,640 --> 00:10:50,799
It was a very complex application where you were on a video call with someone and you

202
00:10:50,800 --> 00:10:56,559
could navigate around a house in real time together using some sort of Mapport integration

203
00:10:56,560 --> 00:11:01,119
and there was a lot of linking up that needed to be doing across the network boundary,

204
00:11:01,120 --> 00:11:02,958
a lot of complicated state.

205
00:11:02,959 --> 00:11:08,078
And so I used a uh a library called XATE at the time, XATE version 4.

206
00:11:08,079 --> 00:11:10,639
I think that was a resounding success.

207
00:11:10,640 --> 00:11:12,078
And so I wondered, okay,

208
00:11:12,079 --> 00:11:16,559
how can I make this more type safe and so I started to sort of build some tooling around

209
00:11:16,560 --> 00:11:17,359
it, have a fiddle,

210
00:11:17,360 --> 00:11:22,078
built a sort of CLI that constructed around it and that got me the attention of David

211
00:11:22,079 --> 00:11:24,639
and I became a member of the XATE core team.

212
00:11:24,640 --> 00:11:26,559
So I started contributing issues,

213
00:11:26,560 --> 00:11:31,439
started having discussions about the future of the library and it brought me into contact

214
00:11:31,440 --> 00:11:35,039
with just a level of developer that I'd never seen before.

215
00:11:35,040 --> 00:11:39,759
uh David and another guy called Mattesh Bazinski called Anderish Rake on Twitter.

216
00:11:39,760 --> 00:11:41,999
These are these are the most talented developers I've ever seen.

217
00:11:42,000 --> 00:11:43,710
Like this is another level.

218
00:11:43,760 --> 00:11:48,239
And eventually David wanted to form a company out of it.

219
00:11:48,240 --> 00:11:53,119
He wanted to make a big bet on state charts and visual sort of programming as the future

220
00:11:53,120 --> 00:11:57,919
development. They got some funding and that was my first kind of that was my first job

221
00:11:57,920 --> 00:12:02,319
where I was being paid American money basically [laughter] and it was a huge step up

222
00:12:02,320 --> 00:12:02,958
for me. >> Yeah.

223
00:12:02,959 --> 00:12:07,039
which which which as as as we know it's it's quite different one of the European or local

224
00:12:07,040 --> 00:12:14,078
even UK company paying because yeah we I I also covered some of it in the trioduh nature

225
00:12:14,079 --> 00:12:17,759
of software engineering compensation where yeah US companies especially in Europe and

226
00:12:17,760 --> 00:12:22,559
also in the US they they think about compensation differently and value generated differently

227
00:12:22,560 --> 00:12:26,078
right >> totally it changed my life you know in terms of the way I was thinking about

228
00:12:26,079 --> 00:12:30,799
money and the way I was thinking about flexibility and it meant I was working on something

229
00:12:30,800 --> 00:12:35,359
I was passionate about and I started started while I was there doing a bit more advocacy

230
00:12:35,360 --> 00:12:39,359
for it because obviously the company's very small uh I was doing a lot of development

231
00:12:39,360 --> 00:12:44,319
but also I wanted to be an advocate for it because I believed in it you know and I still

232
00:12:44,320 --> 00:12:48,078
think state charts are incredibly primitive for certain kinds of work I've sort of rode

233
00:12:48,079 --> 00:12:53,679
back a little bit on my belief of them especially in the AI age but I was doing a bit

234
00:12:53,680 --> 00:12:59,679
more of that and that got me the attention of a couple of guys at Versel because Versel

235
00:12:59,680 --> 00:13:04,159
at that time Lee Robinson was the guy in charge of developer education there.

236
00:13:04,160 --> 00:13:09,039
They have this incredible team, Delba Delba de Oliviera, um Lydia Halley,

237
00:13:09,040 --> 00:13:10,319
both of whom are now at Claw Code.

238
00:13:10,320 --> 00:13:16,319
Yeah. >> Um Lee himself and I was working I got a job there under Jared Palmer as like

239
00:13:16,320 --> 00:13:18,239
the um Yeah. >> Wow.

240
00:13:18,240 --> 00:13:19,518
That that Jared Palmer.

241
00:13:19,519 --> 00:13:20,398
>> That Jared Palmer.

242
00:13:20,399 --> 00:13:27,039
Yeah. Um who's a really good mate actually and he's the one who later moved to uh GitHub.

243
00:13:27,040 --> 00:13:32,559
He he started or spearheaded stack diffs or stack PRs and now he's at Cognition.

244
00:13:32,560 --> 00:13:36,159
>> Yeah. He um went into GitHub, shipped stack diffs, left,

245
00:13:36,160 --> 00:13:38,398
refuses to elaborate and is now at Cognition.

246
00:13:38,399 --> 00:13:39,119
Exactly. >> Yeah.

247
00:13:39,120 --> 00:13:40,799
But he's also an industry legend.

248
00:13:40,800 --> 00:13:45,359
Yes. >> Yes. He's I mean he's a great guy and I worked under him for not very long at

249
00:13:45,360 --> 00:13:48,159
Versel. So I was only there about 3 months.

250
00:13:48,160 --> 00:13:54,398
From there, I had I got a funny contract at Versel because I'd already been floating

251
00:13:54,399 --> 00:13:58,479
this idea of sort of TypeScript and thinking about TypeScript and thinking about maybe

252
00:13:58,480 --> 00:14:01,070
making educational material for TypeScript.

253
00:14:01,120 --> 00:14:06,319
>> I had this urge while I was at Stately, the Xate company, to teach stuff.

254
00:14:06,320 --> 00:14:09,390
You know, I I've been teaching for six years before.

255
00:14:09,440 --> 00:14:13,119
You know, I've been not teaching for four or five years at that point, maybe six years.

256
00:14:13,120 --> 00:14:15,119
And I thought, I need to get back to this.

257
00:14:15,120 --> 00:14:17,679
Like, I miss it, you know, and I love making stuff.

258
00:14:17,680 --> 00:14:18,638
I love making content.

259
00:14:18,639 --> 00:14:20,349
I love teaching people.

260
00:14:20,399 --> 00:14:22,239
And so that's what I started doing.

261
00:14:22,240 --> 00:14:24,159
And I started doing it for advanced types.

262
00:14:24,160 --> 00:14:28,319
I'd got in contact with a lot of crazy typing tricks,

263
00:14:28,320 --> 00:14:33,518
a lot of really advanced TypeScript stuff while I was trying to force XATE to be type

264
00:14:33,519 --> 00:14:35,359
safe. Very, very hard job.

265
00:14:35,360 --> 00:14:37,710
I think a mostly impossible job.

266
00:14:37,760 --> 00:14:40,398
And so I made a couple of tips.

267
00:14:40,399 --> 00:14:44,078
I made these two-minute tips, posted them on Twitter, and they just went, you know,

268
00:14:44,079 --> 00:14:46,110
in a way I'd not felt before.

269
00:14:46,160 --> 00:14:48,879
And I realized, okay, there's there's a market here.

270
00:14:48,880 --> 00:14:53,518
And so, one Sunday, I just made like 13 15 of these two-minute tips.

271
00:14:53,519 --> 00:14:56,958
I just queue them up over the next few weeks, and my follower count went from,

272
00:14:56,959 --> 00:14:59,198
you know, 4,000 to 10,000 or something, you know,

273
00:14:59,199 --> 00:15:03,439
it's just you suddenly felt that there was huge interest in this, right?

274
00:15:03,440 --> 00:15:06,559
>> Exactly. A massive wave of something was, you know,

275
00:15:06,560 --> 00:15:08,799
some combination of the way I was speaking,

276
00:15:08,800 --> 00:15:12,750
the material I was delivering that was clicking in a way that I'd not felt before.

277
00:15:12,800 --> 00:15:15,710
And that's only really happened twice in my career.

278
00:15:15,760 --> 00:15:20,958
So, I was already floating the idea of a course and I knew I could do it well.

279
00:15:20,959 --> 00:15:26,270
I knew I could do a really great course if I just had the right audience and if it clicked.

280
00:15:26,320 --> 00:15:27,838
And so, I went into Versel.

281
00:15:27,839 --> 00:15:33,439
I got a contract there for only 3 days a week for 3 months initially, which is very unusual.

282
00:15:33,440 --> 00:15:37,838
Is that what you wanted or or this is like how you know Vers Versel was probably testing

283
00:15:37,839 --> 00:15:39,198
the water, see how it goes?

284
00:15:39,199 --> 00:15:41,919
>> I I Versel want to be full-time straight away.

285
00:15:41,920 --> 00:15:43,838
>> You knew that there's this other thing.

286
00:15:43,839 --> 00:15:47,838
So, let me kind of hedge my bets if I'm able to do right.

287
00:15:47,839 --> 00:15:54,240
>> Versel was this weird backup to what I [laughter] which is wild.

288
00:15:54,639 --> 00:15:56,078
>> Which is wild to me.

289
00:15:56,079 --> 00:15:58,559
>> For most people, this would be the dream job, right?

290
00:15:58,560 --> 00:16:00,078
>> I know. >> So,

291
00:16:00,079 --> 00:16:04,159
I it's a little embarrassing to say because obviously it's so many people's dream job,

292
00:16:04,160 --> 00:16:05,999
but I went into it going, "Okay,

293
00:16:06,000 --> 00:16:12,190
I need a stable 9 to5 for 3 days a week while I test this other thing out."

294
00:16:12,240 --> 00:16:17,198
But I mean, just to be fair, I think this is sensible, right?

295
00:16:17,199 --> 00:16:20,398
Like at at this point, if if we just go back to where you are,

296
00:16:20,399 --> 00:16:25,599
like you've you've been a voice coach for a good part of your career,

297
00:16:25,600 --> 00:16:29,679
let's say six years, and let's say now for 5 years, you've been building software.

298
00:16:29,680 --> 00:16:30,398
You love doing it.

299
00:16:30,399 --> 00:16:31,919
You think you're good at it.

300
00:16:31,920 --> 00:16:35,758
Uh you think you might be able to teach, but who knows, right?

301
00:16:35,759 --> 00:16:40,239
and and at that point saying all right let let me take a gamble and like do this thing

302
00:16:40,240 --> 00:16:47,278
that might or might not work out whereas if you can pull it off when you have something

303
00:16:47,279 --> 00:16:51,359
stable and it gets traction now that's different right you know a lot of engineers have

304
00:16:51,360 --> 00:16:54,559
aspirations ideas especially because with software engineer you can work remotely you

305
00:16:54,560 --> 00:16:58,479
can you can take your idea build a company and they're thinking all right should I just

306
00:16:58,480 --> 00:17:02,239
plunge should I quit my job should I not quit my job so like in in some ways I guess

307
00:17:02,240 --> 00:17:07,599
it's this this is one model that is kind unique and and if if you're able to pull it

308
00:17:07,600 --> 00:17:13,279
off. I mean, >> it was the most bizarre thing because it it became very clear very quickly

309
00:17:13,280 --> 00:17:15,999
that I couldn't stay at Versel basically.

310
00:17:16,000 --> 00:17:18,958
So, we had about two months into my work at Versell.

311
00:17:18,959 --> 00:17:23,759
I was there actually over a very um tumultuous time because I was there when they released

312
00:17:23,760 --> 00:17:25,759
Turopac. I actually wrote some of the documentation,

313
00:17:25,760 --> 00:17:30,190
the initial documentation for Turboac and met some of the team >> which was a lot faster

314
00:17:30,240 --> 00:17:31,279
build system. Right.

315
00:17:31,280 --> 00:17:33,599
>> Yeah, it was a build system essentially.

316
00:17:33,600 --> 00:17:38,879
um at the time they were trying to rival Webpack um what they were working with and I

317
00:17:38,880 --> 00:17:41,119
I was there initially when they were building the docs.

318
00:17:41,120 --> 00:17:42,239
I flew out to San Francisco.

319
00:17:42,240 --> 00:17:45,839
I was there for nextg comp when they announced it, you know, big, you know,

320
00:17:45,840 --> 00:17:48,798
you know, a really fun experience and like I was, you know,

321
00:17:48,799 --> 00:17:51,918
there with everyone while they're, you know, getting everything ready for it.

322
00:17:51,919 --> 00:17:52,879
And so, you know,

323
00:17:52,880 --> 00:17:57,918
I do that and already in the back of my head I'm thinking I've seen the newsletter sort

324
00:17:57,919 --> 00:18:00,159
of my total time script stuff creep up.

325
00:18:00,160 --> 00:18:03,038
I understand. Okay, there's something really big here.

326
00:18:03,039 --> 00:18:08,879
And when I made a pre-release sale, that just went crazy.

327
00:18:08,880 --> 00:18:15,918
I was earning u let's say X in um at Versel and that was like 30 40x

328
00:18:15,919 --> 00:18:16,719
or something, you know,

329
00:18:16,720 --> 00:18:22,479
it was immediate >> and and X at Versel was already a really really good composition.

330
00:18:22,480 --> 00:18:24,399
>> Absolutely. Very very very happy with that.

331
00:18:24,400 --> 00:18:29,359
And but yeah, so I just it was obvious there was no other decision I could make.

332
00:18:29,360 --> 00:18:30,719
I loved working at Vel.

333
00:18:30,720 --> 00:18:35,759
Uh I would probably go back at some point but I just couldn't stay.

334
00:18:35,760 --> 00:18:36,879
So I had to do this thing.

335
00:18:36,880 --> 00:18:38,879
>> And then tell me about total TypeScript.

336
00:18:38,880 --> 00:18:43,038
So you you started to you had this idea uh you started to build it two days a week and

337
00:18:43,039 --> 00:18:46,798
on on on the weekends and then you did this pre-release sale.

338
00:18:46,799 --> 00:18:48,560
What's what's the

339
00:18:48,960 --> 00:18:51,439
>> I almost I try never to work on weekends basically.

340
00:18:51,440 --> 00:18:53,439
I I'm extremely radical about this.

341
00:18:53,440 --> 00:18:54,239
I just I don't know.

342
00:18:54,240 --> 00:18:59,359
I mean, I think it's something I mostly fail at because I'm a quite obsessional person.

343
00:18:59,360 --> 00:19:01,599
I like trying to make something work,

344
00:19:01,600 --> 00:19:04,879
but I'm not one of these guys who's doing what was it like?

345
00:19:04,880 --> 00:19:07,918
What's the SF thing where people go like 96 days?

346
00:19:07,919 --> 00:19:11,119
>> 996 >> 996. It turns my stomach, you know?

347
00:19:11,120 --> 00:19:12,798
I just hate that stuff.

348
00:19:12,799 --> 00:19:19,918
Like I'm I am trying to with everything I do build a lifestyle and build a uh a life

349
00:19:19,919 --> 00:19:22,159
where I can spend most of it with my family.

350
00:19:22,160 --> 00:19:28,319
That's my goal. And so just to prefix that with all of my decisions after that hopefully

351
00:19:28,320 --> 00:19:30,239
make more sense in that light.

352
00:19:30,240 --> 00:19:34,159
So Total TypeScript I was working with um a guy called Joel Hooks.

353
00:19:34,160 --> 00:19:40,319
Joel Hooks is uh extremely uh funny, extremely influential on me.

354
00:19:40,320 --> 00:19:45,199
I've worked with him now for for years and he came up with Egghhead.

355
00:19:45,200 --> 00:19:47,710
He's worked with Keny Dods on his courses.

356
00:19:47,760 --> 00:19:54,399
extremely successful course creator in the background and I basically reached out to

357
00:19:54,400 --> 00:19:58,879
him and I said would you like to make this course and he said hell yes and we went from

358
00:19:58,880 --> 00:20:03,599
there and so straight while I'm at Versell I'm also working with Joel and we do this

359
00:20:03,600 --> 00:20:09,119
pre-release and as I said just goes nuts and I realize okay I've got to fully commit

360
00:20:09,120 --> 00:20:16,960
to this and we get to I think about January 2023 February 2023

361
00:20:17,120 --> 00:20:22,079
and we released the full course and I don't know I think I need to look at the charts

362
00:20:22,080 --> 00:20:26,319
from around that time but it reaches seven figures extremely quickly and that's a revenue

363
00:20:26,320 --> 00:20:29,918
split between me and Joel of course there's expenses in that but in terms of raw revenue

364
00:20:29,919 --> 00:20:35,519
it was extremely exciting >> yeah but the seven figures that's $1 million which is I

365
00:20:35,520 --> 00:20:41,199
mean incredible milestone right >> which is nuts you know and life-changing and I and

366
00:20:41,200 --> 00:20:45,839
I realize okay I can wake up in the morning and this money is still going to come in

367
00:20:45,840 --> 00:20:50,079
you know I'm this is this is something that I dreamed about for a long time when I was

368
00:20:50,080 --> 00:20:51,199
a singing teacher as well.

369
00:20:51,200 --> 00:20:53,439
making material that I could sell online.

370
00:20:53,440 --> 00:20:56,639
You know, this is a something I've been aiming for for a long time,

371
00:20:56,640 --> 00:21:03,038
sort of high leverage work where I can do the work and then step back and go back to

372
00:21:03,039 --> 00:21:06,399
my family. And for the next couple of years,

373
00:21:06,400 --> 00:21:09,279
I worked on Typcript sort of expanding the course,

374
00:21:09,280 --> 00:21:12,719
selling a couple of supplementary courses and yeah,

375
00:21:12,720 --> 00:21:14,879
that's basically where total typescript was.

376
00:21:14,880 --> 00:21:20,158
And so that was the main portion of my success in the last four years has been total

377
00:21:20,159 --> 00:21:21,678
time script and building that out.

378
00:21:21,679 --> 00:21:25,839
>> Yeah. and and total size group has been very inspirational especially that you in

379
00:21:25,840 --> 00:21:32,158
you openly shared a big milestone when it hit $2.5 million of total revenue which again

380
00:21:32,159 --> 00:21:37,599
I think for many software engineers you know that is of course we know this is before

381
00:21:37,600 --> 00:21:43,119
revenue share and there's expenses involved as well but it's something that is pretty

382
00:21:43,120 --> 00:21:49,359
clearly a higher earning potential than many great software engineering jobs not necessarily

383
00:21:49,360 --> 00:21:53,279
all of them especially when we're looking at the us and and some of the the AI labs and

384
00:21:53,280 --> 00:21:55,359
whatnot, which was probably an exception,

385
00:21:55,360 --> 00:22:01,359
but the fact that there is a a market and a business to be made of what what I feel is

386
00:22:01,360 --> 00:22:04,798
a bit kind of an honest model in a sense of like, hey, I created this thing,

387
00:22:04,799 --> 00:22:08,719
people pay for it because they want to learn and they they hopefully get value from it

388
00:22:08,720 --> 00:22:10,719
because otherwise they would ask for a refund, right?

389
00:22:10,720 --> 00:22:13,839
>> Exactly. We do like a very extended refund policy.

390
00:22:13,840 --> 00:22:17,839
I don't tend to want to accept any other forms of money either.

391
00:22:17,840 --> 00:22:20,319
I don't like necessarily doing sponsored content.

392
00:22:20,320 --> 00:22:22,079
I'm not going to say never, you know,

393
00:22:22,080 --> 00:22:25,359
but I don't really I've got a GitHub sponsors page,

394
00:22:25,360 --> 00:22:27,470
but I'm really trying to take it down.

395
00:22:27,520 --> 00:22:29,279
For a long time, I've tried to take it down.

396
00:22:29,280 --> 00:22:31,839
I I like the idea of just being someone who has, okay,

397
00:22:31,840 --> 00:22:33,279
these are the products you can buy from me.

398
00:22:33,280 --> 00:22:34,798
This is how you can support me.

399
00:22:34,799 --> 00:22:37,119
And hopefully this gives you, you know,

400
00:22:37,120 --> 00:22:40,719
10x in terms of returns because this is a very lucrative industry, right?

401
00:22:40,720 --> 00:22:44,319
Like, and a lot of people have education budgets that they can spend.

402
00:22:44,320 --> 00:22:48,639
And if you want to spend some of your education budget on me, that's basically my model.

403
00:22:48,640 --> 00:22:52,719
And a lot of that money, a lot of the people taking the course,

404
00:22:52,720 --> 00:22:54,479
this is from people's education budgets.

405
00:22:54,480 --> 00:22:59,150
You know, this is companies coming and um spending big on education.

406
00:22:59,200 --> 00:23:03,999
And that was a market that Joel was very keen in pushing me towards and realizing this.

407
00:23:04,000 --> 00:23:09,279
You know, I didn't have much of a sense for how much money was slloshing around in the

408
00:23:09,280 --> 00:23:13,310
industry, especially in in that age and honestly still.

409
00:23:13,360 --> 00:23:18,800
But the fact that it just hit that milestone so quickly within a couple of years,

410
00:23:18,960 --> 00:23:20,830
I mean, life-changing.

411
00:23:20,880 --> 00:23:21,359
>> Well, I mean,

412
00:23:21,360 --> 00:23:24,959
this sounds like an amazing story and it could be a fairy tale ending where like you

413
00:23:24,960 --> 00:23:29,119
keep creating educational content for the rest of your life and and it's highly in demand,

414
00:23:29,120 --> 00:23:30,558
but then AI happened.

415
00:23:30,559 --> 00:23:34,479
>> Yeah. >> And as we know, it's it's changing a lot of how we work,

416
00:23:34,480 --> 00:23:36,879
how we how we find information.

417
00:23:36,880 --> 00:23:39,678
For example, like I I I don't Google that much.

418
00:23:39,679 --> 00:23:43,999
I actually work with AI agents or deep research or some of those things.

419
00:23:44,000 --> 00:23:45,359
I heard stories about educators,

420
00:23:45,360 --> 00:23:49,519
online educators who are saying that their revenue and and market share and mind share

421
00:23:49,520 --> 00:23:54,959
is just falling down because people might not want to sit through courses or or sessions

422
00:23:54,960 --> 00:23:57,390
when you can just turn to turn to the bot.

423
00:23:57,440 --> 00:24:01,599
How did you see AI impacting the industry,

424
00:24:01,600 --> 00:24:05,199
how people learn and also your business as and also you as a teacher?

425
00:24:05,200 --> 00:24:08,639
>> It's complicated because AI has changed the game, right?

426
00:24:08,640 --> 00:24:14,319
It's changed how important knowledge is and specifically the types of knowledge that

427
00:24:14,320 --> 00:24:17,918
are important. So when I'm teaching my courses,

428
00:24:17,919 --> 00:24:19,759
I sort of think of there as being two layers.

429
00:24:19,760 --> 00:24:22,719
I'm teaching the syntax obviously I'm teaching the what,

430
00:24:22,720 --> 00:24:25,470
but there's also the why behind it, right?

431
00:24:25,520 --> 00:24:30,399
And it's very hard to teach the why without touching on the what, if that makes sense.

432
00:24:30,400 --> 00:24:35,999
So the sort of medium is I'm going to teach you this syntax and maybe you might gather

433
00:24:36,000 --> 00:24:40,798
the sort of wisdom around it right I'm teaching you knowledge but I'm also trying to

434
00:24:40,799 --> 00:24:46,079
teach you wisdom knowledge is now very cheap to acquire right very very cheap you can

435
00:24:46,080 --> 00:24:50,558
just look it up you know you can build you I have a teach skill that can just take you

436
00:24:50,559 --> 00:24:54,879
and just you know teach you the knowledge that you need but the wisdom has gotten no

437
00:24:54,880 --> 00:24:59,759
easier to learn right it's still knocking about like you are still going to run into

438
00:24:59,760 --> 00:25:04,430
the same issues that you ran into if you didn't have that wisdom before even with AI.

439
00:25:04,480 --> 00:25:10,558
So in terms of like my revenue from total time script that's gone down obviously because

440
00:25:10,559 --> 00:25:15,918
I think people are not so interested in that material anymore and I think people teaching

441
00:25:15,919 --> 00:25:20,719
that material are going to find it tricky because again that knowledge is really really

442
00:25:20,720 --> 00:25:21,759
hard to come by.

443
00:25:21,760 --> 00:25:24,639
the only way that I've been able to not necessarily survive,

444
00:25:24,640 --> 00:25:30,399
but it took me a long time to figure out where I wanted to be in the AI space because

445
00:25:30,400 --> 00:25:31,999
I'm not a researcher from OpenAI.

446
00:25:32,000 --> 00:25:35,199
I don't have the credentials to like talk about this stuff really,

447
00:25:35,200 --> 00:25:36,798
especially in 2020,

448
00:25:36,799 --> 00:25:43,599
late 2023 was when I started looking at it and I was initially making courses about how

449
00:25:43,600 --> 00:25:45,439
you put AI into applications.

450
00:25:45,440 --> 00:25:48,558
I thought, okay, I've been building fronted applications for a long time.

451
00:25:48,559 --> 00:25:53,359
it makes sense that AI is changing things a bit there started to be clear to me that

452
00:25:53,360 --> 00:25:54,399
was the wrong bet to make.

453
00:25:54,400 --> 00:26:00,158
I wasn't sort of seeing the returns I was expecting and I didn't like the material was

454
00:26:00,159 --> 00:26:05,918
good and I feel proud of it but I didn't think I wanted to make more of it and around

455
00:26:05,919 --> 00:26:09,150
December last year which is a date that many people site.

456
00:26:09,200 --> 00:26:15,278
Oh yes, we we we know or or as as we call the kind of the the winter break where everyone

457
00:26:15,279 --> 00:26:16,479
came back AI [laughter] pill.

458
00:26:16,480 --> 00:26:17,038
>> Yeah, exactly.

459
00:26:17,039 --> 00:26:18,558
The peter the peter break, right?

460
00:26:18,559 --> 00:26:22,719
>> Peter break. >> The open claw break when Opus 4.5 is out.

461
00:26:22,720 --> 00:26:26,158
People have a lot of time off and they just start slamming it and they realize,

462
00:26:26,159 --> 00:26:28,158
wow, okay, things are really happening.

463
00:26:28,159 --> 00:26:29,759
And that happened to me too.

464
00:26:29,760 --> 00:26:36,319
And I realized, okay, the AI is now good enough that you can delegate to it.

465
00:26:36,320 --> 00:26:42,719
you can actually make structures around the agents and the agents can handle the knowledge,

466
00:26:42,720 --> 00:26:46,158
the syntax, the sort of I call it the tactical stuff.

467
00:26:46,159 --> 00:26:51,710
Yeah. >> Um and you can handle the strategic stuff, the long-term thinking.

468
00:26:51,760 --> 00:26:52,639
>> I use that a lot.

469
00:26:52,640 --> 00:26:55,119
I know you had John Amster on this um podcast.

470
00:26:55,120 --> 00:26:59,678
I've been really wanting to chat to him myself like he's a huge influence on me and he

471
00:26:59,679 --> 00:27:04,109
talks about the difference between tactical programming and strategic programming.

472
00:27:04,159 --> 00:27:10,079
AI has largely eaten tactical programming in my view and it's up to us to handle the

473
00:27:10,080 --> 00:27:15,439
strategic and I realized okay in the strategic layer there's a course I can create there.

474
00:27:15,440 --> 00:27:20,879
I was looking at Ralph loops at the time um sort of Jeffrey Huntley um was building this

475
00:27:20,880 --> 00:27:26,399
really cool stuff where you can loop the agent and get it to follow these goals and I

476
00:27:26,400 --> 00:27:28,879
thought okay there's definitely material here.

477
00:27:28,880 --> 00:27:34,158
I just need to find a structure within which I can put it and organize how to fiddle

478
00:27:34,159 --> 00:27:35,918
around with it. >> And I remember with the Ralph loops,

479
00:27:35,919 --> 00:27:40,079
you also made a video that became very popular on YouTube, access everywhere,

480
00:27:40,080 --> 00:27:44,798
where you basically said like all right, like here's how I created a Ralph loop.

481
00:27:44,799 --> 00:27:47,918
Like here's I have a project that has a lot of like to-dos.

482
00:27:47,919 --> 00:27:52,239
and you did a great job in uh we'll link that video in the show notes below where you

483
00:27:52,240 --> 00:27:57,038
said like all right here's how usually we would try to get agents to work like do a plan

484
00:27:57,039 --> 00:28:00,479
up front and then implement each step like the kind of traditional top down planning

485
00:28:00,480 --> 00:28:03,439
and you're saying the problem is that as you're implementing or even the agents implementing

486
00:28:03,440 --> 00:28:07,918
it realizes hang on I need to do more stuff and then how do you modify the plan and then

487
00:28:07,919 --> 00:28:11,519
enter the Ralph loop where you gave the structures that you used at the time there was

488
00:28:11,520 --> 00:28:16,639
like an MD file it keeps it adds as there and it kind of like eats to it but but keeps

489
00:28:16,640 --> 00:28:22,558
adding And uh it was actually a pretty eye openener to me as like ah on a way to think

490
00:28:22,559 --> 00:28:24,558
about how to do these agents.

491
00:28:24,559 --> 00:28:28,879
>> It actually the the couple of years that I spent sort of trying to put agents into

492
00:28:28,880 --> 00:28:33,759
applications was really beneficial there because when you try to build an app that contains

493
00:28:33,760 --> 00:28:37,278
an agent, you're always thinking about data flow.

494
00:28:37,279 --> 00:28:41,119
You're thinking about how the data is going to get in, what shape it's going to be,

495
00:28:41,120 --> 00:28:44,319
what priority, whe whether you're going to put it in the system prompt, the user prompt.

496
00:28:44,320 --> 00:28:47,678
you're working at a lower level than you usually get to with the harnesses.

497
00:28:47,679 --> 00:28:50,398
And so when I got to working with the harnesses, it felt like, oh,

498
00:28:50,399 --> 00:28:52,079
this just feels very familiar.

499
00:28:52,080 --> 00:28:54,959
I just need to, you know, where is the state going to live?

500
00:28:54,960 --> 00:28:57,599
How am I going to pass the state into the agents?

501
00:28:57,600 --> 00:28:59,519
What shape is that going to look like?

502
00:28:59,520 --> 00:29:01,918
How am I going to compact it or clear it?

503
00:29:01,919 --> 00:29:05,599
You know, and this was, you know, still pretty early days of Claw Co.

504
00:29:05,600 --> 00:29:08,479
Cloud had been out, you know, five, six months at that point.

505
00:29:08,480 --> 00:29:10,798
>> And it just felt very natural.

506
00:29:10,799 --> 00:29:14,398
And from there, I just got obsessed with these, I suppose,

507
00:29:14,399 --> 00:29:17,439
we would call them loops now, but really they're just processes.

508
00:29:17,440 --> 00:29:20,158
They're sort of different ways of stringing agents together.

509
00:29:20,159 --> 00:29:21,678
This is kind of like the diagram, right?

510
00:29:21,679 --> 00:29:26,479
If you can draw arrows from one thing to the other that you can call that a loop,

511
00:29:26,480 --> 00:29:30,798
you especially when there's a port that goes back or you can call a workflow or or a

512
00:29:30,799 --> 00:29:31,839
flow or whatever, right?

513
00:29:31,840 --> 00:29:33,359
>> I would call it a finite state machine.

514
00:29:33,360 --> 00:29:37,038
you know, it felt it felt very similar to the stuff I've been working on in XATE,

515
00:29:37,039 --> 00:29:41,038
which is process based, which is state based, uh, event based sometimes as well,

516
00:29:41,039 --> 00:29:41,599
where, you know,

517
00:29:41,600 --> 00:29:44,959
you have an agent at the bottom there that's calling an event back at the top.

518
00:29:44,960 --> 00:29:48,639
And that's I started just to see really good results from that.

519
00:29:48,640 --> 00:29:53,678
And I would do these experiments where I would try sort of building out my process and

520
00:29:53,679 --> 00:29:55,999
I would build out a feature of, you know,

521
00:29:56,000 --> 00:29:59,519
I have a few apps that I work on kind of to extend what I do,

522
00:29:59,520 --> 00:30:01,038
like I have a custom video editor.

523
00:30:01,039 --> 00:30:03,918
I have a you know a huge thing that huge codebase.

524
00:30:03,919 --> 00:30:09,278
I have a few open source projects as well and I was just building these little loops

525
00:30:09,279 --> 00:30:14,079
and little pipelines and I would sometimes just drop it and go back to what the default

526
00:30:14,080 --> 00:30:19,839
setup was and I just noticed a huge difference like I just felt wow okay the stuff that

527
00:30:19,840 --> 00:30:25,119
I'm doing here is really setting me up for success and I started thinking what's the

528
00:30:25,120 --> 00:30:30,239
best way that I can distribute that how can I share that with other people better and

529
00:30:30,240 --> 00:30:34,239
that's where I sort of started landing on skills as the distribution ution mechanism

530
00:30:34,240 --> 00:30:35,519
for this stuff. >> Mhm.

531
00:30:35,520 --> 00:30:41,599
These are the the skills for AI bots harnesses where you can typically define them and

532
00:30:41,600 --> 00:30:45,038
now you can once you install them you can invoke them with a slash command.

533
00:30:45,039 --> 00:30:50,319
>> Exactly. Skills really they're just a folder of markdown files that can sit in your

534
00:30:50,320 --> 00:30:54,959
computer somewhere and the agents can either invoke them themselves.

535
00:30:54,960 --> 00:30:58,959
So model invoke skills or you can have skills that like the agent doesn't know about

536
00:30:58,960 --> 00:31:00,398
but you can invoke yourself.

537
00:31:00,399 --> 00:31:06,079
So user invoked skills and I started seeing these skill sets pop up everywhere like superpowers

538
00:31:06,080 --> 00:31:10,639
and you know claude code plugins that you can install um I think Gstack as well.

539
00:31:10,640 --> 00:31:16,319
I realized okay maybe I can distribute what I have this process as a set of skills and

540
00:31:16,320 --> 00:31:20,719
see what people think of it and initially I just put it up and I was doing other stuff.

541
00:31:20,720 --> 00:31:25,839
I was working on a course and I check back in and I realize oh it's got more stars than

542
00:31:25,840 --> 00:31:28,030
anything else I've ever done.

543
00:31:28,080 --> 00:31:29,678
I've not even really talked about it.

544
00:31:29,679 --> 00:31:31,759
you know, it's just sat there on its own.

545
00:31:31,760 --> 00:31:33,038
Word of mouth, I suppose.

546
00:31:33,039 --> 00:31:37,839
I've done a little bit of documentation, but really not much and it's just exploded already.

547
00:31:37,840 --> 00:31:41,359
So, I thought, okay, maybe I should put a little bit more work into this.

548
00:31:41,360 --> 00:31:42,639
Maybe I should talk about them.

549
00:31:42,640 --> 00:31:46,158
And [clears throat] I did a talk at, I think, where we met last,

550
00:31:46,159 --> 00:31:49,599
which was AI engineer London about in April.

551
00:31:49,600 --> 00:31:53,629
That talk was entitled Software Fundamentals Still Matter.

552
00:31:53,679 --> 00:31:57,518
And that talk is now up to, I think, 1.2 million views or something.

553
00:31:57,519 --> 00:31:58,719
And I mentioned the skill set.

554
00:31:58,720 --> 00:32:01,680
The skill set is now at 230,000

555
00:32:02,000 --> 00:32:07,119
stars. It is now the second most starred skills repo in the world.

556
00:32:07,120 --> 00:32:12,670
I think somewhere like 20th to 25th of the most starred repos of all time.

557
00:32:12,720 --> 00:32:14,079
Wow. You know what I mean?

558
00:32:14,080 --> 00:32:15,439
Like what's going on?

559
00:32:15,440 --> 00:32:17,918
So there's obviously a hunger for this.

560
00:32:17,919 --> 00:32:19,599
So this was the second time in my career,

561
00:32:19,600 --> 00:32:22,398
just like when I was putting out the little typescript videos where I felt, wow,

562
00:32:22,399 --> 00:32:23,439
there's a momentum here.

563
00:32:23,440 --> 00:32:24,639
There's something happening.

564
00:32:24,640 --> 00:32:27,199
And so I felt I had to double down on that.

565
00:32:27,200 --> 00:32:29,678
the the skills, how did you write them?

566
00:32:29,679 --> 00:32:33,278
Is is this trying to capture your workflow,

567
00:32:33,279 --> 00:32:36,719
your understanding of what works with agents, you know, not just right now,

568
00:32:36,720 --> 00:32:38,719
but of course, you're thinking about state,

569
00:32:38,720 --> 00:32:42,959
you're thinking about how you were integrating AI into applications,

570
00:32:42,960 --> 00:32:46,639
which again didn't take off all that much, but but you learned.

571
00:32:46,640 --> 00:32:51,518
So, is this kind of like Matt's workflow, Matt's way of of what works for me?

572
00:32:51,519 --> 00:32:52,798
>> Yes, that's what it is.

573
00:32:52,799 --> 00:32:57,518
I try to think first of all people are going to use these skills and they're going to

574
00:32:57,519 --> 00:32:58,398
tinker with them.

575
00:32:58,399 --> 00:33:04,319
So how do I make the simplest set of skills that people can audit very easily?

576
00:33:04,320 --> 00:33:07,040
I'm trying to think how do I maximize

577
00:33:07,440 --> 00:33:10,719
um people picking these up and using them at work.

578
00:33:10,720 --> 00:33:15,839
So for instance the grill me skill which is the most popular one you know I don't know

579
00:33:15,840 --> 00:33:17,518
if you've used it but >> I use it as well.

580
00:33:17,519 --> 00:33:21,599
Yeah. >> Okay. [laughter] It it's it's annoying how how damn it it grilled me.

581
00:33:21,600 --> 00:33:22,479
I just asked it.

582
00:33:22,480 --> 00:33:29,518
I was like, I'd like to expose an API endpoint that can can tell whoever has the authenticated

583
00:33:29,519 --> 00:33:31,839
token uh I have some basic authentication.

584
00:33:31,840 --> 00:33:34,879
Is this email a subscriber to my email list or not?

585
00:33:34,880 --> 00:33:39,518
Because I I want to connect it with uh one of the the events that I'm I'm doing with

586
00:33:39,519 --> 00:33:41,469
to get priority to pay subscribers.

587
00:33:41,519 --> 00:33:42,879
And that's very simple, right?

588
00:33:42,880 --> 00:33:46,639
And then the grill me thing, it it starts to just really grail me like, okay,

589
00:33:46,640 --> 00:33:48,079
so what about authentication?

590
00:33:48,080 --> 00:33:51,678
Do you want the bear token or do you want it in JSON which is not as safe etc.

591
00:33:51,679 --> 00:33:55,278
like okay well that's a decision make and then we go through all of these decisions and

592
00:33:55,279 --> 00:34:00,239
it goes really low level including like okay like how do we enforce rate limits when

593
00:34:00,240 --> 00:34:04,479
it comes to rate limits you want to exactly do it when you get like a thousand per day

594
00:34:04,480 --> 00:34:10,398
and not allow single more which is more complexity and I just realized it's been a long

595
00:34:10,399 --> 00:34:15,039
time since I've had such an involved design discussion with with a team or an engineering

596
00:34:15,040 --> 00:34:18,719
team and you typically have it when someone has deep domain knowledge and I I I was both

597
00:34:18,720 --> 00:34:21,999
annoyed by I this is just simple like No, don't worry about that.

598
00:34:22,000 --> 00:34:25,039
But also impressed that this thing, this AI,

599
00:34:25,040 --> 00:34:28,959
this LM through a series of prompts is able to do all of this.

600
00:34:28,960 --> 00:34:30,878
>> It's I mean, everyone's got a grill me story.

601
00:34:30,879 --> 00:34:32,959
So I get so many of these in conferences.

602
00:34:32,960 --> 00:34:36,638
People say, you know, you've this this very very simple skill.

603
00:34:36,639 --> 00:34:41,358
It's really just telling the agent to interview you relentlessly about the topic.

604
00:34:41,359 --> 00:34:42,799
It's a very small skill.

605
00:34:42,800 --> 00:34:47,598
It just has this weird emergent behavior with it where the models just start thinking

606
00:34:47,599 --> 00:34:51,678
a little bit outside the box and they start throwing ideas at you.

607
00:34:51,679 --> 00:34:54,799
I think I got it originally from like a Tariq who works with claw code.

608
00:34:54,800 --> 00:34:59,759
He's saying basically the get the agent to interview you and then you'll see better results.

609
00:34:59,760 --> 00:35:03,598
So I encode that into a little skill and it's I I realized wow okay it's just sort of

610
00:35:03,599 --> 00:35:05,679
10 times better than anything I've ever used.

611
00:35:05,680 --> 00:35:09,118
And that grill me skill was the first one that sort of reminded me of the discussions

612
00:35:09,119 --> 00:35:13,039
I would have at at my first job, you know, with the with the guy with the sandals.

613
00:35:13,040 --> 00:35:16,879
It's this very senior engineer in the room really getting me to think about everything

614
00:35:16,880 --> 00:35:21,279
that I'd done. It was the most familiar thing to me to actually working with someone

615
00:35:21,280 --> 00:35:23,679
like uh Anderist Rake at Xate.

616
00:35:23,680 --> 00:35:27,679
You know, it just felt like a really high quality developer was asking me these good

617
00:35:27,680 --> 00:35:30,190
questions. And I thought, wow, okay.

618
00:35:30,240 --> 00:35:37,279
And then I started sort of taking that and going like how do I mine this uh

619
00:35:37,280 --> 00:35:39,440
agent for more

620
00:35:39,839 --> 00:35:41,439
software fundamental stuff?

621
00:35:41,440 --> 00:35:47,309
How do I make it feel more like a proper developer, a real senior?

622
00:35:47,359 --> 00:35:53,279
How do I tickle the right latent space in order to get its behavior to change and challenge

623
00:35:53,280 --> 00:35:54,319
me in interesting way?

624
00:35:54,320 --> 00:35:55,358
Because if you can do that,

625
00:35:55,359 --> 00:35:59,199
if you can increase the quality of the conversation you're having with the agent,

626
00:35:59,200 --> 00:36:01,199
you're going to increase the quality of the outputs.

627
00:36:01,200 --> 00:36:06,319
What I liked about the grill meme skill is it forced me to make decisions that I know

628
00:36:06,320 --> 00:36:10,799
what decision to make when I think about it, but it is my decision.

629
00:36:10,800 --> 00:36:17,999
So unlike when I tell the when when you do the /go command like build this and

630
00:36:18,000 --> 00:36:21,838
it goes off and does this and it makes all the decisions or or most key decisions.

631
00:36:21,839 --> 00:36:27,039
What I like about grill me is I both make the decision but also sometimes it reminds

632
00:36:27,040 --> 00:36:30,799
me about things that I didn't think too much about or maybe it reminds me that I should

633
00:36:30,800 --> 00:36:34,719
do a bit of a research for example like it asked me like which which authentication would

634
00:36:34,720 --> 00:36:40,159
I want to do a bearer token or over post or or or even over get and then I'm like hang

635
00:36:40,160 --> 00:36:44,239
on like I'm going to look up like what the differences are or or ask a different session

636
00:36:44,240 --> 00:36:49,838
to to educate. So like it it makes me a better professional and uh I I do have this belief

637
00:36:49,839 --> 00:36:53,838
that when you're working with AI like as long as we're learning I think we're fine.

638
00:36:53,839 --> 00:36:57,598
As long as we stop learning and outsource the learning to this thing trouble will be

639
00:36:57,599 --> 00:37:00,399
brewing maybe you know months or years down the road.

640
00:37:00,400 --> 00:37:04,910
>> 100%. There's two things there right I think what everybody underestimates about agents

641
00:37:04,960 --> 00:37:09,919
everybody is that there is a communication gap between you and the agent right there

642
00:37:09,920 --> 00:37:11,358
is a barrier there.

643
00:37:11,359 --> 00:37:16,319
You feel like because the agent is not a human and because you understand your hierarchy

644
00:37:16,320 --> 00:37:19,439
of values, you think that the agent will just pick up on them, right?

645
00:37:19,440 --> 00:37:22,159
There's this sort of feeling of, yeah, just trust the model.

646
00:37:22,160 --> 00:37:25,358
Especially with the top tier models, you know, just just trust the model.

647
00:37:25,359 --> 00:37:29,679
But the agent, however good it is, however smart the model is, you know,

648
00:37:29,680 --> 00:37:32,399
even mythos, it can't read your mind.

649
00:37:32,400 --> 00:37:33,598
It can't read your mind.

650
00:37:33,599 --> 00:37:39,279
So you have to there has to be some process of communicating your values to the agent

651
00:37:39,280 --> 00:37:44,239
because often when you do like a goal when you just go okay just spam me out some code

652
00:37:44,240 --> 00:37:47,598
give me some slop the agent is going to produce something that's totally misaligned from

653
00:37:47,599 --> 00:37:51,679
you because it doesn't understand what you think is important and so grill me is not

654
00:37:51,680 --> 00:37:56,799
only about implementation details it's also about establishing okay do this this is in

655
00:37:56,800 --> 00:38:01,358
scope this is not in scope here's what I think is important and so it's the agent getting

656
00:38:01,359 --> 00:38:04,639
to know you >> Matt just described the grill me skill.

657
00:38:04,640 --> 00:38:06,959
When I used this skill to design an API endpoint,

658
00:38:06,960 --> 00:38:11,118
the first questions it asked were about what the endpoint was and wasn't allowed to do

659
00:38:11,119 --> 00:38:13,358
and who it was allowed to do it for.

660
00:38:13,359 --> 00:38:16,239
Now, in my case, I had a decent idea of what I wanted,

661
00:38:16,240 --> 00:38:20,910
but it's generally a terrible idea to let an agent improvise authentication and authorization

662
00:38:20,960 --> 00:38:22,590
as they would often do.

663
00:38:22,640 --> 00:38:25,630
This brings us to our season sponsor, Work OS.

664
00:38:25,680 --> 00:38:28,029
How do you authorize AI agents?

665
00:38:28,079 --> 00:38:31,679
The problem you have is how you want to control the scope of the agent.

666
00:38:31,680 --> 00:38:34,319
The tricky part is how permissions are static,

667
00:38:34,320 --> 00:38:37,230
but the job of what the agent does is dynamic.

668
00:38:37,280 --> 00:38:39,439
So teams pick between two bad options.

669
00:38:39,440 --> 00:38:41,039
Either you read the prompt,

670
00:38:41,040 --> 00:38:45,279
then approve every tool invocation and call by hand and then read the prompt again,

671
00:38:45,280 --> 00:38:50,239
then approve by hand again until you eventually just stop reading the prompt or you just

672
00:38:50,240 --> 00:38:55,440
run in yolo mode, letting it rip and hoping that whatever the agent does is not irreversible.

673
00:38:55,599 --> 00:38:56,799
But there's a better way.

674
00:38:56,800 --> 00:39:00,639
Work just launched airlock intentbased access control for agents.

675
00:39:00,640 --> 00:39:02,319
You write the rules in plain English.

676
00:39:02,320 --> 00:39:05,279
For example, read repos and comments on PRs.

677
00:39:05,280 --> 00:39:07,838
Anything touching author billing needs sign off.

678
00:39:07,839 --> 00:39:08,879
Never push to main.

679
00:39:08,880 --> 00:39:13,039
Every call that the agent makes is judged against his task and allowed, denied,

680
00:39:13,040 --> 00:39:14,479
or sent to a human.

681
00:39:14,480 --> 00:39:16,399
Every verdict is logged by airlock.

682
00:39:16,400 --> 00:39:20,559
The neat thing about airlock is how there are no pre-ranted scopes and there's no rules

683
00:39:20,560 --> 00:39:24,319
to assign. The task itself is what defines what the agent can do.

684
00:39:24,320 --> 00:39:26,559
Work airlock is in early access.

685
00:39:26,560 --> 00:39:28,400
Request it at work.com/airlock.

686
00:39:29,440 --> 00:39:32,430
I'd also like to mention our presenting sponsor, Turbo Buffer.

687
00:39:32,480 --> 00:39:35,039
Matt and I are discussing a fundamental question.

688
00:39:35,040 --> 00:39:37,598
How do you get agents to remember what's important?

689
00:39:37,599 --> 00:39:41,679
Here's an idea. What if instead of building a complex memory system,

690
00:39:41,680 --> 00:39:44,639
you just let the agent search its entire history?

691
00:39:44,640 --> 00:39:48,959
This seems like it will be very, very expensive, but with Turbuffer, it isn't.

692
00:39:48,960 --> 00:39:53,279
Turbopuffer's object storage native architecture means that the marginal cost to source

693
00:39:53,280 --> 00:39:59,118
sessions transcript is almost nothing making it economical to index the entire chat history.

694
00:39:59,119 --> 00:40:02,479
And because Turboer namespaces scale virtually without limit,

695
00:40:02,480 --> 00:40:05,358
you can create a dedicated search index for every agent.

696
00:40:05,359 --> 00:40:06,639
Here's a good example of this.

697
00:40:06,640 --> 00:40:09,199
Entire, another season sponsor of the podcast,

698
00:40:09,200 --> 00:40:13,358
indexes hundreds of millions of agent session transcripts for search and then lets the

699
00:40:13,359 --> 00:40:17,679
coding agent retrieve what it needs to recall how and why an engineuring decision was

700
00:40:17,680 --> 00:40:21,759
made. entire showed that their agent was more accurate, used fewer tokens,

701
00:40:21,760 --> 00:40:25,519
and took less time to find memories when it used Turbo Buffer instead of git history

702
00:40:25,520 --> 00:40:29,118
and a CLI. Agent memory is a complex and evolving use case.

703
00:40:29,119 --> 00:40:31,039
But perhaps there's a bitter lesson here.

704
00:40:31,040 --> 00:40:33,598
Maybe the best solution is the simple one.

705
00:40:33,599 --> 00:40:35,439
Just search every transcript.

706
00:40:35,440 --> 00:40:38,078
With Turbopuffer, this is actually possible.

707
00:40:38,079 --> 00:40:39,838
If agent memory is something you're trying to solve,

708
00:40:39,839 --> 00:40:43,120
then please reach out to the Turboper team at turbopuffer.com/pagmatic.

709
00:40:44,240 --> 00:40:46,078
And which other skills did you create?

710
00:40:46,079 --> 00:40:52,590
So from there I thought okay how do I take that conversation and turn it into code and

711
00:40:52,640 --> 00:40:59,279
I was immediately um scared because I'd been working with models um you know just before

712
00:40:59,280 --> 00:41:05,039
they were good and before the December uh winter where you know uh things got really

713
00:41:05,040 --> 00:41:09,199
good and so I was I felt the constraints from what I'd been working with before.

714
00:41:09,200 --> 00:41:13,999
I knew that for instance the more context you put you give to the agent the worse it

715
00:41:14,000 --> 00:41:16,879
performs. I know you had Dex Horthy on this podcast.

716
00:41:16,880 --> 00:41:19,679
Yeah. And Dex um is a really big influence on me,

717
00:41:19,680 --> 00:41:21,838
especially his idea of the smart zone and the dumb zone.

718
00:41:21,839 --> 00:41:22,719
>> Smart zone and dumb zone.

719
00:41:22,720 --> 00:41:27,358
Yeah. >> Yeah. So idea of that just to kind of um so you don't have to go and listen

720
00:41:27,359 --> 00:41:29,470
to that podcast in full although you should.

721
00:41:29,520 --> 00:41:33,919
You have essentially the more context you give to the agent,

722
00:41:33,920 --> 00:41:36,590
every token is shouting for attention.

723
00:41:36,640 --> 00:41:41,679
And the more voices you put into that room, the harder it is to hear the important ones.

724
00:41:41,680 --> 00:41:46,078
And so the model starts losing the connections between things and making mistakes because

725
00:41:46,079 --> 00:41:50,350
of that. And you can think of that as a slow decline.

726
00:41:50,400 --> 00:41:55,279
But there is a portion of the context window where it's better and where it's worse.

727
00:41:55,280 --> 00:41:59,759
And so you have the smart zone which is currently I would say about the first 150,000

728
00:41:59,760 --> 00:42:03,679
tokens of frontier models >> of of a 1 million token window.

729
00:42:03,680 --> 00:42:06,078
>> Yeah. Of any any size token window of any size.

730
00:42:06,079 --> 00:42:08,239
Doesn't doesn't matter the context window size.

731
00:42:08,240 --> 00:42:10,399
It's all it's all about raw amount of tokens,

732
00:42:10,400 --> 00:42:12,078
raw amount of attention relationships,

733
00:42:12,079 --> 00:42:15,919
and then the rest of it will slowly degrade more and more and more.

734
00:42:15,920 --> 00:42:20,879
>> And so I started thinking, how do I take work that's bigger than 150k tokens,

735
00:42:20,880 --> 00:42:26,990
which is not very large, and portion it out over multiple context windows, multiple sessions.

736
00:42:27,040 --> 00:42:29,358
And this took me a a lot of tries,

737
00:42:29,359 --> 00:42:31,679
a lot of different fiddling around with different approaches.

738
00:42:31,680 --> 00:42:33,679
The Ralph loops was one version of that.

739
00:42:33,680 --> 00:42:37,358
Ralph loops are designed to make the most of the smart zone because they essentially

740
00:42:37,359 --> 00:42:42,479
just give the Ralph loop a goal and they say do the smallest possible change that will

741
00:42:42,480 --> 00:42:46,078
get us further towards that goal and then clear your context >> and then clear the context

742
00:42:46,079 --> 00:42:46,879
start from fresh.

743
00:42:46,880 --> 00:42:49,759
>> Exactly. And you're not technically starting from fresh because you've got the code

744
00:42:49,760 --> 00:42:53,919
base, right? There's a little bit of state saved in the file system and in the environment

745
00:42:53,920 --> 00:42:55,919
but not in the model essentially.

746
00:42:55,920 --> 00:42:56,799
So that's the idea.

747
00:42:56,800 --> 00:42:57,919
So I started thinking,

748
00:42:57,920 --> 00:43:02,959
how do I take that Ralph Loop idea but make it a little bit more stable and turn that

749
00:43:02,960 --> 00:43:07,519
into skills. And so what I realized I needed was two different types of documents.

750
00:43:07,520 --> 00:43:11,870
You need a document for where you're going, which is the destination document.

751
00:43:11,920 --> 00:43:16,239
>> I used to call that a product requirements document or a spec is what I call it now.

752
00:43:16,240 --> 00:43:19,598
>> So that's the specification that declares when you've reached the end.

753
00:43:19,599 --> 00:43:24,910
And then you need to break that spec down into individual tickets, one ticket per session.

754
00:43:24,960 --> 00:43:29,549
And so I have a very simple skill just to spec and then to tickets.

755
00:43:29,599 --> 00:43:33,598
And so you take that grilling session that you've had and you turn it into a spec.

756
00:43:33,599 --> 00:43:37,679
Now that spec can work over, you know, 30 40 tickets, let's say.

757
00:43:37,680 --> 00:43:42,559
You can have really massive great big chunks of work that are all tied into that spec.

758
00:43:42,560 --> 00:43:43,919
And so that's the main idea.

759
00:43:43,920 --> 00:43:46,719
You just grill. You turn that grilling into a spec.

760
00:43:46,720 --> 00:43:50,879
And then you just run some kind of implement loop over those tickets until you've got

761
00:43:50,880 --> 00:43:52,078
a huge chunk of work.

762
00:43:52,079 --> 00:43:57,039
After grilling, do you get user input as well or throughout this process or it it depends.

763
00:43:57,040 --> 00:44:02,399
>> I was mostly designing this to be run for the user like to be away from the keyboard

764
00:44:02,400 --> 00:44:06,639
totally >> because there's this idea of like the day shift and the night shift.

765
00:44:06,640 --> 00:44:07,519
Have you heard of this?

766
00:44:07,520 --> 00:44:08,879
>> No. No. No. >> It's great.

767
00:44:08,880 --> 00:44:14,719
Basically, the optimal way to work with agents is to plan during the day shift and then

768
00:44:14,720 --> 00:44:17,439
get the agents to work during the night shift, right?

769
00:44:17,440 --> 00:44:21,759
And so hopefully you wake up in the morning and you've got beautiful clean code to look

770
00:44:21,760 --> 00:44:26,399
at. And that's what I was trying to optimize my process around because I was really sick

771
00:44:26,400 --> 00:44:31,439
of what I and what I still do to an extent of just switching between terminals,

772
00:44:31,440 --> 00:44:34,559
context switching all the time, just going boom boom boom boom boom boom.

773
00:44:34,560 --> 00:44:40,318
What I wanted and what I'm trying to optimize for is to just get a good chunk of planning

774
00:44:40,319 --> 00:44:45,358
done and then let the agent work for a couple of hours and then I can do other work,

775
00:44:45,359 --> 00:44:48,479
decent chunks of time, 15-minute chunks working on one thing,

776
00:44:48,480 --> 00:44:52,239
planning on stuff and then I can review the code and do that.

777
00:44:52,240 --> 00:44:55,439
So that's what I was trying to optimize for all the time when I was doing Ralph loops

778
00:44:55,440 --> 00:44:58,799
and that was the big thing that I found in December is these guys are good enough to

779
00:44:58,800 --> 00:45:01,439
delegate to and so I can run them AFK.

780
00:45:01,440 --> 00:45:04,639
And then you have a different skill as well which is a bit more ambitious called the

781
00:45:04,640 --> 00:45:06,078
wayfinder skill.

782
00:45:06,079 --> 00:45:06,959
Can we talk about that?

783
00:45:06,960 --> 00:45:12,479
>> Absolutely. So in the exactly the same way that implementation I noticed needed to

784
00:45:12,480 --> 00:45:14,430
be split out over multiple sessions.

785
00:45:14,480 --> 00:45:18,879
Sometimes you're grilling something and you're you're hitting the limits.

786
00:45:18,880 --> 00:45:22,639
You're going to grill something you know build me a stripe clone or something right?

787
00:45:22,640 --> 00:45:23,838
You are going to hit the limits there.

788
00:45:23,839 --> 00:45:26,639
There's no way you can plan that in 150k tokens.

789
00:45:26,640 --> 00:45:27,358
And so I thought,

790
00:45:27,359 --> 00:45:34,479
how do I break that up so that I can run grilling sessions that can be infinite length,

791
00:45:34,480 --> 00:45:38,510
right? How do I split up grilling so that it can work like that?

792
00:45:38,560 --> 00:45:41,519
And so I came up with this idea again,

793
00:45:41,520 --> 00:45:45,759
I'm thinking about the flow of information essentially like what what does it need to

794
00:45:45,760 --> 00:45:47,598
perform well in a grilling session?

795
00:45:47,599 --> 00:45:51,679
It probably needs to understand exactly what it's uh what the purpose of that grilling

796
00:45:51,680 --> 00:45:55,439
session is, but it also needs to understand what's been decided so far.

797
00:45:55,440 --> 00:45:59,199
needs to understand what other grilling sessions might be happening at that moment.

798
00:45:59,200 --> 00:46:03,279
And I came up with this idea of a map.

799
00:46:03,280 --> 00:46:08,799
And the map would be the sort of center point of everything that was needed for all the

800
00:46:08,800 --> 00:46:10,318
decisions that you were coming up with.

801
00:46:10,319 --> 00:46:14,239
And once you've got a map, you realize, okay, there are certain things I can like,

802
00:46:14,240 --> 00:46:17,230
as I'm trying to find my way to a destination,

803
00:46:17,280 --> 00:46:19,519
there are certain things I know I need to decide,

804
00:46:19,520 --> 00:46:21,999
certain points that are kind of like milestones on the map.

805
00:46:22,000 --> 00:46:23,999
And there's there's a fog of war.

806
00:46:24,000 --> 00:46:27,759
And that that lovely metaphor just sort of carried me through designing the rest of the

807
00:46:27,760 --> 00:46:30,879
skill, right? Because you've got your map, you've got your fog of war,

808
00:46:30,880 --> 00:46:34,159
you vaguely know where you're going, and every time you have a grilling session,

809
00:46:34,160 --> 00:46:35,999
it opens out more points on the map.

810
00:46:36,000 --> 00:46:38,399
And so you sort of figure out where you're going.

811
00:46:38,400 --> 00:46:43,679
And so this is kind of like a directed cyclic graph where you're walking down until you

812
00:46:43,680 --> 00:46:45,230
reach your final destination.

813
00:46:45,280 --> 00:46:49,919
And so you've got the map and then each individual session in there are tickets on that

814
00:46:49,920 --> 00:46:54,559
map. And I realized, okay, grilling is good, but what if you need to prototype?

815
00:46:54,560 --> 00:46:56,159
What if you need to do research?

816
00:46:56,160 --> 00:47:00,239
What if you need to do like an arbitrary task like provision some infrastructure or something?

817
00:47:00,240 --> 00:47:03,039
Well, those are different types of tickets on the map.

818
00:47:03,040 --> 00:47:06,479
And Wayfinder basically just guides you through this process.

819
00:47:06,480 --> 00:47:09,118
I've had maps that have, you know, 50,

820
00:47:09,119 --> 00:47:12,110
100 tickets or something until I finally reach my destination.

821
00:47:12,160 --> 00:47:16,078
I've actually been using it for course planning as well, so non-technical stuff,

822
00:47:16,079 --> 00:47:16,959
which is really great.

823
00:47:16,960 --> 00:47:19,759
I've been using it to build a garden office in my garden.

824
00:47:19,760 --> 00:47:24,559
Right. It's it's it you know a lot of these skills we we say okay these are great for

825
00:47:24,560 --> 00:47:29,759
engineering then you realize okay engineering is just a discipline that what are we doing

826
00:47:29,760 --> 00:47:34,959
here we're just discussing something we're doing things in real life like clicking around

827
00:47:34,960 --> 00:47:40,959
websites and stuff you realize how easily that can map onto other domains so that's kind

828
00:47:40,960 --> 00:47:45,679
of maybe we can touch on that a bit later which is I am thinking how transposable this

829
00:47:45,680 --> 00:47:50,159
stuff is into different disciplines and into different areas of life So Wayfinder has

830
00:47:50,160 --> 00:47:51,358
been great. >> Yeah.

831
00:47:51,359 --> 00:47:54,879
But if if if we think one interesting thing about engineering and software engineering

832
00:47:54,880 --> 00:47:56,879
when Hill Wayne was on the podcast,

833
00:47:56,880 --> 00:48:01,598
he interviewed engineers uh like who he thought are real engineers,

834
00:48:01,599 --> 00:48:03,199
chemical engineers, mechanical engineers,

835
00:48:03,200 --> 00:48:06,399
civil engineers and to try to find out is software engineering real engineering.

836
00:48:06,400 --> 00:48:09,870
And in in the end he found that it probably is.

837
00:48:09,920 --> 00:48:13,598
But he said that one interesting thing with software that is very different to every

838
00:48:13,599 --> 00:48:18,078
other engineering profession is the materials that we work with in every single place.

839
00:48:18,079 --> 00:48:20,959
mechanical engineering, civil engineering, even chemical engineering,

840
00:48:20,960 --> 00:48:24,318
you have a material that has a threshold of of things.

841
00:48:24,319 --> 00:48:25,759
You don't know exactly what it's like.

842
00:48:25,760 --> 00:48:28,959
You know that it'll be like it can take about this much load, etc.

843
00:48:28,960 --> 00:48:34,318
But in software, the material is software, which is it it just works like a program.

844
00:48:34,319 --> 00:48:36,350
I mean, take out nondeterministic,

845
00:48:36,400 --> 00:48:41,519
which which maybe brings us to to more engineering, but software, a code,

846
00:48:41,520 --> 00:48:44,879
you run it a thousand times and it does the same thing a thousand times,

847
00:48:44,880 --> 00:48:47,199
whereas in other fields it doesn't.

848
00:48:47,200 --> 00:48:49,519
And he said that that he sees a big difference.

849
00:48:49,520 --> 00:48:53,679
But now I guess with LLMs maybe we have this thing where we have a thing where you run

850
00:48:53,680 --> 00:48:57,519
it a thousand times and it it will have these this variance that most of engineering

851
00:48:57,520 --> 00:49:03,118
has. So who knows if if both what works with LMS will be useful at other engineering

852
00:49:03,119 --> 00:49:07,838
where again they already had this virance or or we can take some approaches from other

853
00:49:07,839 --> 00:49:12,639
engineering professions that will maybe work nicely with working with this material called

854
00:49:12,640 --> 00:49:14,590
AI. >> I totally agree.

855
00:49:14,640 --> 00:49:19,358
What I think is interesting about software engineering and the way the reason agents

856
00:49:19,359 --> 00:49:25,519
are good with it is it's all of the inputs and all of the outputs are text based everything.

857
00:49:25,520 --> 00:49:31,838
So the inputs code documentation instructions for the agent on what to do all text based

858
00:49:31,839 --> 00:49:38,558
and the output is more code is um test suites is type checking results linting all that

859
00:49:38,559 --> 00:49:39,759
stuff is textbased.

860
00:49:39,760 --> 00:49:43,630
The thing that agents really struggle with is anything that's [clears throat] non-extbased.

861
00:49:43,680 --> 00:49:44,318
But you, you know,

862
00:49:44,319 --> 00:49:48,959
you see these amazing demos of people oneshotting a perfect UI first time.

863
00:49:48,960 --> 00:49:51,838
Well, what about if you have an interaction problem in that UI?

864
00:49:51,839 --> 00:49:55,118
What if you're like hovering over something and the animation doesn't look right?

865
00:49:55,119 --> 00:49:57,039
How are you going to get that to the agent?

866
00:49:57,040 --> 00:49:59,519
I mean, you can record it a video, I suppose,

867
00:49:59,520 --> 00:50:02,239
and it sort of pauses on certain frames, let's say.

868
00:50:02,240 --> 00:50:05,679
Um, but it's actually not that good in terms of vision just yet.

869
00:50:05,680 --> 00:50:08,480
And so anything that's non-extbased

870
00:50:08,800 --> 00:50:10,959
is just garbage from the agent.

871
00:50:10,960 --> 00:50:12,558
It just can't handle it.

872
00:50:12,559 --> 00:50:16,670
And so I think in those sorts of professions,

873
00:50:16,720 --> 00:50:19,919
if you can turn I assume they're doing simulations, right?

874
00:50:19,920 --> 00:50:22,159
I assume they're doing some kind of, you know,

875
00:50:22,160 --> 00:50:25,279
I don't know if you have like a llinter that can work on architectural diagram.

876
00:50:25,280 --> 00:50:27,439
I'm sure you have some variety of that, right?

877
00:50:27,440 --> 00:50:28,558
Some simulation.

878
00:50:28,559 --> 00:50:30,399
If you can make that textbased,

879
00:50:30,400 --> 00:50:33,598
if you can take the interactions that you have in your day-to-day life and turn them

880
00:50:33,599 --> 00:50:36,159
into text, which mostly they are anyway,

881
00:50:36,160 --> 00:50:37,999
then the agents are going to do a pretty good job.

882
00:50:38,000 --> 00:50:42,799
That's something I'm trying to do currently is take all of the services that I use and

883
00:50:42,800 --> 00:50:44,078
plug them into agents, right?

884
00:50:44,079 --> 00:50:45,759
Make them available to the agents.

885
00:50:45,760 --> 00:50:49,598
But yeah, the more we can make our work agent friendly,

886
00:50:49,599 --> 00:50:51,039
the better results we're going to get.

887
00:50:51,040 --> 00:50:57,519
Circling back to to AI as as a whole and then what has changed like it has changed so

888
00:50:57,520 --> 00:51:03,838
many things but one thing that comes up with AI is is often especially researchers and

889
00:51:03,839 --> 00:51:07,598
and people working in AI companies is is no prior with AI you should let go of everything

890
00:51:07,599 --> 00:51:11,919
that we know before because this thing is different start from scratch the approaches

891
00:51:11,920 --> 00:51:15,838
might not work in fact let's assume they don't work and come up with new approaches having

892
00:51:15,839 --> 00:51:20,719
been a developer before AI and actually like you're like a like you you were really interested

893
00:51:20,720 --> 00:51:23,120
in building quality great software.

894
00:51:23,280 --> 00:51:28,750
How much do you think AI has changed of of everything including the fundamentals?

895
00:51:28,800 --> 00:51:31,679
This is something that I thought too.

896
00:51:31,680 --> 00:51:35,439
I thought, right, AI has changed everything.

897
00:51:35,440 --> 00:51:38,959
I'm going to throw the baby out with a bath water, right?

898
00:51:38,960 --> 00:51:41,838
I think we just need to look at everything in a new way.

899
00:51:41,839 --> 00:51:45,999
I started doing that a I was especially looking at like spec driven development you know

900
00:51:46,000 --> 00:51:51,118
which is I have sort of mixed feelings towards I think it's a strange term it encompasses

901
00:51:51,119 --> 00:51:56,318
too much and I thought okay right maybe English is the hot new programming language right

902
00:51:56,319 --> 00:52:01,519
>> which which went viral at at some point when under posted it >> exactly like maybe

903
00:52:01,520 --> 00:52:05,759
I can just write a spec and that specification is going to be persistent it's going to

904
00:52:05,760 --> 00:52:10,078
be something I can edit and just get the agent to change it as it goes and as I experimented

905
00:52:10,079 --> 00:52:14,719
with it I tried it a lot and I was just getting worse results than if id coded it by

906
00:52:14,720 --> 00:52:17,118
hand. And it wasn't getting better as well.

907
00:52:17,119 --> 00:52:22,239
And I noticed that every time I would sort of run this loop of change the spec,

908
00:52:22,240 --> 00:52:24,959
see the code change, the code would get worse.

909
00:52:24,960 --> 00:52:26,479
You're not supposed to look at the code, of course,

910
00:52:26,480 --> 00:52:28,799
but I I looked at the code and it was garbage.

911
00:52:28,800 --> 00:52:31,118
And I thought, how is the agent going to perform well in here?

912
00:52:31,119 --> 00:52:32,479
How is it going to work?

913
00:52:32,480 --> 00:52:35,279
Because the feedback loops are so important to the agent.

914
00:52:35,280 --> 00:52:39,358
If you have a bad test suite, the agent is going to get bad signal from it,

915
00:52:39,359 --> 00:52:40,479
just like a human would.

916
00:52:40,480 --> 00:52:42,399
And I thought, how do I improve the test suite?

917
00:52:42,400 --> 00:52:47,919
How do I get this setup not not like churning out garbage every time?

918
00:52:47,920 --> 00:52:52,879
And I just I opened a book that I had on my shelf that I I think was still wrapped in

919
00:52:52,880 --> 00:52:56,639
plastic the first time I took it out, which was the pragmatic programmer.

920
00:52:56,640 --> 00:52:59,838
Um, [laughter] which is everyone told me to read it.

921
00:52:59,839 --> 00:53:02,879
Everyone like, you know, everyone said, you know, this is the best book ever.

922
00:53:02,880 --> 00:53:05,679
You just got to and I bought it and I didn't read it for some reason.

923
00:53:05,680 --> 00:53:09,759
And I opened it and it had a whole chapter, whole section on software entropy.

924
00:53:09,760 --> 00:53:13,759
And software entropy is the concept that you know entropy is the idea that things go

925
00:53:13,760 --> 00:53:15,199
towards a more disordered state.

926
00:53:15,200 --> 00:53:17,999
That that is more likely than them going into an ordered state.

927
00:53:18,000 --> 00:53:21,039
And I realized okay software entropy is inevitable.

928
00:53:21,040 --> 00:53:25,118
What I'm seeing here is that agents are producing software entropy at a higher rates

929
00:53:25,119 --> 00:53:27,598
than ever. And I started looking more into that book.

930
00:53:27,599 --> 00:53:31,919
And almost every line I read I thought wow this feels like it was written for today.

931
00:53:31,920 --> 00:53:33,519
You know you should go back to that book.

932
00:53:33,520 --> 00:53:35,679
these ideas of like don't outrun your headlights,

933
00:53:35,680 --> 00:53:40,509
always work within your feedback loops, programming by coincidence, traceabits,

934
00:53:40,559 --> 00:53:42,830
so many smart ideas.

935
00:53:42,880 --> 00:53:45,838
And I realized this book has been out for 25 years, right?

936
00:53:45,839 --> 00:53:47,598
This is probably in the agents prior.

937
00:53:47,599 --> 00:53:49,919
Maybe if I just mention some of these concepts,

938
00:53:49,920 --> 00:53:53,118
especially the ones that are really pathy, like tracer bullets for instance,

939
00:53:53,119 --> 00:53:57,838
which is the idea that you should always get feedback really quickly on the work that

940
00:53:57,839 --> 00:54:02,479
you're doing. I guess the idea of the tracer bullet is right you like like a tracer bullet

941
00:54:02,480 --> 00:54:08,558
that leaves a a mark you you implement a path that works like like an important piece

942
00:54:08,559 --> 00:54:11,919
of a software instead of like building a database layer and the application layer and

943
00:54:11,920 --> 00:54:15,759
the I don't know whatever layer like building all three and then putting them together

944
00:54:15,760 --> 00:54:19,679
like just build one part of each but they should work together that was the problem I

945
00:54:19,680 --> 00:54:22,719
was seeing with agents they would you would get it to build a piece of software even

946
00:54:22,720 --> 00:54:27,118
with Ralph loops and you would it would build the entire database and then it would build

947
00:54:27,119 --> 00:54:29,039
the entire application layer on top of that.

948
00:54:29,040 --> 00:54:31,838
Then it would build the entire React component library.

949
00:54:31,839 --> 00:54:35,279
Only at the end would it start actually plugging things together and getting feedback

950
00:54:35,280 --> 00:54:36,558
on what it was doing.

951
00:54:36,559 --> 00:54:41,598
And it was maddening because things in the database like will affect what you show on

952
00:54:41,599 --> 00:54:42,558
the front end. You know,

953
00:54:42,559 --> 00:54:46,719
you only really know whether things are actually making sense when you see it crossing

954
00:54:46,720 --> 00:54:48,078
those integration layers.

955
00:54:48,079 --> 00:54:50,479
And so another concept is vertical slices, right?

956
00:54:50,480 --> 00:54:53,838
instead of these horizontal slices across these different deployable units,

957
00:54:53,839 --> 00:54:57,679
you have a vertical slice where it gets feedback on what it's doing straight away and

958
00:54:57,680 --> 00:54:58,639
builds out from there.

959
00:54:58,640 --> 00:55:04,159
And so I just started using these phrases in my prompts when I was talking to the agent

960
00:55:04,160 --> 00:55:08,078
and I started noticing that it was saying those phrases back to me.

961
00:55:08,079 --> 00:55:09,759
It was repeating them back to me.

962
00:55:09,760 --> 00:55:14,399
It was saying, "Okay, I'll turn this into a tracer bullet because this is a trace bullet.

963
00:55:14,400 --> 00:55:19,199
I'll do this." It was using the words that I was using in its own reasoning traces.

964
00:55:19,200 --> 00:55:22,959
And so this is what I call a leading word, a lightvert, let's say,

965
00:55:22,960 --> 00:55:28,399
which is a sort of fancy literary term where you lead the agent just with a simple phrase

966
00:55:28,400 --> 00:55:33,519
that you repeat a couple of times in the skill or the prompt to change its behavior.

967
00:55:33,520 --> 00:55:35,838
And so traceabits was a fantastic one.

968
00:55:35,839 --> 00:55:38,078
And I just started diving into different books,

969
00:55:38,079 --> 00:55:41,598
all the books I could find to try to mine them for leading words.

970
00:55:41,599 --> 00:55:45,598
And another one was John Asterout's book philosophy of software design where I picked

971
00:55:45,599 --> 00:55:49,919
up tons of great stuff like deep modules is which is a massive one for me.

972
00:55:49,920 --> 00:55:54,479
It's interesting to consider if these agents have obviously been trained on those books

973
00:55:54,480 --> 00:55:57,919
just still available for for print and of course there's arguments of like what they're

974
00:55:57,920 --> 00:56:04,078
doing with those books what not but if it's in their training data and and and the agents

975
00:56:04,079 --> 00:56:08,959
as they're trained they connect all these different concepts and yeah the these I guess

976
00:56:08,960 --> 00:56:14,318
how do you leading words could invoke those concepts and I wonder how if this is much

977
00:56:14,319 --> 00:56:18,798
different to when on a topic you talk with a professional and you're trying to describe

978
00:56:18,799 --> 00:56:22,879
as an amateur what you want and a professional says a word that does that and a fellow

979
00:56:22,880 --> 00:56:27,999
professional gets it and you this is jargon right and and jargon on one end it's it's

980
00:56:28,000 --> 00:56:31,759
not very inviting when when you join a company and there's jargon but it just we use

981
00:56:31,760 --> 00:56:36,639
it because it makes things faster easier fewer misunderstandings definitely that was

982
00:56:36,640 --> 00:56:41,679
something that idea led me to because obviously you've got these leading words that are

983
00:56:41,680 --> 00:56:46,078
in the agents prior right like trace bullets all that stuff what about describing my

984
00:56:46,079 --> 00:56:52,159
application what about describing my code how do I get the agent to because what I the

985
00:56:52,160 --> 00:56:55,279
agents are just awfully verbose, right?

986
00:56:55,280 --> 00:56:56,318
Especially Opus 5,

987
00:56:56,319 --> 00:57:00,318
for some reason that people really go after that model for being verbose and it really

988
00:57:00,319 --> 00:57:03,279
is. And I thought, how do I get it to be less verbose?

989
00:57:03,280 --> 00:57:07,279
How do we start talking a common language between me and the agent,

990
00:57:07,280 --> 00:57:10,879
this communication barrier again, and it led me to DDD, domain driven,

991
00:57:10,880 --> 00:57:12,479
>> domain different design.

992
00:57:12,480 --> 00:57:15,999
Eric Evans incredible book where he talks about ubiquitous language.

993
00:57:16,000 --> 00:57:18,558
A language again really deep in the agent's prize.

994
00:57:18,559 --> 00:57:20,078
It understands it really well.

995
00:57:20,079 --> 00:57:25,118
I sort of started toying with the idea of maybe changing grill mate a little bit because

996
00:57:25,119 --> 00:57:27,039
grill me is very simple skill.

997
00:57:27,040 --> 00:57:31,759
But what if we while we were ideulating while we were thinking about the application

998
00:57:31,760 --> 00:57:35,519
we were going to build what if we were also building a domain language?

999
00:57:35,520 --> 00:57:39,150
What if we were also deciding on the right terms to use?

1000
00:57:39,200 --> 00:57:43,598
And this turned into a skill called grill with docs which is terribly named skill but

1001
00:57:43,599 --> 00:57:47,279
it's essentially creates this domain language as you go.

1002
00:57:47,280 --> 00:57:52,879
And if you get the agent to use the domain language the difference is night and day because

1003
00:57:52,880 --> 00:57:54,399
suddenly you're speaking the same language.

1004
00:57:54,400 --> 00:57:58,879
You're able to describe your the things you want to change in so many fewer words.

1005
00:57:58,880 --> 00:58:01,439
Like I had this app that I sort of work on.

1006
00:58:01,440 --> 00:58:05,279
There's this complicated interaction where there are ghost lessons and real lessons.

1007
00:58:05,280 --> 00:58:10,159
And what happens when you turn a ghost lesson that's inside a ghost section inside a

1008
00:58:10,160 --> 00:58:12,399
ghost course into a real lesson?

1009
00:58:12,400 --> 00:58:15,118
That means the ghost section needs to become real.

1010
00:58:15,119 --> 00:58:17,118
The ghost course needs to become real.

1011
00:58:17,119 --> 00:58:18,159
How do you explain that?

1012
00:58:18,160 --> 00:58:20,719
Well, that's the materialization cascade, right?

1013
00:58:20,720 --> 00:58:23,598
>> And you came up with these terms >> with the agent, right?

1014
00:58:23,599 --> 00:58:25,999
The agent is actually really good at coming up with these terms.

1015
00:58:26,000 --> 00:58:28,479
And so I have a domain modeling skill.

1016
00:58:28,480 --> 00:58:31,598
And we talk about jargon, but really it's domain language.

1017
00:58:31,599 --> 00:58:35,598
And if you can integrate that and integrate that not only with the way you talk about

1018
00:58:35,599 --> 00:58:40,959
the app but the app code itself then you've got a stew going right like it's very very

1019
00:58:40,960 --> 00:58:44,719
exciting and it means that the agent can navigate your codebase a lot easier.

1020
00:58:44,720 --> 00:58:48,798
It can find the functions that mention that specific domain terminology you know just

1021
00:58:48,799 --> 00:58:49,999
with a simple GP.

1022
00:58:50,000 --> 00:58:50,798
It's just gorgeous.

1023
00:58:50,799 --> 00:58:55,358
So that's that's something I've been really integrating with every part of my setup is

1024
00:58:55,359 --> 00:59:00,879
DDD. But this is so interesting because in an effort to make these agents work more efficiently

1025
00:59:00,880 --> 00:59:06,558
or do workflows that just mean that you can produce better software with fewer mistakes

1026
00:59:06,559 --> 00:59:09,519
and and these things, you start to go back in time,

1027
00:59:09,520 --> 00:59:15,439
found this book that is now I think what is it like 20, 30, 40 years old.

1028
00:59:15,440 --> 00:59:18,959
Uh and and you you're even still going back and finding gems from us.

1029
00:59:18,960 --> 00:59:21,199
I'm sure at some point you'll get to mythical man month.

1030
00:59:21,200 --> 00:59:22,318
>> Yeah, I've got it already.

1031
00:59:22,319 --> 00:59:25,759
Absolutely. which which is now more than 50 years [laughter] and you're trying to find

1032
00:59:25,760 --> 00:59:30,719
the right words to describe things which is very curious because when I talk with Kent

1033
00:59:30,720 --> 00:59:35,759
back on how they used to program with Ward Cunningham uh as they were coming up with

1034
00:59:35,760 --> 00:59:41,439
the concept of actually just domain design patterns they had aaris with them and they

1035
00:59:41,440 --> 00:59:45,759
would look through trying to find the right word that is that has the right meaning and

1036
00:59:45,760 --> 00:59:50,318
they had it on their desk right now this feels we're going back to the the fundamentals

1037
00:59:50,319 --> 00:59:54,399
the how that that people have been asking themselves and and every now and then people

1038
00:59:54,400 --> 00:59:58,639
write it in books and it kind of spreads as as wisdom and now we're back to where we

1039
00:59:58,640 --> 01:00:03,679
started which is what you're trying to teach is the wisdom part it's wild right like

1040
01:00:03,680 --> 01:00:10,879
because AI is so different to humans you need to optimize it imagine you

1041
01:00:10,880 --> 01:00:15,838
essentially had a human who wakes up every morning and cannot remember who they are right

1042
01:00:15,839 --> 01:00:19,519
the guy from Momento you know this [clears throat] is momentodriven development right

1043
01:00:19,520 --> 01:00:23,039
we are trying to optimize our code bases for new starters So,

1044
01:00:23,040 --> 01:00:28,558
we're trying to have the most healthy code base that we've ever had because if you a

1045
01:00:28,559 --> 01:00:32,318
human can work around a bad codebase, they just develop memory.

1046
01:00:32,319 --> 01:00:35,598
They just slam their head against the wall again and again and again until they've got

1047
01:00:35,599 --> 01:00:38,719
there. But an agent can't do that.

1048
01:00:38,720 --> 01:00:40,879
It starts fresh every single session.

1049
01:00:40,880 --> 01:00:44,078
And so, you need to optimize your codebase for that person.

1050
01:00:44,079 --> 01:00:46,959
That leads you down into really interesting paths.

1051
01:00:46,960 --> 01:00:50,318
And it turns out that software fundamentals have been saying we've been trying trying

1052
01:00:50,319 --> 01:00:52,639
to do that for the entire time, right?

1053
01:00:52,640 --> 01:00:56,159
I am fully like I don't know Eric Evans pled.

1054
01:00:56,160 --> 01:00:58,719
I'm fully like software fundamentals build.

1055
01:00:58,720 --> 01:01:03,118
We are sort of changing the rules a little bit but maybe we're just emphasizing rules

1056
01:01:03,119 --> 01:01:06,830
that we knew we were supposed to do but maybe we didn't.

1057
01:01:06,880 --> 01:01:10,269
And I find that really fascinating and it's definitely a lot of fun.

1058
01:01:10,319 --> 01:01:15,519
Now okay like I think it's easy enough to follow with this train of thought why fundamentals

1059
01:01:15,520 --> 01:01:19,838
matter but which fundamentals and if I'm an engineer especially maybe someone who has

1060
01:01:19,839 --> 01:01:23,360
been just kind of like heads down coding more technical coding

1061
01:01:23,680 --> 01:01:28,399
how do I go about and find those fundamentals that matter and and go back to what have

1062
01:01:28,400 --> 01:01:34,350
you found work this is really tough question right it's really tough because strategic

1063
01:01:34,400 --> 01:01:38,639
programming has always been really hard to learn the reason for that is that the feedback

1064
01:01:38,640 --> 01:01:40,479
loop on it is really long.

1065
01:01:40,480 --> 01:01:45,470
You would often find like people who uh quit their jobs after 6 months,

1066
01:01:45,520 --> 01:01:48,318
their strategic mistakes never catch up with them, right?

1067
01:01:48,319 --> 01:01:51,439
Maybe that strategic mistake takes nine months to come back at you.

1068
01:01:51,440 --> 01:01:55,358
I think of strategic learning strategic programming is kind of like you've got a huge

1069
01:01:55,359 --> 01:01:58,430
mixing desk in front of you with loads of these different sliders.

1070
01:01:58,480 --> 01:02:02,239
Maybe one of those sliders is like the amount of deployable units that you have.

1071
01:02:02,240 --> 01:02:04,798
You turn it up, you've got more microservices, right?

1072
01:02:04,799 --> 01:02:06,558
You turn it down, you've got a monolith.

1073
01:02:06,559 --> 01:02:07,759
How do you make that decision?

1074
01:02:07,760 --> 01:02:09,309
Where do you put that slider?

1075
01:02:09,359 --> 01:02:11,358
because it's kind of like you're mastering something.

1076
01:02:11,359 --> 01:02:16,078
You're mixing some music, but you can't hear what's wrong until 9 months later, right?

1077
01:02:16,079 --> 01:02:17,999
Until the mistakes come and get you.

1078
01:02:18,000 --> 01:02:23,439
So, I think the only thing that can make that feedback loop faster is moving faster.

1079
01:02:23,440 --> 01:02:25,358
AI now lets you move faster, right?

1080
01:02:25,359 --> 01:02:28,318
And so, your strategic mistakes will come back at you quicker.

1081
01:02:28,319 --> 01:02:32,318
They will come back at you quicker because AI is just able to produce so much code.

1082
01:02:32,319 --> 01:02:37,118
And so, what you need to be thinking about is that your code is the environment the agent

1083
01:02:37,119 --> 01:02:40,959
operates in. And you should always be thinking about improving that environment,

1084
01:02:40,960 --> 01:02:42,798
thinking about how to do it better.

1085
01:02:42,799 --> 01:02:45,838
And obviously that requires a bit of tactical knowledge, right?

1086
01:02:45,839 --> 01:02:49,759
You need to understand what code is and how it fits together and what the memory constraints

1087
01:02:49,760 --> 01:02:50,959
are and all that stuff.

1088
01:02:50,960 --> 01:02:53,999
But in order to get better at strategic programming,

1089
01:02:54,000 --> 01:02:55,919
you just need to be thinking on that level all the time.

1090
01:02:55,920 --> 01:03:00,239
And I would say reading these books as well because just having the language to explain

1091
01:03:00,240 --> 01:03:06,159
that and understanding the difference between applying strategic techniques and not uh

1092
01:03:06,160 --> 01:03:07,439
is the whole game.

1093
01:03:07,440 --> 01:03:14,318
I mean up to you know preai for senior developers or st senior engineers staff engineers

1094
01:03:14,319 --> 01:03:19,038
they were the people who often you didn't see a senior engineer under five years of experience

1095
01:03:19,039 --> 01:03:22,639
because you typically need it even in a fast-paced environment you needed that much time

1096
01:03:22,640 --> 01:03:27,358
to get the feedback loops to make the mistakes make your own mistakes and by the time

1097
01:03:27,359 --> 01:03:31,679
people got to staff engineer oftent times around 10 plus years of experience some people

1098
01:03:31,680 --> 01:03:36,078
did it earlier but they often just had paddle skulls all all over them and they would

1099
01:03:36,079 --> 01:03:37,439
you know someone start a new project,

1100
01:03:37,440 --> 01:03:41,439
they would go in and they would just make a tweak and it wouldn't be clear why and they

1101
01:03:41,440 --> 01:03:43,199
were like, "Trust me on this.

1102
01:03:43,200 --> 01:03:47,870
We we're avoiding disaster in production or on call or or or whatnot."

1103
01:03:47,920 --> 01:03:50,749
But all of this came through lived experience.

1104
01:03:50,799 --> 01:03:52,558
Now AI speeds things up.

1105
01:03:52,559 --> 01:03:56,078
It it also makes it easier to fix mistakes.

1106
01:03:56,079 --> 01:03:57,919
So I'm I'm wondering how this might change.

1107
01:03:57,920 --> 01:04:01,439
Like on one end, I can see how it it could just speed up experience.

1108
01:04:01,440 --> 01:04:06,479
like you can in a year some people some teams will ship more project than they have in

1109
01:04:06,480 --> 01:04:09,838
four years or about the same as in let's say three or four years before so you get a

1110
01:04:09,839 --> 01:04:14,239
lot more experience but I wonder if sometimes the mistakes that you make are just not

1111
01:04:14,240 --> 01:04:18,399
as serious because you can fix them quickly and now I wonder if the learning is not as

1112
01:04:18,400 --> 01:04:22,239
strong because again like some of the these battle scars these war stories are it was

1113
01:04:22,240 --> 01:04:26,749
just really bad outage we lost a lot of money because we didn't have an item potentia

1114
01:04:26,799 --> 01:04:31,358
now of course now you know what item potency is it's not an easy concept but it's important

1115
01:04:31,359 --> 01:04:33,358
if you've been hurt by it and so on.

1116
01:04:33,359 --> 01:04:40,160
>> If you're a company right now and you want to train the next junior developer like

1117
01:04:40,319 --> 01:04:47,038
because this strategic programming knowledge is so valuable now because you can use it

1118
01:04:47,039 --> 01:04:48,830
at such higher leverage.

1119
01:04:48,880 --> 01:04:51,358
Are you really going to employ someone without it?

1120
01:04:51,359 --> 01:04:52,558
Like why would you?

1121
01:04:52,559 --> 01:04:57,439
Like I was asking I did an interview with Uncle Bob the other day and his recommendation

1122
01:04:57,440 --> 01:05:01,358
was okay you just hire someone and you treat them as an agent for a [laughter] while.

1123
01:05:01,359 --> 01:05:02,399
You just delegate to them.

1124
01:05:02,400 --> 01:05:05,838
You keep them in that tactical mindset for a while until their mistakes start coming

1125
01:05:05,839 --> 01:05:11,199
up at you. But that's such a enormous waste of money for people right like when software

1126
01:05:11,200 --> 01:05:15,630
engineering when the tactical stuff has gone below minimum wage in a lot of countries.

1127
01:05:15,680 --> 01:05:18,719
So I don't know is is the answer.

1128
01:05:18,720 --> 01:05:23,118
I only know that the strategic stuff, the understanding of the code,

1129
01:05:23,119 --> 01:05:28,879
the understanding of the long view has gotten more valuable than it's ever been, right?

1130
01:05:28,880 --> 01:05:31,598
Because you can just get so much leverage out of it.

1131
01:05:31,599 --> 01:05:35,598
>> I asked about about interesting things they'd like to know from you and this is very

1132
01:05:35,599 --> 01:05:36,479
related to this.

1133
01:05:36,480 --> 01:05:40,479
This person asked like how do you convince non-engineering stakeholders that investing

1134
01:05:40,480 --> 01:05:44,399
in software fundamentals are important even if they might reduce the speed and productivity

1135
01:05:44,400 --> 01:05:49,038
on paper. I think I think the question here is if some people advocate like look we do

1136
01:05:49,039 --> 01:05:53,279
want to get the fundamentals right which means we want to take it a bit slower think

1137
01:05:53,280 --> 01:05:57,439
about their decisions maybe educate ourselves as well as opposed to just like turnurning

1138
01:05:57,440 --> 01:06:01,838
it out >> I mean you could have asked the same question 10 years ago right and like it

1139
01:06:01,839 --> 01:06:05,598
would have still been relevant you know what I mean >> except we sort of thought of elements

1140
01:06:05,599 --> 01:06:09,759
we would have asked about like paying off tech depth >> exactly and it's it's the same

1141
01:06:09,760 --> 01:06:13,199
thing right like we have been having the same conversation which is quite satisfying

1142
01:06:13,200 --> 01:06:17,118
to me because I mean you need some sort metric for like figuring this out.

1143
01:06:17,119 --> 01:06:22,639
And it's a little easier to figure this out because agents allow you to move faster.

1144
01:06:22,640 --> 01:06:27,679
And the first step to this is getting observability in your organization over every single

1145
01:06:27,680 --> 01:06:30,558
agent on what it's doing and what it success and failure rate is.

1146
01:06:30,559 --> 01:06:34,399
Y >> we've never been able to have that with like developers before.

1147
01:06:34,400 --> 01:06:36,318
You know, that's kind of invasive for developers.

1148
01:06:36,319 --> 01:06:39,439
>> Yeah. But for agents, it's like it should it's okay.

1149
01:06:39,440 --> 01:06:40,159
>> It's okay, right?

1150
01:06:40,160 --> 01:06:41,519
We are paying for this service, right?

1151
01:06:41,520 --> 01:06:43,999
We need to understand how well we're optimizing for it.

1152
01:06:44,000 --> 01:06:48,719
The first step there is actually getting a harness or observability around your agent,

1153
01:06:48,720 --> 01:06:51,838
the entire organization to work out what's working and not.

1154
01:06:51,839 --> 01:06:55,759
And you probably need someone whose whose job it is or part of their job is to look at

1155
01:06:55,760 --> 01:06:57,919
that data and figure out what we're doing.

1156
01:06:57,920 --> 01:07:01,519
Maybe some repos in your organization have better success rates than others.

1157
01:07:01,520 --> 01:07:05,759
And so you take the the lessons that are in there and you pass them out.

1158
01:07:05,760 --> 01:07:10,239
I also think that most organizations need to gather around a common set of skills.

1159
01:07:10,240 --> 01:07:14,798
You need a common software workflow process so that everyone can contribute back to it

1160
01:07:14,799 --> 01:07:16,399
so that you can experiment with things.

1161
01:07:16,400 --> 01:07:18,078
You can AB test things.

1162
01:07:18,079 --> 01:07:21,439
You know, you can have one team doing one set of stuff and one team doing another set

1163
01:07:21,440 --> 01:07:23,950
of stuff and then you ask them afterwards.

1164
01:07:24,000 --> 01:07:29,439
And so everyone working with agents in any kind of organization needs this experimental

1165
01:07:29,440 --> 01:07:34,078
mindset. You need to be thinking how do we get more juice out of these tokens that we're

1166
01:07:34,079 --> 01:07:37,358
spending and observability is the first step there.

1167
01:07:37,359 --> 01:07:41,199
>> Yeah. And I also wonder if there's a human feedback loop in the sense that I mean

1168
01:07:41,200 --> 01:07:47,199
just talk to your colleagues like on on like you know we we we we do have rituals team

1169
01:07:47,200 --> 01:07:52,078
meetings companywide meetings for a reason like there share here's what's working for

1170
01:07:52,079 --> 01:07:56,558
me here's where it didn't work here's what I'm learning like in in the end we are in

1171
01:07:56,559 --> 01:08:01,199
charge of setting up the rules deciding how we use them where we use them where we don't

1172
01:08:01,200 --> 01:08:05,759
use them and where we say like no this this needs to be humans need to take 100% like

1173
01:08:05,760 --> 01:08:08,879
we're not even getting AI involved which again will be different everywhere.

1174
01:08:08,880 --> 01:08:13,439
>> And it's not only that like a lot of this stuff now you don't need to be human in

1175
01:08:13,440 --> 01:08:14,639
the loop for, right?

1176
01:08:14,640 --> 01:08:20,030
You don't actually need to delegate that much time in order to build up a better codebase.

1177
01:08:20,080 --> 01:08:25,119
I have loops that essentially every morning it will run my improve codebase architecture

1178
01:08:25,120 --> 01:08:29,358
skill and give me a proposal for the something that I could improve in the codebase.

1179
01:08:29,359 --> 01:08:30,798
And then I can just press a button.

1180
01:08:30,799 --> 01:08:34,238
I can say okay turn that into tickets and then let's ship that.

1181
01:08:34,239 --> 01:08:38,639
that is pretty easy to do and it's pretty easy to stream that in with other work.

1182
01:08:38,640 --> 01:08:43,919
And so I think that I don't know whether you need like 20% of your time focusing on the

1183
01:08:43,920 --> 01:08:47,519
factory that builds your software as well as the software because I feel like that's

1184
01:08:47,520 --> 01:08:53,119
a massive incredible investment into your future leverage and not only your leverage

1185
01:08:53,120 --> 01:08:57,119
with your work but also your uh team's leverage and understanding and getting better

1186
01:08:57,120 --> 01:08:57,919
at those skills.

1187
01:08:57,920 --> 01:09:01,119
But of course you need results and you might need to hide that work for a bit before

1188
01:09:01,120 --> 01:09:04,559
you actually reveal it to this is what we've been doing all >> well and this this is

1189
01:09:04,560 --> 01:09:08,639
down to your environment but but yeah >> and no one's going to be mad at you if you come

1190
01:09:08,640 --> 01:09:10,879
back saying oh by the way guys I also did this.

1191
01:09:10,880 --> 01:09:11,999
>> Yeah exactly.

1192
01:09:12,000 --> 01:09:17,309
>> Uh I wanted to ask you about your specific kind of how you use tools.

1193
01:09:17,359 --> 01:09:20,158
First one is coding agents local or in the cloud.

1194
01:09:20,159 --> 01:09:24,399
And you recently posted a a pretty provocative tweet which I I'll quote you.

1195
01:09:24,400 --> 01:09:26,238
I'm moving away from my local dev setup.

1196
01:09:26,239 --> 01:09:27,278
makes zero sense to me.

1197
01:09:27,279 --> 01:09:31,789
Now, >> a lot of people ask me, how do you make your skills collaborative?

1198
01:09:31,839 --> 01:09:34,269
How do you have a collaborative grilling session?

1199
01:09:34,319 --> 01:09:39,519
And the answer to that is that you need more than just your terminal and you, right?

1200
01:09:39,520 --> 01:09:45,119
We're in a we're in a phase now where every dev has like a 100 terminals available to

1201
01:09:45,120 --> 01:09:46,879
them. And that seems crazy.

1202
01:09:46,880 --> 01:09:51,309
It feels like you need those 100 terminals available to your entire organization.

1203
01:09:51,359 --> 01:09:53,519
You need to be able to collaborate in a shared space.

1204
01:09:53,520 --> 01:09:54,879
You need to be able to ask someone,

1205
01:09:54,880 --> 01:09:58,559
tag someone in to your grilling session and say, "Okay, do this."

1206
01:09:58,560 --> 01:10:02,879
And so it makes a lot of sense for me to have a lot of those interactions in the place

1207
01:10:02,880 --> 01:10:08,189
where you already work in Slack or in Discord or in Teams, whatever, or Linear.

1208
01:10:08,239 --> 01:10:11,839
And that is really the thing that's driving me to explore this.

1209
01:10:11,840 --> 01:10:15,279
I I don't work with a team particularly, but I understand the value of that.

1210
01:10:15,280 --> 01:10:17,599
And I've been trying to build that into my flows.

1211
01:10:17,600 --> 01:10:21,678
So on the train over here, I'm in Discord chatting to my uh Hets inner box,

1212
01:10:21,679 --> 01:10:25,950
you know, building stuff for my course or fixing bugs that students are coming across.

1213
01:10:26,000 --> 01:10:31,279
So I can see less value now in just doing things locally when I have this setup that

1214
01:10:31,280 --> 01:10:34,158
I can port forward into, let's say, and you know,

1215
01:10:34,159 --> 01:10:37,198
and like see the dev server as it's making changes.

1216
01:10:37,199 --> 01:10:38,479
And I don't know,

1217
01:10:38,480 --> 01:10:43,519
I it just feels like it makes way more sense to me than having uh a very very expensive

1218
01:10:43,520 --> 01:10:44,639
laptop that can do this stuff.

1219
01:10:44,640 --> 01:10:46,238
It feels like wasted compute.

1220
01:10:46,239 --> 01:10:49,839
And especially because on that remote box, I can set up schedules.

1221
01:10:49,840 --> 01:10:51,599
I know the box is always going to be on.

1222
01:10:51,600 --> 01:10:53,999
I have like a morning standup with my agent where I get it.

1223
01:10:54,000 --> 01:10:59,439
It's it schedules my day for me and like it understands all of my Discord chats and all

1224
01:10:59,440 --> 01:11:03,359
that. Yeah, having that remote feels like it makes just so much more sense for me.

1225
01:11:03,360 --> 01:11:06,879
And the only thing I do locally now is debugging issues with the remote bot.

1226
01:11:06,880 --> 01:11:11,759
>> Yeah, I I think I wonder if there's a question of how easy is to to replicate some

1227
01:11:11,760 --> 01:11:13,839
more pretty complicated local setups in the cloud.

1228
01:11:13,840 --> 01:11:18,319
But once that becomes possible, it's probably a matter of when, not an if.

1229
01:11:18,320 --> 01:11:19,519
>> Yeah. And if anything, um,

1230
01:11:19,520 --> 01:11:22,479
people are having this similar issue with local setups, right,

1231
01:11:22,480 --> 01:11:27,919
with just a thousand Git work trees just spamming their hard drive and with how do I

1232
01:11:27,920 --> 01:11:29,599
have a work tree that, uh,

1233
01:11:29,600 --> 01:11:33,759
I've got to run like five Docker containers in order to um, get my local dev setup.

1234
01:11:33,760 --> 01:11:36,639
Well, that's often a little bit easier in the cloud because you can just provision the

1235
01:11:36,640 --> 01:11:37,759
resources that you need on demand.

1236
01:11:37,760 --> 01:11:41,999
And by the way, we're seeing that companies uh like RAMP, Stripe,

1237
01:11:42,000 --> 01:11:48,479
Uber that have platform teams that manage to take local devs full setup and put it into

1238
01:11:48,480 --> 01:11:52,158
the cloud on a cloud machine that you can now invoke with this with an at Slack or a

1239
01:11:52,159 --> 01:11:57,919
website. They're seeing people use these agents far more except for front- end work,

1240
01:11:57,920 --> 01:12:02,718
which you still want to have that feedback loop that you there are a few exceptions where

1241
01:12:02,719 --> 01:12:08,639
you really want to to have that like a local dev setup for for latency or whatnot,

1242
01:12:08,640 --> 01:12:13,839
but they're also seeing like 70 80% of of devs are just voluntarily going for the cloud.

1243
01:12:13,840 --> 01:12:14,399
>> Yeah. I mean,

1244
01:12:14,400 --> 01:12:19,198
I I think you can just tunnel through and just get the uh if it's running a dev server

1245
01:12:19,199 --> 01:12:22,079
and you just have that appearing on your local machine.

1246
01:12:22,080 --> 01:12:24,559
How is that different from having it locally, right?

1247
01:12:24,560 --> 01:12:25,279
>> Okay. >> I don't know.

1248
01:12:25,280 --> 01:12:27,039
I think I think I've not experimented with that,

1249
01:12:27,040 --> 01:12:31,279
but that's when I talked about that and said, "Oh, maybe front end is a good exception."

1250
01:12:31,280 --> 01:12:34,639
That was the immediate response that I got and it makes sense to me.

1251
01:12:34,640 --> 01:12:36,990
>> I want to ask you about planning and requirements.

1252
01:12:37,040 --> 01:12:40,718
You're a big believer in Gil me and planning and planning up front or getting the plan

1253
01:12:40,719 --> 01:12:41,999
and then having the agent work.

1254
01:12:42,000 --> 01:12:43,678
But there's a devil's advocate here.

1255
01:12:43,679 --> 01:12:45,519
Agents are so fast at implementing.

1256
01:12:45,520 --> 01:12:50,350
You could actually even have like several like few agents implement different architectures.

1257
01:12:50,400 --> 01:12:53,359
What about the approach of like well they're they're fast at implementing.

1258
01:12:53,360 --> 01:12:56,399
So I might not need to do as much upfront planning.

1259
01:12:56,400 --> 01:12:58,479
I can just course correct as I go.

1260
01:12:58,480 --> 01:13:01,279
It depends what type of work you're doing, right?

1261
01:13:01,280 --> 01:13:04,238
Because I believe that you shouldn't be using Grill Me for everything.

1262
01:13:04,239 --> 01:13:10,479
Essentially, you need grill me for um pieces of work where the actual thing being done

1263
01:13:10,480 --> 01:13:14,079
is going to be quite large and hard to row back from.

1264
01:13:14,080 --> 01:13:16,479
If you feel like, okay, this feature, maybe it's a whole new page,

1265
01:13:16,480 --> 01:13:20,030
maybe it's a a big feature, this um code,

1266
01:13:20,080 --> 01:13:22,559
you think if you if the agent gets it wrong,

1267
01:13:22,560 --> 01:13:26,238
then the wrong code is going to be in its context window influencing everything that

1268
01:13:26,239 --> 01:13:27,198
comes afterwards.

1269
01:13:27,199 --> 01:13:31,279
And actually going back and editing the stuff afterwards and doing the alignment after

1270
01:13:31,280 --> 01:13:33,279
the fact is going to be expensive.

1271
01:13:33,280 --> 01:13:34,559
Whereas for those cases,

1272
01:13:34,560 --> 01:13:38,639
it makes sense to align first to answer all of the tricky questions like your,

1273
01:13:38,640 --> 01:13:43,519
you know, your JSON cookie or whatever your uh authentication token first and then do

1274
01:13:43,520 --> 01:13:45,039
it. But for some cases,

1275
01:13:45,040 --> 01:13:49,359
like simple bug fixes or just like move this button three pixels to the left,

1276
01:13:49,360 --> 01:13:52,399
it's obvious that you don't need to align before that.

1277
01:13:52,400 --> 01:13:56,158
You can see the thing if it's just like a fiveline change or something.

1278
01:13:56,159 --> 01:13:58,030
You [clears throat] can align afterwards.

1279
01:13:58,080 --> 01:14:03,919
And so that's how I think of it is that where you can you should shift right as much

1280
01:14:03,920 --> 01:14:08,479
as possible. And actually there are actually certain features that I have a little in

1281
01:14:08,480 --> 01:14:12,399
my video editor I have a a button that I can send feedback to it.

1282
01:14:12,400 --> 01:14:17,119
And I often use this for very simple tasks where I send the feedback it goes into a GitHub

1283
01:14:17,120 --> 01:14:22,189
issue. This immediately gets picked up by an implement agent gets just worked on immediately.

1284
01:14:22,239 --> 01:14:26,959
Then a code review agent comes in and reviews the code and then I at the end I get to

1285
01:14:26,960 --> 01:14:30,959
see this actual thing being fixed and I can do my alignment then.

1286
01:14:30,960 --> 01:14:34,639
And that's worked really well for things that are very easy to specify things that I

1287
01:14:34,640 --> 01:14:35,839
don't need to grill on.

1288
01:14:35,840 --> 01:14:38,158
So that those are the choices you've got.

1289
01:14:38,159 --> 01:14:40,559
Is it a small enough thing that I can align afterwards?

1290
01:14:40,560 --> 01:14:41,759
Then don't use grill me.

1291
01:14:41,760 --> 01:14:43,599
Does it fit into a single session?

1292
01:14:43,600 --> 01:14:45,279
Then use grill me.

1293
01:14:45,280 --> 01:14:46,959
Does it span multiple sessions?

1294
01:14:46,960 --> 01:14:49,999
I need to align over the entire thing then use wayfinder.

1295
01:14:50,000 --> 01:14:54,399
interesting because this is not all that different to where some tech companies landed

1296
01:14:54,400 --> 01:14:57,678
years before which is on the PRD the product reference document.

1297
01:14:57,679 --> 01:15:00,079
If it's something trivial just just build it.

1298
01:15:00,080 --> 01:15:05,439
If it requires the the team like it's a team level scope I mean write a PRD send it out

1299
01:15:05,440 --> 01:15:11,279
to the team maybe CC some other teams but it's not a blocker and if it's something bigger

1300
01:15:11,280 --> 01:15:14,350
then it's a blocker like we need to wait for feedback.

1301
01:15:14,400 --> 01:15:18,559
Basically, the way we would say it is like, look, if it's like a one-mon project,

1302
01:15:18,560 --> 01:15:19,678
like spend two days,

1303
01:15:19,679 --> 01:15:22,879
like it's it's not a bad thing to spend like one or two days planning it because we're

1304
01:15:22,880 --> 01:15:23,919
going to save time on it.

1305
01:15:23,920 --> 01:15:26,479
But if it's a if it's a one day project, like forget about it.

1306
01:15:26,480 --> 01:15:28,479
If it's a one-year project, I mean, what are we doing?

1307
01:15:28,480 --> 01:15:30,479
Like should it should be smaller one.

1308
01:15:30,480 --> 01:15:34,238
>> Totally. And I want to like there's a bit of sort of criticism I hear just from outside

1309
01:15:34,239 --> 01:15:37,999
the room when you say that which is that doesn't this sound like waterfall what we're

1310
01:15:38,000 --> 01:15:43,519
doing when I'm talking about wayfinder and when I'm doing any kind of like uh building

1311
01:15:43,520 --> 01:15:49,519
up any kind of spec I do a lot of upfront aggressive prototyping before we get there.

1312
01:15:49,520 --> 01:15:51,599
That's something that comes up again again and again.

1313
01:15:51,600 --> 01:15:53,198
It's like this is just waterfall.

1314
01:15:53,199 --> 01:15:55,550
What are we doing going back to the 70s?

1315
01:15:55,600 --> 01:15:59,519
But agents give you this ability of just churning out slop, right?

1316
01:15:59,520 --> 01:16:03,519
And sometimes you can use that to your advantage because a prototype, right,

1317
01:16:03,520 --> 01:16:05,279
just getting a sense for what it should look like.

1318
01:16:05,280 --> 01:16:08,799
You can build out three or four different versions and just choose your favorite and

1319
01:16:08,800 --> 01:16:11,870
iterate on it and just keep churning, churning, churning.

1320
01:16:11,920 --> 01:16:16,238
That can be a really powerful setup that we've not really had before, right?

1321
01:16:16,239 --> 01:16:18,718
It was always expensive to produce prototypes.

1322
01:16:18,719 --> 01:16:20,479
Now it's the cheapest that it's ever been.

1323
01:16:20,480 --> 01:16:24,238
And that's an essential part of writing specs to me is actually producing these prototypes.

1324
01:16:24,239 --> 01:16:26,158
>> Yeah. But also like with the waterfall criticism,

1325
01:16:26,159 --> 01:16:30,879
I think Grady Buch might have told me this as well is like don't forget like like we

1326
01:16:30,880 --> 01:16:35,439
should not criticize waterfall because for example a lot of big tech the largest tech

1327
01:16:35,440 --> 01:16:40,238
companies from like Amazon, Microsoft, Google, Meta, you name it,

1328
01:16:40,239 --> 01:16:44,479
they are kind of doing mini waterfall like pre AI they've been doing pretty mini waterfall

1329
01:16:44,480 --> 01:16:48,319
which is let's do a plan let's agree on it let's build it let's ship it and this is all

1330
01:16:48,320 --> 01:16:53,599
done in like 2 weeks a month two months 3 months 3 months is kind of the extreme but

1331
01:16:53,600 --> 01:16:55,999
Crady Buch was saying the problem was never this with waterfall.

1332
01:16:56,000 --> 01:17:00,238
The problem with waterfall was the planning was literally taking like a year like one

1333
01:17:00,239 --> 01:17:05,039
year and then the implementation taking 3 years and by the time it was ready 4 years

1334
01:17:05,040 --> 01:17:06,718
later it's not what we wanted.

1335
01:17:06,719 --> 01:17:07,678
And that was the problem.

1336
01:17:07,679 --> 01:17:11,999
He was like the problem is not like having like a one or two month project or one week

1337
01:17:12,000 --> 01:17:13,678
project with a waterfall.

1338
01:17:13,679 --> 01:17:15,999
The problem was always that this we're talking years.

1339
01:17:16,000 --> 01:17:20,479
And he said that the industry has not seen waterfalls for for decades now.

1340
01:17:20,480 --> 01:17:25,119
And so here we're using this term which which is a bit like we're criticizing or many

1341
01:17:25,120 --> 01:17:26,718
waterfalls were criticized in that one.

1342
01:17:26,719 --> 01:17:29,198
It's actually that's not not a bad thing necessarily.

1343
01:17:29,199 --> 01:17:29,839
You see what I mean?

1344
01:17:29,840 --> 01:17:32,799
>> A scarecrow that we're that we're punching or something.

1345
01:17:32,800 --> 01:17:35,439
>> Yeah. It's a pinñata which which stopped existing.

1346
01:17:35,440 --> 01:17:40,559
It might exist in some crazy like enterprise projects that no one none of us know about

1347
01:17:40,560 --> 01:17:41,599
in regulated industries.

1348
01:17:41,600 --> 01:17:43,919
But I feel even there it's probably gone out of style.

1349
01:17:43,920 --> 01:17:47,919
>> Yeah. I think it's like if we're hitting the pinata I think it's actually a useful

1350
01:17:47,920 --> 01:17:49,439
thing to have up there.

1351
01:17:49,440 --> 01:17:54,079
It's like a useful uh ghost or useful uh cautionary tale, right?

1352
01:17:54,080 --> 01:17:55,280
Because

1353
01:17:55,679 --> 01:18:00,959
what which one fits the aentic setup more closely, it's going to be agile, right?

1354
01:18:00,960 --> 01:18:06,479
Because the cost of labor has gone down so much, we can just make changes very very quickly.

1355
01:18:06,480 --> 01:18:08,559
I don't know that feels like the right metaphor to me.

1356
01:18:08,560 --> 01:18:12,158
So, I don't mind hating on waterfall even though no one really does it anymore.

1357
01:18:12,159 --> 01:18:15,999
>> Well, one other thing that just it just went out of style.

1358
01:18:16,000 --> 01:18:18,399
We didn't hate it, but test-driven development, TDD.

1359
01:18:18,400 --> 01:18:21,198
What is your take on using them for agenda stuff?

1360
01:18:21,199 --> 01:18:22,238
Well, when I talked with Ken Beck,

1361
01:18:22,239 --> 01:18:25,599
we talked about how this this could be a great fit for many reasons,

1362
01:18:25,600 --> 01:18:27,999
but I still don't see people really using it.

1363
01:18:28,000 --> 01:18:29,279
I see people writing tests.

1364
01:18:29,280 --> 01:18:33,519
The agents also like write tests after the fact, which is how most people work.

1365
01:18:33,520 --> 01:18:35,599
But I think you've been an advocate for TDD, right?

1366
01:18:35,600 --> 01:18:39,439
>> Yeah. So, I have a TDD skill which I recommend using,

1367
01:18:39,440 --> 01:18:42,238
and this is this is quite timely because I have been thinking about it,

1368
01:18:42,239 --> 01:18:43,839
but I haven't really posted about it yet.

1369
01:18:43,840 --> 01:18:47,839
TDD optimizes for having a very small working memory, right?

1370
01:18:47,840 --> 01:18:51,599
You write one test and that test is supposed to fail.

1371
01:18:51,600 --> 01:18:55,198
And it means that um even if you get distracted, you go for a coffee or something,

1372
01:18:55,199 --> 01:18:58,238
you go for a long walk, when you come back, the test is still failing,

1373
01:18:58,239 --> 01:19:02,158
reminding you of where you are in the implementation and guiding you to the next thing.

1374
01:19:02,159 --> 01:19:03,678
Agents don't need that.

1375
01:19:03,679 --> 01:19:08,639
Agents, the thing that's great about agents is that they have a much larger working memory

1376
01:19:08,640 --> 01:19:10,399
than humans, right?

1377
01:19:10,400 --> 01:19:14,399
They can actually hold a lot more in their heads than than humans can currently,

1378
01:19:14,400 --> 01:19:16,109
which is very useful.

1379
01:19:16,159 --> 01:19:19,198
But um they don't have an infinite working memory.

1380
01:19:19,199 --> 01:19:24,399
And TDD it's sort of aiming at the wrong problem I think.

1381
01:19:24,400 --> 01:19:30,238
But the thing that agents really do need is that they need to have feedback loops.

1382
01:19:30,239 --> 01:19:34,799
So they need to see what they're doing and how it's interacting with the environment

1383
01:19:34,800 --> 01:19:37,759
of the code. They need to probe it all the time.

1384
01:19:37,760 --> 01:19:41,629
And having an agent that builds it builds the failure first.

1385
01:19:41,679 --> 01:19:44,510
It's also very hard for an agent to cheat that.

1386
01:19:44,560 --> 01:19:48,639
So, not only are you forcing the agent to build its own feedback loops,

1387
01:19:48,640 --> 01:19:54,639
the agent is providing proof to you that the thing is actually working as it goes and

1388
01:19:54,640 --> 01:19:58,158
even if I'm not using TDD directly where it, you know,

1389
01:19:58,159 --> 01:20:02,879
writes the failing test first, then uh fixes it, then refactors, I will often say,

1390
01:20:02,880 --> 01:20:07,198
provide proof that your change does the thing it's purported to do.

1391
01:20:07,199 --> 01:20:09,759
Give me TDD evidence, right?

1392
01:20:09,760 --> 01:20:12,158
That it's it would fail without this change.

1393
01:20:12,159 --> 01:20:16,430
And that's been really good for just improving the feedback loops essentially because

1394
01:20:16,480 --> 01:20:21,230
another thing with TDD that agents get wrong is they will often just write crap tests.

1395
01:20:21,280 --> 01:20:27,310
They'll often just write especially toological tests where the test is just asserting

1396
01:20:27,360 --> 01:20:28,799
the implementation itself.

1397
01:20:28,800 --> 01:20:30,158
It's just like a duplicate of it.

1398
01:20:30,159 --> 01:20:35,279
You know it it >> writes a constant and then it says expect this constant to be this

1399
01:20:35,280 --> 01:20:37,359
value. I mean what's the point in that test?

1400
01:20:37,360 --> 01:20:39,950
You know it's just asserting the implementation.

1401
01:20:40,000 --> 01:20:43,599
So yeah, I I have a mixed relationship with TDD.

1402
01:20:43,600 --> 01:20:48,319
I do still recommend it just because it gives you so much more confidence in what you're

1403
01:20:48,320 --> 01:20:50,350
building from a human perspective.

1404
01:20:50,400 --> 01:20:53,439
But yeah, I'm I'm starting to see the counter arguments.

1405
01:20:53,440 --> 01:20:55,198
>> Let's talk about tech depth.

1406
01:20:55,199 --> 01:21:00,160
Uh Jared Jared Freriedman at Y Cominator uh wrote

1407
01:21:00,640 --> 01:21:02,079
a tweet that I'll quote from him.

1408
01:21:02,080 --> 01:21:05,519
Technical depth used to be something you just had to live with with a sufficiently large

1409
01:21:05,520 --> 01:21:06,879
code base. No longer.

1410
01:21:06,880 --> 01:21:11,290
and to which you replied, "Yes, now you can live with it even in a tiny code base."

1411
01:21:11,291 --> 01:21:13,198
[laughter] >> That's good.

1412
01:21:13,199 --> 01:21:14,319
I read out loud actually.

1413
01:21:14,320 --> 01:21:17,519
You really gave the uh the sense of that one.

1414
01:21:17,520 --> 01:21:23,359
Um yeah, it's just so easy for agents to produce rubbish, right?

1415
01:21:23,360 --> 01:21:25,999
Un like even really smart,

1416
01:21:26,000 --> 01:21:29,470
powerful agents because they're unable to think strategically,

1417
01:21:29,520 --> 01:21:32,079
they're just focused on what they're doing right now.

1418
01:21:32,080 --> 01:21:34,639
It's very easy for them to produce tech debts.

1419
01:21:34,640 --> 01:21:36,158
Um, what is tech debt?

1420
01:21:36,159 --> 01:21:40,959
Right, tech debt is anything that makes the code base harder to make modifications to

1421
01:21:40,960 --> 01:21:44,399
over time. A good codebase is one that's easy to change,

1422
01:21:44,400 --> 01:21:49,759
easy to make a change in that doesn't result in cascading failures, right?

1423
01:21:49,760 --> 01:21:56,399
So, a codebase with a solid test coverage and um a good test suite is an code base that's

1424
01:21:56,400 --> 01:21:57,519
easy to change. >> Yeah.

1425
01:21:57,520 --> 01:22:01,759
>> But it's so easy for agents to just make a code base worse over time.

1426
01:22:01,760 --> 01:22:05,919
>> Yeah. And it's a really hard problem and it's one that you need a strategic mindset

1427
01:22:05,920 --> 01:22:10,479
to think about because one thing that I found works really well is automated review.

1428
01:22:10,480 --> 01:22:15,759
So you have one implement agent to do the thing and then you have another automated um

1429
01:22:15,760 --> 01:22:20,079
review agent that sort of imposes your coding standards that looks for these tortological

1430
01:22:20,080 --> 01:22:23,198
tests that improves the quality of the test suite over time.

1431
01:22:23,199 --> 01:22:26,879
But then how do you know if the automated review agent is doing a good job,

1432
01:22:26,880 --> 01:22:31,439
you know, and so even in tiny code bases, even in one line changes,

1433
01:22:31,440 --> 01:22:33,678
the agent can produce crap, you know,

1434
01:22:33,679 --> 01:22:38,079
and so I think it's just something we need to live with and something we need to be in

1435
01:22:38,080 --> 01:22:39,710
a constant battle against.

1436
01:22:39,760 --> 01:22:41,599
>> It's also not not a bad thing.

1437
01:22:41,600 --> 01:22:46,479
We we bring a bunch of value when when you understand what good code looks like,

1438
01:22:46,480 --> 01:22:48,799
what when you can recognize what techup is.

1439
01:22:48,800 --> 01:22:51,678
>> And it's also a problem that we've always had.

1440
01:22:51,679 --> 01:22:52,319
You know what I mean?

1441
01:22:52,320 --> 01:22:53,678
like >> it hasn't gone away.

1442
01:22:53,679 --> 01:22:54,319
>> Hasn't gone away.

1443
01:22:54,320 --> 01:22:56,399
You know, this is just this is what I feel like.

1444
01:22:56,400 --> 01:22:59,359
We're just having the same conversations we've had for 20 years.

1445
01:22:59,360 --> 01:23:01,439
It's just there's this new elephant in the room.

1446
01:23:01,440 --> 01:23:05,999
I >> I want to ask you about living in the UK and and AI.

1447
01:23:06,000 --> 01:23:10,718
This is a question that also came from one of the the the readers now that you're you're

1448
01:23:10,719 --> 01:23:16,479
based in in the UK and outside of London, but you're now educating about AI.

1449
01:23:16,480 --> 01:23:22,079
Is being further away from Silicon Valley and the HQ of of the labs making things easier

1450
01:23:22,080 --> 01:23:23,279
or harder for you?

1451
01:23:23,280 --> 01:23:27,439
>> I'm really just trying to plow my own furrow really like what I realized quite early

1452
01:23:27,440 --> 01:23:30,399
on is that I have no power to predict the future, right?

1453
01:23:30,400 --> 01:23:32,158
Because I'm so far away from things.

1454
01:23:32,159 --> 01:23:35,678
I'm just a person in the field working with this stuff.

1455
01:23:35,679 --> 01:23:38,479
I have no way of knowing what's coming, right?

1456
01:23:38,480 --> 01:23:40,479
I don't know whether the model's going to improve.

1457
01:23:40,480 --> 01:23:42,959
I don't have privileged access to stuff.

1458
01:23:42,960 --> 01:23:47,198
And so I'm just trying to focus on what's working right now.

1459
01:23:47,199 --> 01:23:50,959
And because of that, I think that's narrowed my scope a little bit.

1460
01:23:50,960 --> 01:23:54,750
That means I can just uh try to get my stuff working.

1461
01:23:54,800 --> 01:23:59,119
And it's sort of quite surprising to me that it's working as well as it is,

1462
01:23:59,120 --> 01:24:01,439
you know, because I don't have this privileged access.

1463
01:24:01,440 --> 01:24:04,319
I'm just trying to make this one approach work.

1464
01:24:04,320 --> 01:24:05,599
So I think, yeah, you're probably right.

1465
01:24:05,600 --> 01:24:08,879
I probably would be able to do this stuff uh if I lived in San Francisco,

1466
01:24:08,880 --> 01:24:10,479
but then I'd have to live in San Francisco.

1467
01:24:10,480 --> 01:24:11,839
You know, I don't want to do that.

1468
01:24:11,840 --> 01:24:12,559
That's miserable.

1469
01:24:12,560 --> 01:24:14,079
You know, I've got a great setup here.

1470
01:24:14,080 --> 01:24:15,359
My parents are just down the road.

1471
01:24:15,360 --> 01:24:18,189
You know, I've got my my son growing up in the countryside.

1472
01:24:18,239 --> 01:24:19,519
So, it is what it is.

1473
01:24:19,520 --> 01:24:23,629
And um yeah, now you're an educator at at heart.

1474
01:24:23,679 --> 01:24:30,079
How have you seen the business of of teaching or educating software engineers change

1475
01:24:30,080 --> 01:24:32,799
and also how people want to learn?

1476
01:24:32,800 --> 01:24:37,119
If if if if you've observed any trends from before like already when you started you

1477
01:24:37,120 --> 01:24:42,238
I I feel you were on at the time where online courses and learning over video became

1478
01:24:42,239 --> 01:24:46,638
a lot more popular as opposed to let's say a decade ago where it was maybe tutorials

1479
01:24:46,639 --> 01:24:48,319
and then before that it was books.

1480
01:24:48,320 --> 01:24:51,119
Obviously they still exist but there were just different preferences.

1481
01:24:51,120 --> 01:24:54,799
>> Yeah, it was around COVID time that sort of um video tutorials really took off.

1482
01:24:54,800 --> 01:25:00,959
I think people wanted a much richer learning experience and I was kind of just uh after

1483
01:25:00,960 --> 01:25:02,158
that wave I suppose.

1484
01:25:02,159 --> 01:25:08,079
I think that people's people's way they've learned doesn't hasn't changed that much,

1485
01:25:08,080 --> 01:25:12,638
right? And their desire for certain types of materials hasn't changed.

1486
01:25:12,639 --> 01:25:15,678
I think it's very uh sexy the idea that, you know,

1487
01:25:15,679 --> 01:25:18,750
an agent can just come in and and teach you everything.

1488
01:25:18,800 --> 01:25:24,879
And that sort of works in some contexts, but really you what you want is curation, right?

1489
01:25:24,880 --> 01:25:29,439
You want a human to have come in, understand the flow of the information.

1490
01:25:29,440 --> 01:25:32,879
I always think of information as kind of like a graph, right?

1491
01:25:32,880 --> 01:25:37,198
You have a piece of information that's dependent on another piece of information dependent

1492
01:25:37,199 --> 01:25:38,559
on another piece of information.

1493
01:25:38,560 --> 01:25:45,439
And that >> turning that graph into a linear path is how I think of my job, right?

1494
01:25:45,440 --> 01:25:50,319
>> I'm just trying to teach you like find Dystra's algorithm through the graph so that

1495
01:25:50,320 --> 01:25:52,718
you can learn it in the most sensible way.

1496
01:25:52,719 --> 01:25:56,638
And that level of curation is just not something that again that's strategic, right?

1497
01:25:56,639 --> 01:25:58,959
That's not something that AI is particularly good at.

1498
01:25:58,960 --> 01:26:05,039
So I mean I've obviously made this huge pivot from Typescript from tactical stuff really

1499
01:26:05,040 --> 01:26:09,759
to this strategic layer and it's working okay for me.

1500
01:26:09,760 --> 01:26:14,559
I really can't speak for other folks doing this work and I know that lots of people are

1501
01:26:14,560 --> 01:26:16,000
not having

1502
01:26:16,320 --> 01:26:18,879
this level of success I suppose.

1503
01:26:18,880 --> 01:26:24,799
Um, so I think what it shows is that agents have just changed the game in terms of what

1504
01:26:24,800 --> 01:26:29,039
people value and what people prioritize and the industry has shifted in 7 months faster

1505
01:26:29,040 --> 01:26:30,879
than it's I think ever done.

1506
01:26:30,880 --> 01:26:32,399
You know, this is a huge shift.

1507
01:26:32,400 --> 01:26:34,638
Doesn't mean we need to throw away our working practices,

1508
01:26:34,639 --> 01:26:37,839
but it does mean that what we need to focus on is different.

1509
01:26:37,840 --> 01:26:41,279
And I feel like I've been able to move with that quite well,

1510
01:26:41,280 --> 01:26:45,119
whereas I think others just haven't because they're focused on different things.

1511
01:26:45,120 --> 01:26:50,479
And I I I wonder if in in your case it's also with total TypeScript and and even before

1512
01:26:50,480 --> 01:26:55,678
with with TypeScript and some other things you shared you were helping people use the

1513
01:26:55,679 --> 01:26:57,519
very popular tool at the time.

1514
01:26:57,520 --> 01:26:59,839
TypeScript was was gaining market share.

1515
01:26:59,840 --> 01:27:03,919
uh there were migrations happening from Java to TypeScript from from Python to Typescript

1516
01:27:03,920 --> 01:27:10,079
and so on and so developers wanted to get really good a lot of them or or the top 10%

1517
01:27:10,080 --> 01:27:13,919
or top 20% you you name it wanted to get really really good with TypeScript and they

1518
01:27:13,920 --> 01:27:19,919
were learn looking for efficient ways of doing it now AI is here is changing how we work

1519
01:27:19,920 --> 01:27:23,919
as software engineers and I think it's particular that building software is valuable

1520
01:27:23,920 --> 01:27:28,079
but there's a question of how do I use these tools more efficiently which is more pressing

1521
01:27:28,080 --> 01:27:31,039
right now than how do I write Typescript efficiently, especially with the agent.

1522
01:27:31,040 --> 01:27:36,319
So I I wonder if you've kind of just a little bit how you pivoted from voice acting to

1523
01:27:36,320 --> 01:27:40,879
which you couldn't do uh from outside of London to a thing that you could do outside

1524
01:27:40,880 --> 01:27:42,479
of London which was still teaching.

1525
01:27:42,480 --> 01:27:47,599
You've just pivot to teaching a different area which which right now is is again it's

1526
01:27:47,600 --> 01:27:48,799
on so many people's minds.

1527
01:27:48,800 --> 01:27:52,479
>> I think I've just been lucky basically of choosing the right thing at the right time.

1528
01:27:52,480 --> 01:27:56,158
It would have been very easy for me to and I I actually took quite a fair bit of convincing

1529
01:27:56,159 --> 01:27:57,359
to move into AI.

1530
01:27:57,360 --> 01:28:01,198
Like back a couple of years ago, it was Joel, my business partner,

1531
01:28:01,199 --> 01:28:03,999
who was pushing me to actually go, you've really got to try this.

1532
01:28:04,000 --> 01:28:06,799
It's actually pretty good and you can use it for all sorts of stuff.

1533
01:28:06,800 --> 01:28:12,638
And it took about 3 months of me actually trying it and failing and trying it and failing

1534
01:28:12,639 --> 01:28:14,319
before I realized, okay, this is great.

1535
01:28:14,320 --> 01:28:19,039
I just feel quite fortunate that I've landed in the right place at the right time.

1536
01:28:19,040 --> 01:28:20,799
And I try not to narrativize it.

1537
01:28:20,800 --> 01:28:22,799
I try not to think, well, well done, Matt.

1538
01:28:22,800 --> 01:28:23,839
You've been so smart, you know,

1539
01:28:23,840 --> 01:28:27,279
making the right play at the right time because I could have I've I've made several mistakes

1540
01:28:27,280 --> 01:28:31,439
as well, and I uh could have easily found myself in a different zone.

1541
01:28:31,440 --> 01:28:32,959
And I mean, that's no bad thing.

1542
01:28:32,960 --> 01:28:34,238
I would just get back to being an engineer.

1543
01:28:34,239 --> 01:28:35,359
That's what I love, too.

1544
01:28:35,360 --> 01:28:38,959
>> Put putting yourself back into the shoes of when you were someone just starting out

1545
01:28:38,960 --> 01:28:39,759
in the industry.

1546
01:28:39,760 --> 01:28:44,109
Today, uh for people starting out in the industry, early career, junior folks,

1547
01:28:44,159 --> 01:28:47,119
what would you recommend them for tactical things to do?

1548
01:28:47,120 --> 01:28:49,839
Like they will know like look, I I want to get that experience.

1549
01:28:49,840 --> 01:28:52,799
I want to get that judgment, that taste, th those fundamentals.

1550
01:28:52,800 --> 01:28:54,879
I you'll need to get repetitions in.

1551
01:28:54,880 --> 01:28:57,439
If you found yourself in those shoes,

1552
01:28:57,440 --> 01:28:59,919
how would you approach like I want to be a builder,

1553
01:28:59,920 --> 01:29:03,279
a software engineer with all these AI tools, what not,

1554
01:29:03,280 --> 01:29:07,198
which is is now confusing because now there's a mix of do I use these AI tools just to

1555
01:29:07,199 --> 01:29:08,399
do stuff for me?

1556
01:29:08,400 --> 01:29:11,279
Do I get in the fundamentals, which is SLOA, and so on.

1557
01:29:11,280 --> 01:29:14,079
>> Yeah, I mean, I would love to be a junior right now.

1558
01:29:14,080 --> 01:29:18,718
I would love to be in the exact position I was in like 2014 where I was building these

1559
01:29:18,719 --> 01:29:20,238
tools for my students, right?

1560
01:29:20,239 --> 01:29:23,519
I actually got really nostalgic for it on um the other day.

1561
01:29:23,520 --> 01:29:27,359
I thought I'd love to go back and do some singing teaching because just the ability to

1562
01:29:27,360 --> 01:29:30,158
like I could finish a lesson and then just prompt the agent, okay,

1563
01:29:30,159 --> 01:29:31,839
this tool didn't quite work in that way.

1564
01:29:31,840 --> 01:29:35,839
I could maybe modify it a little bit and you know see it working.

1565
01:29:35,840 --> 01:29:40,319
I just think the right thing to do is to use these agents as much as possible because

1566
01:29:40,320 --> 01:29:42,399
that's how people are going to be working now.

1567
01:29:42,400 --> 01:29:48,479
And I think the thing that I find valuable about my skill set is you're constantly in

1568
01:29:48,480 --> 01:29:51,149
touch with the changes that happening.

1569
01:29:51,199 --> 01:29:55,999
Grill me not only you're having a discussion with a senior developer, right?

1570
01:29:56,000 --> 01:29:59,439
That's beneficial for the developer, but it's also beneficial for you,

1571
01:29:59,440 --> 01:30:01,950
keeps you thinking about these deeper ideas.

1572
01:30:02,000 --> 01:30:05,839
And the absolute rubbish that I was churning out, you know,

1573
01:30:05,840 --> 01:30:07,999
with my spectrogram analysis tool,

1574
01:30:08,000 --> 01:30:11,439
that would have been so much better if I had an agent to work with.

1575
01:30:11,440 --> 01:30:15,519
It ran like a pig, you know, like it was performance was absolutely terrible.

1576
01:30:15,520 --> 01:30:19,678
If I'd have been able to say, okay, this frame rate has dropped to 10 frames per second.

1577
01:30:19,679 --> 01:30:20,718
How do I fix that?

1578
01:30:20,719 --> 01:30:23,439
It would have seen the six nested for loops and gone, okay,

1579
01:30:23,440 --> 01:30:25,198
maybe you should do something different there.

1580
01:30:25,199 --> 01:30:30,079
So, I think that there's never been a more empowering time to work on this stuff.

1581
01:30:30,080 --> 01:30:33,759
As long as you're interested in not only the code you're producing,

1582
01:30:33,760 --> 01:30:36,799
but also the process of creating the code.

1583
01:30:36,800 --> 01:30:40,479
There's never been a better time to be a kind of naval gazing programmer,

1584
01:30:40,480 --> 01:30:44,589
just constantly thinking about your own processes and being introspective.

1585
01:30:44,639 --> 01:30:46,079
>> So, it sounds like if you're motivated,

1586
01:30:46,080 --> 01:30:49,198
you should be able to learn really fast compared to even before.

1587
01:30:49,199 --> 01:30:51,678
>> Absolutely. It's just about being curious, about being adaptable.

1588
01:30:51,679 --> 01:30:55,439
And that's the people that I see who are thriving in this new environment are the same

1589
01:30:55,440 --> 01:31:00,718
people who were thriving 10 years ago because they're just in interested in this work,

1590
01:31:00,719 --> 01:31:04,830
interested in making better software and interest in their own process.

1591
01:31:04,880 --> 01:31:06,718
>> And interesting in making better softwares.

1592
01:31:06,719 --> 01:31:08,510
I want to ask you about gardening.

1593
01:31:08,560 --> 01:31:12,799
Uh a software engineer on on X Lauren uh posted I'll quote her.

1594
01:31:12,800 --> 01:31:13,919
Every team needs a gardener.

1595
01:31:13,920 --> 01:31:16,718
Someone quietly watching the stream of PRs flowing into your codebase,

1596
01:31:16,719 --> 01:31:21,999
noticing the smells, the lint suppressions creeping like ivy across your careful garden.

1597
01:31:22,000 --> 01:31:25,759
A steady hand intending the weeds that would otherwise engulf the garden.

1598
01:31:25,760 --> 01:31:30,669
And and to which you replied, I'd argue the only thing your team needs are gardeners.

1599
01:31:30,719 --> 01:31:32,718
>> You probably do need a couple of other people as well.

1600
01:31:32,719 --> 01:31:34,718
>> Yeah. Yeah. [laughter] But but but more more specifically,

1601
01:31:34,719 --> 01:31:36,879
I want you to ask about this concept of gardening.

1602
01:31:36,880 --> 01:31:41,519
I actually really love like how how Lauren described the weeds taking over the garden

1603
01:31:41,520 --> 01:31:43,039
and and getting them out.

1604
01:31:43,040 --> 01:31:45,359
I think I made a tweet a while ago that we are,

1605
01:31:45,360 --> 01:31:49,439
this was when I was sort of thinking about Ralph and sort of the agent sort of looping

1606
01:31:49,440 --> 01:31:52,718
over stuff. We are essentially just Ralph's platform team, right?

1607
01:31:52,719 --> 01:31:53,599
That's what we are now.

1608
01:31:53,600 --> 01:31:56,319
And we are the we are our agents platform team.

1609
01:31:56,320 --> 01:31:59,790
We are trying to build the environment for them to succeed.

1610
01:31:59,840 --> 01:32:01,759
That's exactly how you should be thinking about it.

1611
01:32:01,760 --> 01:32:03,230
Again, it's strategic.

1612
01:32:03,280 --> 01:32:06,879
And that gardener metaphor is nice because, you know,

1613
01:32:06,880 --> 01:32:11,198
um it's very easy for the garden to itself just to suffer entropy, right?

1614
01:32:11,199 --> 01:32:13,198
to gather weeds and to do all that stuff.

1615
01:32:13,199 --> 01:32:18,158
So >> understanding and diagnosing that stuff before it becomes a problem in your own

1616
01:32:18,159 --> 01:32:22,879
codebase is an essential skill and might be the essential skill, right?

1617
01:32:22,880 --> 01:32:25,119
As long as you can queue up work for agents,

1618
01:32:25,120 --> 01:32:29,599
as long as you can build these loops now that we're starting to see these processes where

1619
01:32:29,600 --> 01:32:33,149
agents improve the codebase based on bug reports and feedbacks,

1620
01:32:33,199 --> 01:32:38,479
that feels to me like really cool work and noble interesting work as well.

1621
01:32:38,480 --> 01:32:43,678
We talked about some great standout software engineering that you learned from you got

1622
01:32:43,679 --> 01:32:46,589
inspiration from today.

1623
01:32:46,639 --> 01:32:53,198
What skill sets, experience, approach do you think makes a great software engineer?

1624
01:32:53,199 --> 01:32:58,959
I'll use an example which is uh Lars Gramml of who works at Versel on the AI SDK who

1625
01:32:58,960 --> 01:33:04,638
I had a chat with the other day and he is building an entire software factory for his

1626
01:33:04,639 --> 01:33:09,678
uh for his extremely popular open source library that gets a ton of issues.

1627
01:33:09,679 --> 01:33:11,039
We're talking about plumbing again.

1628
01:33:11,040 --> 01:33:12,158
We're talking about gardening.

1629
01:33:12,159 --> 01:33:15,550
We're like thinking about the processes of software development.

1630
01:33:15,600 --> 01:33:19,359
And I suppose if I had to put it in a word, it would be introspection.

1631
01:33:19,360 --> 01:33:25,599
It would be looking at yourself and the ability to take what you do and put that into

1632
01:33:25,600 --> 01:33:27,839
something the AI can work with.

1633
01:33:27,840 --> 01:33:30,479
You're essentially trying to put your process into words.

1634
01:33:30,480 --> 01:33:33,149
And that's what I've been doing with the skills.

1635
01:33:33,199 --> 01:33:36,959
That's what I've been trying to do with the automations I've been creating as well.

1636
01:33:36,960 --> 01:33:41,599
It's I just look at what I'm doing and think, how could I do this better?

1637
01:33:41,600 --> 01:33:46,799
And also, how could I encode this into this strange animal that I have in front of me?

1638
01:33:46,800 --> 01:33:53,359
how can I make it work like I want to and that attitude has been really really helpful

1639
01:33:53,360 --> 01:33:57,119
for me and it's something that I value in in Lars and I value in all the people that

1640
01:33:57,120 --> 01:34:02,238
I work with when they approach agents >> and then as closing what are what is a book

1641
01:34:02,239 --> 01:34:08,399
that you would recommend or multiple books >> I'll go with pragmatic programmer uh philosophy

1642
01:34:08,400 --> 01:34:13,839
of software design by John Asterau and um I'd say the first like three chapters of DDD

1643
01:34:13,840 --> 01:34:17,119
the Eric Evans book theus language one That one in particular,

1644
01:34:17,120 --> 01:34:20,799
it's really great for the ubiquitous language concepts, the domain modeling,

1645
01:34:20,800 --> 01:34:22,799
the actual sort of encoding it into code.

1646
01:34:22,800 --> 01:34:26,589
I'm not such a huge fan of, but those three are the big three.

1647
01:34:26,639 --> 01:34:27,359
>> Awesome. Math.

1648
01:34:27,360 --> 01:34:28,158
Well, thank you.

1649
01:34:28,159 --> 01:34:30,718
This was really interesting and really fun.

1650
01:34:30,719 --> 01:34:32,238
>> Great to finally be on the podcast.

1651
01:34:32,239 --> 01:34:34,399
Yeah. Meet meet the famous guy himself.

1652
01:34:34,400 --> 01:34:37,599
It's great. We've met before obviously, but it's great to be here.

1653
01:34:37,600 --> 01:34:41,359
It was so nice to sit down with Matt and I have to say knowing that he was a voice coach

1654
01:34:41,360 --> 01:34:45,439
and actor makes me understand how he talks so smooth and how he's [music] so pleasant

1655
01:34:45,440 --> 01:34:49,678
to listen to. Probably the most amusing part from this conversation was how as Matt was

1656
01:34:49,679 --> 01:34:51,759
searching for how to work better with AI,

1657
01:34:51,760 --> 01:34:55,039
it wasn't modern approaches that he found [music] really useful.

1658
01:34:55,040 --> 01:34:57,678
Instead, he went back to classic software engineering books.

1659
01:34:57,679 --> 01:35:02,399
The pragmatic programmer, a philosophy of software design, and domain driven design.

1660
01:35:02,400 --> 01:35:06,559
There's some irony as to how the best practices documented 20 plus years ago,

1661
01:35:06,560 --> 01:35:09,678
like tactical versus strategic programming in this book,

1662
01:35:09,679 --> 01:35:11,279
not only do they still work,

1663
01:35:11,280 --> 01:35:14,479
but they become more important when writing code with AI agents.

1664
01:35:14,480 --> 01:35:18,638
A related point I want to emphasize is the importance of leading words with AI.

1665
01:35:18,639 --> 01:35:22,638
When Matt started to use terms like tracer bullet or vertical slices,

1666
01:35:22,639 --> 01:35:26,270
the model started to follow his ideas better in planning.

1667
01:35:26,320 --> 01:35:27,519
And if you think about it,

1668
01:35:27,520 --> 01:35:31,359
this makes sense because software engineering literature is part of LLM training.

1669
01:35:31,360 --> 01:35:34,750
So these terms are also part of the model's priors.

1670
01:35:34,800 --> 01:35:36,109
Just as interestingly,

1671
01:35:36,159 --> 01:35:39,519
using the right words for describing your problem is not a new concept.

1672
01:35:39,520 --> 01:35:41,599
For example, when I had Ken Beck on the podcast,

1673
01:35:41,600 --> 01:35:46,799
he talked about how 30 or 35 years back when him and Ward Cunningham had a thesis on

1674
01:35:46,800 --> 01:35:51,519
their desks, they [music] used it to try to find the best words for the specific thing

1675
01:35:51,520 --> 01:35:52,750
they were describing.

1676
01:35:52,800 --> 01:35:56,399
This was just another full circle moment on how words do matter.

1677
01:35:56,400 --> 01:36:00,718
Finally, I appreciated Matt's push on how you should want a clean code base.

1678
01:36:00,719 --> 01:36:03,279
Not just because it's easier for human to navigate,

1679
01:36:03,280 --> 01:36:06,158
although I think you really want to do it for that as [music] well,

1680
01:36:06,159 --> 01:36:10,079
but also conveniently, agents do not have a long-term memory,

1681
01:36:10,080 --> 01:36:14,109
and they will look at your code base for the first time on every new run.

1682
01:36:14,159 --> 01:36:18,559
And it's much easier to get around inside a well structured codebase than one that is

1683
01:36:18,560 --> 01:36:21,999
really messy. Check out the show notes below for an interview with John Auster How,

1684
01:36:22,000 --> 01:36:25,039
the author of [music] a Philadelphia software design, a book I really love,

1685
01:36:25,040 --> 01:36:28,399
and related deep dives for AI engineering and context engineering.

1686
01:36:28,400 --> 01:36:32,158
If you like this episode, please make sure to be subscribed on your podcast player,

1687
01:36:32,159 --> 01:36:34,399
and submitting a rating is always appreciated.

1688
01:36:34,400 --> 01:36:36,879
Thanks and see you in the next
