1
00:00:00,040 --> 00:00:01,720
Legacy code is code without 
tests. 

2
00:00:01,760 --> 00:00:04,000
If you have code and has lots of
tests, and it's relatively easy 

3
00:00:04,000 --> 00:00:06,640
to change if you don't have the 
test, you're really in serious 

4
00:00:06,640 --> 00:00:08,600
trouble. 
It's a strong qualitative 

5
00:00:08,600 --> 00:00:10,880
difference between those two 
different types of code bases. 

6
00:00:11,320 --> 00:00:13,760
If you want to teach good 
design, basically teach people 

7
00:00:13,760 --> 00:00:15,960
the things to avoid and 
everything that's left is good 

8
00:00:15,960 --> 00:00:17,760
design. 
I was kind of shocked in the 

9
00:00:17,760 --> 00:00:20,280
beginning to see her vendors 
basically go and say, hey, we're

10
00:00:20,280 --> 00:00:21,600
going to write all. 
Your tests for you, yeah. 

11
00:00:21,760 --> 00:00:23,800
You know, as the TDD guy, you're
looking at this and you're 

12
00:00:23,800 --> 00:00:26,160
saying, Oh my God, no, right. 
But for characterization 

13
00:00:26,160 --> 00:00:29,000
testing, it's really kind of 
powerful because for people 

14
00:00:29,000 --> 00:00:30,960
getting much more realistic now,
I think in the very beginning 

15
00:00:30,960 --> 00:00:33,640
people started going and 
extrapolating and they just get 

16
00:00:33,720 --> 00:00:34,800
completely. 
Freaked out by the 

17
00:00:34,800 --> 00:00:37,080
possibilities, right? 
But I think many. 

18
00:00:37,080 --> 00:00:39,080
Developers now have enough 
experience what they are and 

19
00:00:39,080 --> 00:00:40,920
they realize it's not going to 
replace many times at. 

20
00:00:41,000 --> 00:00:44,440
The end of the day, in the legal
system, you can't go and say, 

21
00:00:44,600 --> 00:00:47,560
oh, the algorithm did it. 
It's like, no, a person who 

22
00:00:47,560 --> 00:00:50,200
works at a company did this. 
At the end of the day, we are 

23
00:00:50,200 --> 00:01:05,470
responsible for what we do. 
Hello, guys. 

24
00:01:05,470 --> 00:01:07,590
Welcome back to another new 
episode of the Technical Journal

25
00:01:07,590 --> 00:01:09,750
Podcast. 
I'm very excited today to meet 

26
00:01:09,750 --> 00:01:12,190
Michael Feathers. 
So we kind of like met nine 

27
00:01:12,190 --> 00:01:14,790
years ago in one of his workshop
back then in Singapore. 

28
00:01:15,150 --> 00:01:18,270
So I think today is the first 
time we met again after that 

29
00:01:18,270 --> 00:01:21,070
such a long time. 
So Michael, really great to have

30
00:01:21,070 --> 00:01:22,470
you here. 
Welcome to the show. 

31
00:01:23,230 --> 00:01:23,950
Great. 
Thank you very much. 

32
00:01:24,520 --> 00:01:27,160
Right Michael, for people who 
may not know you, so maybe in 

33
00:01:27,160 --> 00:01:29,480
the 1st place, can you help to 
introduce yourself, maybe 

34
00:01:29,480 --> 00:01:31,680
telling us a little bit of 
highlights or turning points in 

35
00:01:31,680 --> 00:01:33,360
your career that we all can 
learn from? 

36
00:01:34,040 --> 00:01:35,720
Sure. 
So my name is Michael Feathers 

37
00:01:35,800 --> 00:01:37,440
and I guess the thing I'm best, 
whoops. 

38
00:01:38,000 --> 00:01:39,680
Here's the thing I'm best known 
for within the industry. 

39
00:01:39,680 --> 00:01:41,560
I was writing a book called 
Working Effectively with Legacy 

40
00:01:41,560 --> 00:01:44,760
Code and I was involved in the 
early agile movement before it 

41
00:01:44,760 --> 00:01:46,160
was even called Agile. 
Right. 

42
00:01:46,800 --> 00:01:49,320
And I spent a lot of time since 
then just helping people with 

43
00:01:49,320 --> 00:01:51,400
like legacy code and refactoring
issues. 

44
00:01:52,000 --> 00:01:53,640
And yeah, that's just been a 
thing. 

45
00:01:53,640 --> 00:01:57,160
I've been very much interested 
in fighters that I spent about 9

46
00:01:57,160 --> 00:02:00,680
or 10 years programming, worked 
in various roles through the 

47
00:02:00,680 --> 00:02:04,960
technical hierarchy and. 
Yeah, just sort of kind of gone 

48
00:02:04,960 --> 00:02:06,040
on from there. 
Yeah. 

49
00:02:06,040 --> 00:02:08,639
So I think your book working 
with the legacy code, right. 

50
00:02:09,000 --> 00:02:11,280
I think now it's like the in the
20th anniversary. 

51
00:02:11,280 --> 00:02:12,960
So Congrats for that Saturday I 
think. 

52
00:02:13,360 --> 00:02:15,600
Yeah, thanks for reminding me. 
I forgot what year was in the 

53
00:02:15,600 --> 00:02:17,120
20s. 
Yeah. 

54
00:02:17,120 --> 00:02:19,600
So I think it's one of the 
so-called classic software 

55
00:02:19,600 --> 00:02:22,240
programming books, I would say 
especially people who are 

56
00:02:22,240 --> 00:02:25,720
dealing with legacy code. 
So maybe let's start from that 

57
00:02:25,720 --> 00:02:27,920
book first, right. 
So since you're well known about

58
00:02:28,080 --> 00:02:30,280
that book, so legacy code, 
right. 

59
00:02:30,280 --> 00:02:33,360
So in the 1st place, why did you
write something about legacy 

60
00:02:33,360 --> 00:02:36,080
code? 
I guess people back then may 

61
00:02:36,080 --> 00:02:38,760
have started working on some 
legacy code that is difficult to

62
00:02:38,760 --> 00:02:41,280
work on, or that's something 
that you learn along the way. 

63
00:02:42,400 --> 00:02:43,760
Well, it's kind of interesting 
with that. 

64
00:02:43,760 --> 00:02:47,800
So I went to a conference and I 
met Kent Beck and Ron Jeffries 

65
00:02:47,800 --> 00:02:51,880
back in like 1990. 9:00 or so. 
And I started to go and get some

66
00:02:51,880 --> 00:02:54,040
notice of the people that were 
elected balls in the very early 

67
00:02:54,040 --> 00:02:56,800
agile movement, as I mentioned. 
And it was interesting because I

68
00:02:56,800 --> 00:02:59,440
learned so much from them. 
It was interesting because at 

69
00:02:59,440 --> 00:03:02,240
that time I was a good 
programmer and everything, but 

70
00:03:02,240 --> 00:03:04,160
they had really thought deeply 
about how to become better 

71
00:03:04,160 --> 00:03:06,560
programmers. 
So I wanted to refactor. 

72
00:03:06,600 --> 00:03:08,840
And I was doing a bit of that 
back in my workplace. 

73
00:03:09,320 --> 00:03:11,680
And they were also saying things
like, you should write your test

74
00:03:11,680 --> 00:03:13,400
first, why would you do it any 
other way? 

75
00:03:13,960 --> 00:03:16,080
And I thought this is kind of 
like a very, you know, bold 

76
00:03:16,080 --> 00:03:18,200
thing for them to go and save. 
Then I understood after I did it

77
00:03:18,200 --> 00:03:20,760
for a while, and it helped me 
realize I could reduce the 

78
00:03:20,760 --> 00:03:22,280
stress of programming a great 
deal. 

79
00:03:23,040 --> 00:03:25,800
And so after that, I was fired 
to be a consultant. 

80
00:03:25,800 --> 00:03:29,520
I lost the tech job that I had, 
and the job was to go around to 

81
00:03:29,520 --> 00:03:32,760
different places and help them 
acquire the technical practices 

82
00:03:32,760 --> 00:03:36,520
that are part of Agile, right? 
And invariably, it's kind of 

83
00:03:36,520 --> 00:03:38,640
like you run into a situation 
where people have tons and tons 

84
00:03:38,640 --> 00:03:41,680
of code and they just don't know
quite what to do with it, right?

85
00:03:41,760 --> 00:03:43,960
It's hard to refactor. 
And you look at Martin Towers 

86
00:03:44,320 --> 00:03:47,040
back in that day and they said, 
OK, and a snippet. 

87
00:03:47,040 --> 00:03:49,880
It's kind of like, here's all 
this refactoring stuff, but you 

88
00:03:49,880 --> 00:03:51,240
should have tests. 
And if you don't have tests, 

89
00:03:51,240 --> 00:03:54,320
you're in a bit of trouble. 
So I just realized that this was

90
00:03:54,320 --> 00:03:56,600
a problem, and I just started 
collecting techniques for going 

91
00:03:56,600 --> 00:03:59,320
and breaking dependencies and 
getting tests into place. 

92
00:03:59,600 --> 00:04:01,880
And yeah, it's been an 
interesting ride that way. 

93
00:04:02,160 --> 00:04:06,560
But it's also been really kind 
of fascinating for me because I 

94
00:04:06,560 --> 00:04:09,960
started like a mathematics major
in school and I had this 

95
00:04:09,960 --> 00:04:12,120
interesting idea of kind of like
being an introvert. 

96
00:04:12,120 --> 00:04:15,360
Of course, I read about this 
mathematician in Pauli Erdish, 

97
00:04:15,400 --> 00:04:18,399
and it was like he lived with a 
suitcase and would go from place

98
00:04:18,399 --> 00:04:20,600
to place and sort of work with 
other mathematicians. 

99
00:04:21,079 --> 00:04:22,960
And the cool thing was he didn't
even have to have a piece of 

100
00:04:22,960 --> 00:04:24,440
paper or pencil to do this, 
right? 

101
00:04:24,440 --> 00:04:26,640
He just had conversations and do
these things. 

102
00:04:27,160 --> 00:04:29,160
I thought, wow, that's really an
interesting thing to work on 

103
00:04:29,160 --> 00:04:31,600
mathematics and just make it 
purely your life. 

104
00:04:32,160 --> 00:04:33,880
But then I kind of realized it's
kind of like if you're doing 

105
00:04:33,880 --> 00:04:35,800
that, you're not really helping 
people right directly. 

106
00:04:36,160 --> 00:04:39,120
So I've had much more fun going 
working with people and 

107
00:04:39,120 --> 00:04:41,440
realizing that I can make a bit 
of a difference. 

108
00:04:42,000 --> 00:04:44,120
And going back to my book, as 
much as it's very technical and 

109
00:04:44,120 --> 00:04:46,920
has a lot of code in it, I'm 
only realizing now how much it 

110
00:04:46,920 --> 00:04:49,560
was really about going and 
helping people keep their morale

111
00:04:49,560 --> 00:04:52,360
up and, you know, have a, a 
positive outlook to what they 

112
00:04:52,360 --> 00:04:53,400
can do and know what they can 
do. 

113
00:04:53,400 --> 00:04:56,200
Within code base. 
Yeah, I think the book itself, 

114
00:04:56,200 --> 00:04:59,240
although it has been 20 years, I
think it's still pretty relevant

115
00:04:59,240 --> 00:05:01,640
because people now, they still 
work on legacy code. 

116
00:05:01,640 --> 00:05:04,920
In fact, there might be more 
legacy code than last time 

117
00:05:04,920 --> 00:05:06,960
before, right? 
But in the 1st place, let's go 

118
00:05:06,960 --> 00:05:09,680
back to the definition itself 
about legacy code, because some 

119
00:05:09,680 --> 00:05:12,160
people might have different 
perceptions, different 

120
00:05:12,160 --> 00:05:14,400
definition. 
Some people think it's like old 

121
00:05:14,480 --> 00:05:16,760
legacy code. 
Some people think it's code that

122
00:05:16,760 --> 00:05:19,040
they just don't want to touch or
they don't understand. 

123
00:05:19,280 --> 00:05:21,880
In your book, actually, you have
one good definition that is 

124
00:05:21,880 --> 00:05:24,560
probably interesting, like you 
mentioned something related to 

125
00:05:24,560 --> 00:05:27,000
test in the very beginning. 
So maybe let's go to your 

126
00:05:27,000 --> 00:05:28,840
definition. 
What is legacy code? 

127
00:05:28,920 --> 00:05:32,160
Actually, we've got many 
definitions, but the one I'm 

128
00:05:32,160 --> 00:05:34,720
kind of known for is basically 
the legacy code is code without 

129
00:05:34,720 --> 00:05:37,120
tests. 
And it's funny about this 

130
00:05:37,120 --> 00:05:40,600
because this happened when I was
working with the team and I had 

131
00:05:40,600 --> 00:05:42,360
another consultant with me and I
got. 

132
00:05:42,360 --> 00:05:44,800
Frustrated at 1 moment and. 
Somebody asked a question. 

133
00:05:44,800 --> 00:05:47,120
I said legacy code is code 
without tests. 

134
00:05:47,120 --> 00:05:48,560
That's just what you need to 
know, right? 

135
00:05:49,200 --> 00:05:51,760
And you know, my friend, the 
consultant, he basically said, 

136
00:05:51,760 --> 00:05:52,720
you know, you got to put that 
out. 

137
00:05:52,720 --> 00:05:54,440
There, that's a really powerful 
statement to say. 

138
00:05:55,280 --> 00:05:59,120
And I knew at the moment that we
really was at odds with the 

139
00:05:59,120 --> 00:06:01,160
traditional definition. 
You get code from other people 

140
00:06:01,160 --> 00:06:02,600
and that becomes. 
Legacy code, right? 

141
00:06:03,080 --> 00:06:05,400
Or code that you're scared of 
and don't quite understand. 

142
00:06:05,960 --> 00:06:08,280
But I think, you know, with all 
these definitions, they're 

143
00:06:08,280 --> 00:06:11,360
pragmatic in a way because 
they're used to highlight 

144
00:06:11,360 --> 00:06:13,440
something that you basically 
want to change. 

145
00:06:14,080 --> 00:06:15,760
With this one, it was really 
just like had this. 

146
00:06:15,760 --> 00:06:18,040
Intuitive sense that. 
You know, if you have code and 

147
00:06:18,040 --> 00:06:20,040
has lots of tests and it's 
relatively easy to change. 

148
00:06:20,040 --> 00:06:22,240
If you don't have the test, 
you're really in serious. 

149
00:06:22,240 --> 00:06:23,240
Trouble. 
It's a strong. 

150
00:06:23,640 --> 00:06:25,720
Qualitative difference between 
those two different types of 

151
00:06:25,720 --> 00:06:27,880
code bases. 
And so it's trying to get that 

152
00:06:27,880 --> 00:06:29,960
across. 
But occasionally people will say

153
00:06:29,960 --> 00:06:31,960
who are you to make the 
definition of legacy? 

154
00:06:32,480 --> 00:06:35,200
It's just one or as many. 
Pick whichever 1 you want. 

155
00:06:35,480 --> 00:06:36,320
Pick the one that helps. 
You. 

156
00:06:36,320 --> 00:06:37,920
I think it's the best thing to 
say like that. 

157
00:06:39,040 --> 00:06:40,280
Yeah. 
So I think in the context of 

158
00:06:40,280 --> 00:06:42,840
your definition, you have 
emphasized a lot about testing, 

159
00:06:42,840 --> 00:06:43,760
right. 
I think in the very beginning 

160
00:06:43,760 --> 00:06:46,080
you mentioned you learned from 
Kendbeck about test first. 

161
00:06:46,720 --> 00:06:49,120
Maybe in the refactoring book 
also it was mentioned that you 

162
00:06:49,120 --> 00:06:51,080
refactor also along with the 
test. 

163
00:06:51,280 --> 00:06:54,000
Why the test is so important in 
your opinion? 

164
00:06:54,680 --> 00:06:57,280
Well, I think the main thing is 
because this is going to be kind

165
00:06:57,280 --> 00:06:58,800
of like getting a philosophical 
in a way. 

166
00:06:58,800 --> 00:07:02,280
It's kind of like most of us 
walk around with an idea in our 

167
00:07:02,280 --> 00:07:03,960
heads about what the system 
does. 

168
00:07:04,520 --> 00:07:06,800
And The thing is, it's kind of 
like the system has its own idea

169
00:07:06,800 --> 00:07:09,560
about what it does. 
It's not an idea, it's what it 

170
00:07:09,560 --> 00:07:12,160
does, right? 
And I think that that's an 

171
00:07:12,160 --> 00:07:15,280
interesting thing. 
We quite often get so caught up 

172
00:07:15,280 --> 00:07:18,240
with what we think the system is
doing and what we think it we 

173
00:07:18,240 --> 00:07:20,800
want it to do, and we forget to 
even think about what it 

174
00:07:20,800 --> 00:07:23,840
currently is doing, right? 
So to me, that's a very 

175
00:07:23,840 --> 00:07:26,480
grounding perspective. 
It's kind of like if you really 

176
00:07:26,480 --> 00:07:29,400
know what the system does, you 
have a great base point to go 

177
00:07:29,400 --> 00:07:31,080
and decide what to do next, 
right? 

178
00:07:31,720 --> 00:07:34,000
And over and over again, I've 
run into situations where 

179
00:07:34,000 --> 00:07:36,560
people, once they learn a bit 
more about what the system 

180
00:07:36,560 --> 00:07:39,080
actually does, they have 
different ideas about what's 

181
00:07:39,080 --> 00:07:41,120
possible. 
And they're kind of like, oh, 

182
00:07:41,120 --> 00:07:43,320
you know, it's kind of like 
people have been asking for this

183
00:07:43,320 --> 00:07:45,760
particular feature and now I see
it'll be relatively easy to add 

184
00:07:45,760 --> 00:07:46,600
that. 
Feature, right? 

185
00:07:46,600 --> 00:07:47,880
I've always been sort of like 
saying. 

186
00:07:48,360 --> 00:07:50,200
It'll take three weeks to do 
this sort of thing, but now I 

187
00:07:50,200 --> 00:07:51,440
know it's much. 
Easier to do. 

188
00:07:51,840 --> 00:07:54,640
And without that baseline of 
knowledge, you just really don't

189
00:07:54,920 --> 00:07:57,640
know that. 
So we talked about tests first a

190
00:07:57,640 --> 00:07:59,160
second ago. 
One of the things I talk about 

191
00:07:59,160 --> 00:08:01,960
in the book is something I call 
characterization tests. 

192
00:08:02,480 --> 00:08:04,440
And quite often people call this
like pinning tests now 

193
00:08:04,440 --> 00:08:06,640
sometimes. 
And the idea is that basically 

194
00:08:06,640 --> 00:08:09,000
you write tests that you're used
to describe the current behavior

195
00:08:09,000 --> 00:08:10,960
of the system. 
So you're not writing them 

196
00:08:10,960 --> 00:08:13,320
first, you're writing them after
the code has been written and 

197
00:08:13,680 --> 00:08:15,960
you're writing them to go and 
ask a question of the code base.

198
00:08:16,520 --> 00:08:18,760
And once you get the answer, you
basically take that answer and 

199
00:08:18,760 --> 00:08:22,080
you put it in as the expectation
if the notice. 

200
00:08:22,080 --> 00:08:23,800
This is called golden master 
testing. 

201
00:08:23,800 --> 00:08:26,600
In a way it's considered like a 
poor practice, but I think when 

202
00:08:26,600 --> 00:08:29,000
you have existing code without 
tests, it's just a way of going 

203
00:08:29,000 --> 00:08:30,320
and actually understanding what 
you've. 

204
00:08:30,320 --> 00:08:32,840
Got. 
And you can basically put that 

205
00:08:33,280 --> 00:08:36,000
off to the side and distinguish 
it from the test that you write 

206
00:08:36,000 --> 00:08:39,240
1st to go and actually sort of, 
you know, figure you towards 

207
00:08:39,240 --> 00:08:40,840
creating feature understanding 
when you're done. 

208
00:08:41,640 --> 00:08:44,840
So yeah, that's the thing. 
To me, a test is a way of 

209
00:08:44,840 --> 00:08:48,080
grounding our knowledge of a 
system, right. 

210
00:08:48,080 --> 00:08:51,440
When we refer to the tests, are 
you referring to automated tests

211
00:08:51,440 --> 00:08:54,160
or are you referring also for 
other types of tests? 

212
00:08:54,160 --> 00:08:56,400
Like, I don't know, people have 
manual tests, UI tests, 

213
00:08:56,400 --> 00:08:58,600
regression tests, so many other 
tests out there. 

214
00:08:58,600 --> 00:09:00,320
Right. 
So are you specifically 

215
00:09:00,320 --> 00:09:02,760
referring to just automated 
tests or something else? 

216
00:09:03,720 --> 00:09:06,160
Yeah, generally automated tests.
You know, it's kind of like it 

217
00:09:06,160 --> 00:09:09,360
seems like I'm finding two or 
two places that still do much 

218
00:09:09,360 --> 00:09:11,960
manual testing and all right. 
And I think it's you know, 

219
00:09:11,960 --> 00:09:14,000
especially with like dev OPS and
the accelerate book and 

220
00:09:14,000 --> 00:09:16,280
everything like that, you know, 
it's the idea is going to get 

221
00:09:16,280 --> 00:09:19,440
something in place with tests 
and have that for within an hour

222
00:09:19,440 --> 00:09:21,560
if you can, right. 
So there doesn't really leave 

223
00:09:21,560 --> 00:09:23,760
much time with that. 
So generally I am talking about 

224
00:09:23,760 --> 00:09:25,880
automated tests. 
Yeah, it's kind of funny. 

225
00:09:25,880 --> 00:09:27,960
I think most of the people that 
are like thought leaders in the 

226
00:09:28,720 --> 00:09:31,120
non automatic testing space have
really kind of moved into 

227
00:09:31,120 --> 00:09:33,720
calling it exploratory testing 
and basically going and 

228
00:09:33,720 --> 00:09:38,640
accenting the fact that as 
somebody who basically has ideas

229
00:09:38,640 --> 00:09:40,880
though the system. 
Could be doing, you can just 

230
00:09:40,880 --> 00:09:43,480
sort of verify those and look 
for really terrible things and 

231
00:09:43,960 --> 00:09:45,120
make people aware of those, 
right? 

232
00:09:45,120 --> 00:09:46,560
So that's an exploratory 
approach. 

233
00:09:47,720 --> 00:09:50,840
So I think talking about 
testing, right, although it has 

234
00:09:50,840 --> 00:09:53,080
been around for many, many 
years, right? 

235
00:09:53,080 --> 00:09:56,320
I think still the state of the 
software development practice 

236
00:09:56,320 --> 00:09:59,520
these days, testing is still 
kind of like lacking in terms of

237
00:09:59,520 --> 00:10:02,880
quality, in terms of quantity. 
And I know that you have written

238
00:10:02,880 --> 00:10:05,680
this book since 20 years ago. 
Do you think the definition of 

239
00:10:05,680 --> 00:10:09,160
legacy code still kind of like 
relevant or is it something 

240
00:10:09,160 --> 00:10:12,640
changing because with so many 
other tools, techniques and also

241
00:10:12,640 --> 00:10:15,560
maybe now with AI? 
So is the definition still kind 

242
00:10:15,560 --> 00:10:17,760
of like appropriate or do you 
think something has evolved 

243
00:10:17,760 --> 00:10:19,840
along the way? 
Well, if you don't have any 

244
00:10:19,840 --> 00:10:21,000
tests, I think it's appropriate 
for you. 

245
00:10:21,880 --> 00:10:23,280
This is the best way to go and 
put it, right? 

246
00:10:23,800 --> 00:10:26,320
But I think, you know, we might 
end up in a place where legacy 

247
00:10:26,320 --> 00:10:29,280
just reversed and I think it 
passed to some degree to 

248
00:10:29,320 --> 00:10:31,280
basically the thing that we 
don't understand, right? 

249
00:10:31,280 --> 00:10:34,080
And I think that's another 
definition is like legacy code 

250
00:10:34,080 --> 00:10:36,640
is code we don't understand. 
So yeah, you know, there's a lot

251
00:10:36,640 --> 00:10:38,760
more that we can do now with in 
order to go and actually 

252
00:10:38,760 --> 00:10:41,040
understand. 
The systems that we have when 

253
00:10:41,040 --> 00:10:43,280
using AI through this quite 
often just like taking a lot of 

254
00:10:43,280 --> 00:10:46,040
code and sort of like pulling it
into a session and asking 

255
00:10:46,040 --> 00:10:48,440
questions about it. 
And you know, the results have 

256
00:10:48,440 --> 00:10:49,480
been mixed. 
They can, kind of. 

257
00:10:49,480 --> 00:10:53,160
See the advantages to this now? 
And I'm thinking we're kind of 

258
00:10:53,160 --> 00:10:54,200
like due. 
For. 

259
00:10:54,760 --> 00:10:56,640
Let's see, it's August 2024 
right now, right? 

260
00:10:57,320 --> 00:10:59,840
We're due for this kind of 
backlash and people say, oh, you

261
00:10:59,920 --> 00:11:01,200
know, we're just making things 
up. 

262
00:11:01,280 --> 00:11:04,040
And the second to help me as a. 
Programmer and stuff like that. 

263
00:11:04,480 --> 00:11:07,080
But you know, you can pay 
attention to the social winds of

264
00:11:07,080 --> 00:11:08,600
things. 
But I think that. 

265
00:11:08,600 --> 00:11:10,720
This technology is only going to
get better every time, and it's 

266
00:11:10,720 --> 00:11:12,840
really important. 
For every programmer to learn 

267
00:11:12,840 --> 00:11:14,840
how to use it well and 
understand what limitations are.

268
00:11:14,960 --> 00:11:17,240
So. 
Yeah, I think speaking about 

269
00:11:17,240 --> 00:11:20,840
legacy code, right, I think 
almost all developers, I believe

270
00:11:20,880 --> 00:11:23,720
that they hate working with 
legacy code, right, No matter 

271
00:11:23,720 --> 00:11:26,040
what, right? 
So either that they don't know 

272
00:11:26,040 --> 00:11:29,680
what the code is doing, either 
the code is buggy or the code is

273
00:11:29,680 --> 00:11:33,280
just so outdated that you can't 
even change it to using the 

274
00:11:33,280 --> 00:11:34,840
modern practice and things like 
that, right? 

275
00:11:35,280 --> 00:11:38,320
So in your consulting, I'm sure 
you have seen the worst of 

276
00:11:38,600 --> 00:11:41,640
legacy code maybe and some which
are probably not so bad. 

277
00:11:41,960 --> 00:11:44,240
But if you can tell us a little 
bit, what are the some of the 

278
00:11:44,240 --> 00:11:47,600
typical challenges that people 
when they deal with legacy code?

279
00:11:47,600 --> 00:11:51,160
Why is it something that is kind
of like avoided or hated a lot 

280
00:11:51,200 --> 00:11:54,280
in the software development? 
You know, I think the mindset 

281
00:11:54,280 --> 00:11:56,400
has a lot to do with it. 
And I think also there's the 

282
00:11:56,400 --> 00:11:58,320
ambition of creating a new 
system, right? 

283
00:11:59,360 --> 00:12:01,280
And it's kind of like it seems 
with a lot of modern systems, 

284
00:12:01,280 --> 00:12:03,920
you can, you know, you may be 
working with older code, but you

285
00:12:03,920 --> 00:12:05,840
get to go and sort of like 
create this little space where 

286
00:12:05,840 --> 00:12:08,480
you have, say, new, new service 
and you can write the code from 

287
00:12:08,480 --> 00:12:10,600
scratch and doodles. 
And you get very happy about 

288
00:12:10,600 --> 00:12:12,640
this because you get to sort of 
display your creativity. 

289
00:12:13,360 --> 00:12:15,960
But some people actually enjoy 
debugging, right? 

290
00:12:15,960 --> 00:12:18,000
You know, some people who enjoy 
debugging, right? 

291
00:12:18,520 --> 00:12:19,760
It's the same kind of thing in a
way. 

292
00:12:19,760 --> 00:12:21,960
It's this thing of trying to 
understand something. 

293
00:12:22,320 --> 00:12:25,720
And I think I might be sort of 
like more predisposed to this 

294
00:12:25,720 --> 00:12:28,320
than most people because from 
being a kid, I've just always 

295
00:12:28,320 --> 00:12:30,960
been curious about everything. 
Anything I could read, I would 

296
00:12:30,960 --> 00:12:33,640
just sort of read, read, read 
and try things out and that sort

297
00:12:33,640 --> 00:12:36,000
of thing. 
And if you approach it as an 

298
00:12:36,000 --> 00:12:37,920
adventure, I think that's 
something which is really kind 

299
00:12:37,920 --> 00:12:40,520
of good in a way. 
Reminds me of a story. 

300
00:12:40,520 --> 00:12:42,560
And it's not directly about the 
technical work, but I was 

301
00:12:42,560 --> 00:12:44,480
working with a team many years 
ago. 

302
00:12:44,520 --> 00:12:48,120
And it was interesting because I
was there for like 4 or five 

303
00:12:48,120 --> 00:12:51,080
months on and off. 
And, you know, at the end of 

304
00:12:51,080 --> 00:12:53,600
this, the guy who brought me in,
he brought me into his office. 

305
00:12:54,080 --> 00:12:55,840
They showed me these graphs. 
They showed me how the quality 

306
00:12:55,840 --> 00:12:58,040
had improved through all the 
time that I'd been there. 

307
00:12:58,040 --> 00:12:59,800
We really, you know, made a big 
difference. 

308
00:13:00,360 --> 00:13:02,480
And I thought, well, this is 
weird because I feel like a 

309
00:13:02,480 --> 00:13:04,720
failure. 
Why do I feel like a failure? 

310
00:13:04,720 --> 00:13:08,240
And what it was, this was like 
early days, like 2000s, 

311
00:13:08,240 --> 00:13:10,000
likethe.com. 
Bus and all this other stuff. 

312
00:13:10,520 --> 00:13:12,280
Was working at a startup and 
everybody thought they were 

313
00:13:12,280 --> 00:13:13,840
going to be a millionaire and 
then they. 

314
00:13:13,840 --> 00:13:15,600
Discovered they weren't going to
be a millionaire, right? 

315
00:13:16,160 --> 00:13:19,240
And it's just this interesting 
thing of kind of like, and I 

316
00:13:19,240 --> 00:13:20,800
started seeing the friends. 
It's like, wow, it's, you know, 

317
00:13:21,160 --> 00:13:23,520
the thing which really affects 
whether we feel good today or 

318
00:13:23,520 --> 00:13:25,560
not is what our expectations 
were, right? 

319
00:13:26,200 --> 00:13:28,760
And it's, you know, and I talked
to a friend who was like in 

320
00:13:28,760 --> 00:13:30,640
Eastern religion, he's like, oh,
that's his own thing. 

321
00:13:30,640 --> 00:13:33,080
It's like, OK, but it's like, 
it's really an interesting 

322
00:13:33,080 --> 00:13:33,880
thing. 
It's like our. 

323
00:13:33,880 --> 00:13:36,200
Expectations set our experience 
to a strong degree. 

324
00:13:36,880 --> 00:13:40,400
And I think if you can actually 
cultivate the curiosity about 

325
00:13:40,400 --> 00:13:44,480
what does the system do right, 
or the desire to help people in 

326
00:13:44,480 --> 00:13:47,520
that context, it can be very, 
you know, rewarding work. 

327
00:13:48,120 --> 00:13:50,000
You may just have to go and put 
aside your expectations a little

328
00:13:50,000 --> 00:13:52,280
bit. 
Yeah, you touch on just now 

329
00:13:52,280 --> 00:13:55,200
something that a lot of 
developers probably like to do, 

330
00:13:55,200 --> 00:13:58,520
right, which is to create new 
system or rewrite everything, 

331
00:13:58,520 --> 00:14:00,400
right. 
So since you write the legacy 

332
00:14:00,400 --> 00:14:03,520
code book, what is your approach
towards fixing the legacy code 

333
00:14:03,520 --> 00:14:06,080
or maybe refactoring the legacy 
code versus rewrite? 

334
00:14:06,080 --> 00:14:08,280
Right. 
So when should we actually 

335
00:14:08,440 --> 00:14:11,480
contemplate doing rewrite versus
fixing the legacy code? 

336
00:14:12,240 --> 00:14:14,080
Yeah, a lot of it comes down to 
business reason rather than 

337
00:14:14,080 --> 00:14:16,200
technical reason, because at the
end of the day, the technical 

338
00:14:16,200 --> 00:14:19,280
things just kind of like we can 
deal with anything. 

339
00:14:19,280 --> 00:14:21,880
You know, it's a question 
whether there's payback for this

340
00:14:21,880 --> 00:14:24,080
particular thing. 
But the business case needs to 

341
00:14:24,080 --> 00:14:27,600
be made, needs to be understood 
that you don't have to rewrite 

342
00:14:27,600 --> 00:14:30,840
an entire system most of the 
time, but you can concentrate on

343
00:14:30,840 --> 00:14:33,360
the things which basically have 
growth in the future and also, 

344
00:14:33,920 --> 00:14:36,360
you know, are presenting 
difficulty to you in the 

345
00:14:36,360 --> 00:14:38,280
meantime. 
Usually what I'd like to do is I

346
00:14:38,280 --> 00:14:40,320
think I'd like to go and 
actually like try to do some 

347
00:14:40,320 --> 00:14:43,360
refactoring, try to do some 
planning for some refactoring, 

348
00:14:43,360 --> 00:14:46,400
look at perspective features, 
and then having all that stuff 

349
00:14:46,400 --> 00:14:49,280
together thinking about whether 
a read write is justified or. 

350
00:14:49,280 --> 00:14:51,320
Not right as. 
I mentioned a little earlier 

351
00:14:51,320 --> 00:14:54,240
this thing of going and actually
doing spot rewrites on 

352
00:14:54,240 --> 00:14:56,360
particular things and it's 
really pretty powerful. 

353
00:14:56,360 --> 00:14:58,760
And quite often for people, it's
like an all or nothing. 

354
00:14:58,760 --> 00:15:00,040
Proposition. 
And that's really. 

355
00:15:00,520 --> 00:15:01,880
A verbal. 
Position to approach these 

356
00:15:01,880 --> 00:15:04,120
things from. 
But yeah, you know, the thing 

357
00:15:04,120 --> 00:15:06,440
with rewrites is that it's great
if you have tests. 

358
00:15:06,440 --> 00:15:09,000
So if you have tests, you know, 
really in a golden space. 

359
00:15:09,760 --> 00:15:11,440
If you don't, then you're kind 
of like dealing with the 

360
00:15:11,440 --> 00:15:14,040
situation of like, oh, I need to
write this thing and I don't 

361
00:15:14,040 --> 00:15:16,320
understand what it does. 
And it's like, OK, well now you 

362
00:15:16,320 --> 00:15:18,840
got 2 problems, right? 
So I think it's really just the 

363
00:15:18,840 --> 00:15:21,560
best way to kind of approach it.
The thing is that's one that's 

364
00:15:21,880 --> 00:15:24,600
rewrite when you're basically 
dealing with technical debt 

365
00:15:24,600 --> 00:15:26,640
directly. 
But there are these other. 

366
00:15:26,640 --> 00:15:28,680
Rewrites, which are really all 
about architecture that really 

367
00:15:28,680 --> 00:15:30,400
have, you know. 
A different set of 

368
00:15:30,400 --> 00:15:31,640
considerations. 
Leading into them. 

369
00:15:32,120 --> 00:15:34,680
And these are the architectural 
ones are usually like, you know,

370
00:15:34,680 --> 00:15:37,720
much more expensive speaking 
about architecture, right? 

371
00:15:37,720 --> 00:15:41,160
So some people to the extreme 
right, like doing micro service.

372
00:15:41,160 --> 00:15:43,240
So that one part of the 
definition of micro service for 

373
00:15:43,240 --> 00:15:45,720
some people is like, if you can 
rewrite the whole service 

374
00:15:45,720 --> 00:15:48,400
within, I don't know, X days, 
right, then that's the micro 

375
00:15:48,400 --> 00:15:50,880
service. 
So with that kind of maybe well 

376
00:15:50,880 --> 00:15:52,240
designed micro service, you can 
do that. 

377
00:15:52,240 --> 00:15:54,040
So what's your take about this 
as well, right? 

378
00:15:54,040 --> 00:15:57,560
Like when you refactor the 
application into a different 

379
00:15:57,560 --> 00:16:00,440
service, is that also some 
strategy that you can do for 

380
00:16:00,440 --> 00:16:03,160
tackling legacy code? 
Yeah, definitely. 

381
00:16:03,240 --> 00:16:05,160
You know, I think that's an 
interesting thing to actually 

382
00:16:05,160 --> 00:16:06,800
move things around to different 
places. 

383
00:16:06,800 --> 00:16:09,440
And so it's really, at a macro 
level, the same thing we do as a

384
00:16:09,440 --> 00:16:12,680
micro level, at a micro level 
with classes in many ways. 

385
00:16:13,040 --> 00:16:14,600
But as far as that thing of 
like, you should be able to 

386
00:16:14,600 --> 00:16:16,920
rewrite in a day or so, I think 
that's a great goal. 

387
00:16:17,280 --> 00:16:18,520
Hard to see it in practice, 
though. 

388
00:16:18,640 --> 00:16:21,560
It's really a weird thing. 
I think there's this intrinsic 

389
00:16:21,560 --> 00:16:23,720
thing about software that 
basically tends to grow and grow

390
00:16:23,720 --> 00:16:25,880
and grow. 
And quite often it grows to the 

391
00:16:25,880 --> 00:16:28,840
point where you basically have, 
you know, it's hard to go and do

392
00:16:28,840 --> 00:16:30,600
anything like that. 
But it snuck up on you, that 

393
00:16:30,600 --> 00:16:33,560
kind of thing. 
Remember like reading through 

394
00:16:33,560 --> 00:16:37,080
some research years ago about 
like how big does a class need 

395
00:16:37,080 --> 00:16:38,440
to be? 
Before you actually go in 

396
00:16:38,440 --> 00:16:39,920
refracting, right, that kind of 
thing. 

397
00:16:40,600 --> 00:16:43,360
And looking at actually like 
quality data, it's kind of like 

398
00:16:43,360 --> 00:16:45,680
where do we have the most bugs 
in the biggest? 

399
00:16:45,680 --> 00:16:47,000
Abstraction to the smallest 
ones. 

400
00:16:47,400 --> 00:16:49,280
Turns out the answer is really 
the one so you touch the most 

401
00:16:49,280 --> 00:16:52,040
often, right? 
And so it's kind of like we all 

402
00:16:52,040 --> 00:16:55,000
have a feeling for when things 
get to be too big, but quite 

403
00:16:55,000 --> 00:16:57,360
often it's kind of like there's 
no set point. 

404
00:16:57,360 --> 00:16:59,200
It's kind of like a. 
Subjective sense in a way. 

405
00:16:59,640 --> 00:17:02,040
But yeah, I think there's a lot 
of stuff that was a dream for 

406
00:17:02,040 --> 00:17:05,480
micro services that I think is, 
you know, it's a shame that we 

407
00:17:05,480 --> 00:17:07,520
kind of fell away from some of 
that stuff. 

408
00:17:07,520 --> 00:17:10,359
The thing of being able to use 
almost any language, be able to 

409
00:17:10,359 --> 00:17:13,079
throw things into production 
almost immediately, be able to 

410
00:17:13,079 --> 00:17:14,640
go and rewrite them when we need
to. 

411
00:17:14,680 --> 00:17:18,040
And yeah, I don't know, I tend 
to think there was a lot of 

412
00:17:18,040 --> 00:17:19,640
these things. 
It's kind of like we only get 

413
00:17:19,640 --> 00:17:21,560
the resilient systems we need 
when we stress. 

414
00:17:21,560 --> 00:17:23,560
Them a bit. 
If there's a reason to start 

415
00:17:23,560 --> 00:17:27,119
rewriting things, then it's good
because we actually gain the 

416
00:17:27,119 --> 00:17:29,200
skill to do this and don't think
we're just being an atypical 

417
00:17:29,200 --> 00:17:31,040
thing, right? 
So it's actually good when 

418
00:17:31,040 --> 00:17:32,320
there's a bit. 
Of stress in the environment, 

419
00:17:32,480 --> 00:17:35,520
you know. 
So speaking about how people 

420
00:17:35,520 --> 00:17:38,640
tackle this legacy code, right, 
maybe from your experience or 

421
00:17:38,640 --> 00:17:40,080
maybe some summary of your book,
right? 

422
00:17:40,080 --> 00:17:43,200
What are the techniques that 
people can evaluate or maybe 

423
00:17:43,200 --> 00:17:46,000
people can try to actually 
tackle legacy code in a much 

424
00:17:46,120 --> 00:17:49,480
elegant way, so to speak? 
In terms of that, I think the 

425
00:17:49,520 --> 00:17:51,760
main thing is to go and figure 
out exactly where you need to 

426
00:17:51,760 --> 00:17:54,520
make changes, right? 
And then you move outwards from 

427
00:17:54,520 --> 00:17:56,400
there. 
They may be cases where you need

428
00:17:56,400 --> 00:17:59,320
to change two or three lines in 
the method, for instance, or you

429
00:17:59,320 --> 00:18:01,760
need to go and actually sort of 
like you add five or six methods

430
00:18:01,760 --> 00:18:04,000
to a class, but maybe you're 
thinking about creating a new 

431
00:18:04,000 --> 00:18:05,920
class. 
And then what you do is. 

432
00:18:05,920 --> 00:18:08,360
So basically you think about 
what would be involved in 

433
00:18:08,360 --> 00:18:11,600
getting tests in place for each 
one of those places, and you 

434
00:18:11,800 --> 00:18:13,920
kind of like crawl the tree 
upward and see if there's a 

435
00:18:13,920 --> 00:18:15,960
common. 
Place for those changes. 

436
00:18:16,600 --> 00:18:18,280
And you try to pragmatically 
figure out where you want. 

437
00:18:18,280 --> 00:18:21,120
To go and have your tests. 
Now, if you have code that 

438
00:18:21,120 --> 00:18:24,000
doesn't really have very many 
tests in place, chances are the 

439
00:18:24,000 --> 00:18:26,080
code isn't really able to 
accommodate tests. 

440
00:18:26,080 --> 00:18:29,000
Yeah, and you have to do quite a
bit of dependency breaking work 

441
00:18:29,000 --> 00:18:30,800
in order to go and actually put 
the test in place. 

442
00:18:30,800 --> 00:18:34,040
To go and solve these problems. 
And that's really what my book 

443
00:18:34,040 --> 00:18:35,280
is mainly about. 
Is going and. 

444
00:18:35,480 --> 00:18:37,680
Breaking the dependencies and 
writing the tests going to do 

445
00:18:37,680 --> 00:18:40,360
these things, but at a micro 
level that's what you kind of 

446
00:18:40,360 --> 00:18:43,080
need to do, right? 
I think in the more macro level,

447
00:18:43,080 --> 00:18:45,440
the important thing to go and 
remember is that essentially 

448
00:18:45,960 --> 00:18:49,400
this is the kind of stuff where 
you're never going to go and 

449
00:18:49,400 --> 00:18:51,840
have complete tests on the code 
base unless you started that. 

450
00:18:51,840 --> 00:18:52,480
Way. 
Right. 

451
00:18:53,040 --> 00:18:54,640
And that it's OK to live in this
limbo. 

452
00:18:54,640 --> 00:18:56,840
Space, and you probably will for
a long period of time. 

453
00:18:57,120 --> 00:18:59,480
Where you're going to have some 
areas of great coverage in other

454
00:18:59,480 --> 00:19:03,200
areas, so not so good coverage 
and that's just normal, right? 

455
00:19:03,560 --> 00:19:06,560
But at the end of the day, the 
coolest thing is that the things

456
00:19:06,560 --> 00:19:08,520
that you're about to change 
right now, chances are you'll be

457
00:19:08,520 --> 00:19:11,000
changing in the future. 
So what you do to go and get 

458
00:19:11,000 --> 00:19:13,560
tests in place for those things,
it's really kind of valuable if 

459
00:19:13,560 --> 00:19:15,400
you need to go and actually 
start to make changes later. 

460
00:19:15,400 --> 00:19:17,800
And chances are you will. 
So you're going to start to get 

461
00:19:17,800 --> 00:19:20,360
like very quick returns from 
doing this sort of thing. 

462
00:19:20,400 --> 00:19:23,600
Like Joe be thinking, you know, 
one day that's like, wow, I need

463
00:19:23,600 --> 00:19:26,280
to go and get in this area of 
code and there are many tests or

464
00:19:26,280 --> 00:19:29,360
the tests are very good and it's
going to be a pain when I do 

465
00:19:29,360 --> 00:19:30,640
that tomorrow. 
And then you get there tomorrow 

466
00:19:30,640 --> 00:19:31,840
and you're. 
Always like oh damn wow, one. 

467
00:19:32,320 --> 00:19:34,240
Of my team mates was in there 
three weeks ago and they put 

468
00:19:34,240 --> 00:19:37,240
tests in place and wow, yay, my 
job is easier than it was 

469
00:19:37,240 --> 00:19:39,560
before. 
So I think there's that, but 

470
00:19:39,560 --> 00:19:42,640
there's also I guess the 
psychological thing of basically

471
00:19:42,640 --> 00:19:44,720
doing that enough to get to the 
point where you notice the 

472
00:19:44,720 --> 00:19:47,720
difference about how it feels. 
We have an area of code that's 

473
00:19:47,720 --> 00:19:49,840
easier to work in versus one 
that doesn't. 

474
00:19:50,400 --> 00:19:53,520
Quite often I run into people 
that have, you know, even 

475
00:19:53,880 --> 00:19:56,640
independent of whether you have 
tests or not, they're not used 

476
00:19:56,640 --> 00:19:58,600
to working a good code. 
Base at all and so. 

477
00:19:58,800 --> 00:20:00,840
They're in pain, but they're in 
pain, right? 

478
00:20:00,840 --> 00:20:02,720
And that's really a tragic 
situation. 

479
00:20:02,720 --> 00:20:04,960
To be in. 
Yeah, speaking about some of the

480
00:20:04,960 --> 00:20:07,680
techniques you mentioned, like 
dependency breaking and being in

481
00:20:07,680 --> 00:20:10,440
the limbo situation, you have 
this one concept called seam, 

482
00:20:10,440 --> 00:20:11,600
right? 
So I think that's really a 

483
00:20:11,600 --> 00:20:14,000
powerful thing. 
Maybe if you can, you know, 

484
00:20:14,000 --> 00:20:16,920
define what is seam and how 
should people use it within 

485
00:20:16,920 --> 00:20:18,720
their code base. 
Sure. 

486
00:20:18,840 --> 00:20:21,360
It was kind of funny because I 
thought of this and I actually 

487
00:20:21,360 --> 00:20:23,760
wrote a chapter on my book. 
They came very close from going 

488
00:20:23,760 --> 00:20:26,200
and pulling it out because I 
thought it was just a peculiar 

489
00:20:26,200 --> 00:20:28,600
way that I'm seeing software and
it wouldn't be beneficial to 

490
00:20:28,600 --> 00:20:30,760
anybody. 
What it comes down to is this, 

491
00:20:30,760 --> 00:20:33,440
and essentially when you look at
a class or a set of classes, 

492
00:20:34,000 --> 00:20:36,360
there are places where it's 
easier to go and actually sort 

493
00:20:36,360 --> 00:20:40,160
of replace things, replace 
behavior than other places, 

494
00:20:40,240 --> 00:20:42,640
right? 
So let's say you have a method 

495
00:20:42,640 --> 00:20:46,080
and it's basically doing 
something crazy with IO and you 

496
00:20:46,080 --> 00:20:47,840
want to get it out of your way 
so you can write tests for the 

497
00:20:47,840 --> 00:20:49,640
class without actually doing the
IO, right? 

498
00:20:50,160 --> 00:20:52,800
If it's a virtual method, right,
you can basically go ahead and 

499
00:20:52,800 --> 00:20:55,400
override it in the subclass and 
then it's out of your way. 

500
00:20:55,960 --> 00:20:58,600
So that part of the method is a 
scene. 

501
00:20:58,600 --> 00:21:01,520
It's kind of like the seam on 
your shirt is a natural 

502
00:21:01,520 --> 00:21:02,320
breaking. 
Point. 

503
00:21:02,600 --> 00:21:05,320
We can actually go and replace 
one thing with another, replace 

504
00:21:05,320 --> 00:21:08,080
one behavior with another. 
It's interesting about this 

505
00:21:08,080 --> 00:21:09,960
because if you start to 
categorize all the seams, 

506
00:21:09,960 --> 00:21:11,440
there's just like lots and. 
Lots of them. 

507
00:21:12,000 --> 00:21:15,040
But it's an opportunistic way of
looking at software. 

508
00:21:15,040 --> 00:21:18,880
You go and say, what can I do to
actually without changing things

509
00:21:18,880 --> 00:21:22,560
drastically, be able to go and 
get areas where I can get 

510
00:21:22,560 --> 00:21:25,560
understanding and coverage? 
Because quite often it's like 

511
00:21:25,560 --> 00:21:27,560
you're, you know, if you're 
going to make a change and you 

512
00:21:27,560 --> 00:21:30,280
don't have all day to go and 
like refactor everything, you're

513
00:21:30,640 --> 00:21:33,880
going to have to go and get that
change in in a way which is not 

514
00:21:33,880 --> 00:21:37,200
going to be disruptive has very 
high quality things along those 

515
00:21:37,240 --> 00:21:39,120
lines. 
And it just might be a spot 

516
00:21:39,120 --> 00:21:40,480
change and it's good to know 
where that's. 

517
00:21:40,480 --> 00:21:44,800
Possible so. 
Is this same concept similar to 

518
00:21:44,800 --> 00:21:48,000
the kind of strategy when people
doing micro service, you know, 

519
00:21:48,160 --> 00:21:51,040
or re architecting certain parts
of the API or their service? 

520
00:21:51,920 --> 00:21:53,480
Not really. 
I mean, to me, it's like with 

521
00:21:53,480 --> 00:21:56,000
Strangler, it's kind of like 
you're how what you're doing is 

522
00:21:56,000 --> 00:21:57,440
you're kind of like building 
things in parallel. 

523
00:21:57,440 --> 00:21:59,760
You're diverting flow to 1 area 
of the system so you can go 

524
00:21:59,760 --> 00:22:03,520
build out another one. 
And it's like my favorite before

525
00:22:03,520 --> 00:22:05,560
it was even sort of like written
up as a pattern. 

526
00:22:05,560 --> 00:22:09,000
It's like I used to live in 
Miami, FL and there's like this 

527
00:22:09,000 --> 00:22:12,240
giant bridge, this seven mile 
bridge that goes from South. 

528
00:22:12,240 --> 00:22:14,600
Florida to Key West. 
And it was kind of funny because

529
00:22:14,600 --> 00:22:17,360
many years ago what they did is 
they're kind of like, OK, we've 

530
00:22:17,360 --> 00:22:19,920
got the old one, we're going to 
build a new one next to it, and 

531
00:22:19,920 --> 00:22:21,840
then we're going to go and tear 
down the old one, right? 

532
00:22:22,320 --> 00:22:24,200
And it's just, you know, I 
looked this up one time. 

533
00:22:24,200 --> 00:22:26,880
I think it's like parallel 
replacement is the term that 

534
00:22:26,880 --> 00:22:29,720
people use in other engineering 
disciplines, you know, this kind

535
00:22:29,720 --> 00:22:30,960
of thing. 
But generally, that's what 

536
00:22:31,000 --> 00:22:34,040
strangler fig is. 
It's just this thing of going 

537
00:22:34,040 --> 00:22:37,720
actually sort of selectively 
rewriting areas by going to 

538
00:22:37,720 --> 00:22:40,240
allow yourself to go and have 
the old path to fall back on. 

539
00:22:40,600 --> 00:22:43,400
So in terms of seams, I guess 
you do have to find seams in 

540
00:22:43,400 --> 00:22:45,600
order to actually understand 
where you can make these 

541
00:22:45,600 --> 00:22:47,040
diversion points. 
So I guess that's the 

542
00:22:47,040 --> 00:22:50,400
commonality, right? 
Thanks for the clarification. 

543
00:22:50,840 --> 00:22:54,160
One thing that is always very 
tightly coupled right with the 

544
00:22:54,280 --> 00:22:57,360
legacy code is this practice 
called refactoring or you know, 

545
00:22:57,360 --> 00:22:59,320
writing tests, maybe TDD as 
well. 

546
00:22:59,600 --> 00:23:03,440
So maybe in your view, right, is
it very important for us to be 

547
00:23:03,440 --> 00:23:06,720
able to do refactoring right or 
refactoring well? 

548
00:23:07,000 --> 00:23:09,840
Should we also read Martin 
Fowler's book in order to be 

549
00:23:09,840 --> 00:23:11,320
able to tackle legacy code 
better? 

550
00:23:12,160 --> 00:23:13,960
Totally. 
I think it's really, it's a 

551
00:23:13,960 --> 00:23:15,440
great book and it's kind of 
funny. 

552
00:23:15,880 --> 00:23:17,880
My daughter many years ago had a
friend who was seen by getting 

553
00:23:17,880 --> 00:23:20,520
into programming and he's like, 
oh, what should I do? 

554
00:23:20,520 --> 00:23:22,960
What should I do when I give him
a copy of the book refactoring. 

555
00:23:23,600 --> 00:23:25,760
And the reason I did this was 
kind of like there was, I think 

556
00:23:26,440 --> 00:23:28,880
it was Ralph Johnson who said 
this many, many years ago when 

557
00:23:28,880 --> 00:23:31,520
the book first came out. 
He said it's kind of interesting

558
00:23:31,520 --> 00:23:34,360
that basically if you want to 
teach good design, basically 

559
00:23:34,360 --> 00:23:37,160
teach people the things to avoid
and everything that's left is 

560
00:23:37,160 --> 00:23:39,200
good design. 
And that's really the way the 

561
00:23:39,200 --> 00:23:41,160
book is organized. 
It's kind of like OK, here's all

562
00:23:41,160 --> 00:23:42,040
these code. 
Smells. 

563
00:23:42,640 --> 00:23:44,920
And your job is to go and look 
at these code smokes and get rid

564
00:23:44,920 --> 00:23:46,840
of them. 
And if you do, you know you're 

565
00:23:46,840 --> 00:23:48,320
done to be better than it was 
before. 

566
00:23:48,320 --> 00:23:51,040
It's a great way of going and 
conveying design sense, you 

567
00:23:51,040 --> 00:23:53,160
know, kind of like what is 
better than the other thing, 

568
00:23:53,200 --> 00:23:55,840
right? 
So I think it's a very valuable 

569
00:23:55,840 --> 00:23:57,760
thing just in terms of 
understanding systems. 

570
00:23:58,360 --> 00:24:01,720
But in general terms of dealing 
with systems, it's extremely 

571
00:24:01,720 --> 00:24:05,200
valuable because refactoring is 
all about clarifying things to 

572
00:24:05,200 --> 00:24:07,800
the point where basically you 
can understand them and where 

573
00:24:07,800 --> 00:24:10,960
change becomes easier. 
It's not just refactoring 

574
00:24:10,960 --> 00:24:14,440
itself, but understanding my 
predecessors like the code 

575
00:24:14,440 --> 00:24:17,480
smells I mentioned, but also 
design principles so you kind of

576
00:24:17,480 --> 00:24:19,560
understand. 
What direction to carry things 

577
00:24:19,560 --> 00:24:21,520
in. 
And once you have that, you 

578
00:24:21,520 --> 00:24:23,640
know, you're going to just be 
able to go and sort of like make

579
00:24:23,640 --> 00:24:26,360
things better for yourself in 
the future and the people around

580
00:24:26,360 --> 00:24:27,760
you. 
I mean, that's a wonderful 

581
00:24:27,760 --> 00:24:30,000
thing. 
In terms of the structure of 

582
00:24:30,040 --> 00:24:34,080
automated tests, do you have any
suggestion or should we also 

583
00:24:34,080 --> 00:24:36,920
still refer to the like test 
pyramid or maybe something 

584
00:24:36,920 --> 00:24:38,920
around that? 
Or is there any kind of like 

585
00:24:39,120 --> 00:24:41,360
suggestion that you would 
advocate people when dealing 

586
00:24:41,360 --> 00:24:43,720
with legacy code? 
Well, I think for the most part,

587
00:24:43,720 --> 00:24:46,440
1 of the things that's kind of 
funny is that there was like BDD

588
00:24:46,440 --> 00:24:48,800
behavior driven development that
came out many years ago, right? 

589
00:24:48,800 --> 00:24:50,880
And one of the interesting 
things there is they were 

590
00:24:50,880 --> 00:24:53,480
concentrating on like high level
behaviors and sort of writing 

591
00:24:53,480 --> 00:24:56,040
tests that would deal with 
collaborations of classes at. 

592
00:24:56,040 --> 00:24:58,200
Once and it. 
Took me a long while to realize 

593
00:24:58,200 --> 00:25:00,280
that, you know, I'd run into 
people all the time. 

594
00:25:00,280 --> 00:25:03,520
They're writing like one test 
case class per test per class, 

595
00:25:03,520 --> 00:25:05,640
right? 
And that you're in this weird 

596
00:25:05,640 --> 00:25:08,400
situation with that. 
But invariably, you know, when 

597
00:25:08,400 --> 00:25:10,880
I'm working with legacy systems,
I'm trying to find some vantage 

598
00:25:10,880 --> 00:25:13,680
point I can write tests at, 
which isn't too far from the 

599
00:25:13,680 --> 00:25:16,560
behavior I'm actually going and 
covering, but goes and covers, 

600
00:25:16,600 --> 00:25:18,480
you know, the behaviors that I 
care about, right? 

601
00:25:19,000 --> 00:25:21,800
And these clusters are really 
more than just one class quite 

602
00:25:21,800 --> 00:25:23,680
often, right? 
That's just the way things go. 

603
00:25:24,080 --> 00:25:27,640
So I think that the conversation
we have about whether something 

604
00:25:27,640 --> 00:25:31,480
is a unit test or an integration
test is not terribly productive 

605
00:25:31,480 --> 00:25:32,640
in a way. 
I think it's really about 

606
00:25:32,640 --> 00:25:35,200
testing behaviors. 
And you know, there's many other

607
00:25:35,200 --> 00:25:36,480
people saying this as well as I 
am. 

608
00:25:37,200 --> 00:25:39,520
It's just a really valuable 
thing to go and look at is that 

609
00:25:39,520 --> 00:25:42,080
you're testing behaviors. 
So you need to go and find the 

610
00:25:42,080 --> 00:25:44,640
places where it's best to do 
that and kind of move forward 

611
00:25:44,640 --> 00:25:46,920
with things. 
So testing pyramid, you've got a

612
00:25:46,920 --> 00:25:49,040
unit and you go all the way up 
to like acceptance. 

613
00:25:49,040 --> 00:25:52,040
And stuff like that. 
I guess the thing to say is that

614
00:25:52,400 --> 00:25:54,560
you can. 
Basically, the lower level tests

615
00:25:54,560 --> 00:25:55,720
that you have are things that 
you build. 

616
00:25:55,720 --> 00:25:57,640
Upon in terms of understanding 
the system. 

617
00:25:58,280 --> 00:26:00,200
And there's no way. 
Generally to go and have tests 

618
00:26:00,200 --> 00:26:02,680
at an extremely high level and 
cover everything you care about,

619
00:26:02,720 --> 00:26:04,840
right? 
So it's kind of like I try to 

620
00:26:04,840 --> 00:26:07,680
concentrate on the lower levels 
and then know that's to make the

621
00:26:07,680 --> 00:26:09,400
higher levels. 
Easier when I need to go 

622
00:26:09,400 --> 00:26:11,240
approach to this. 
Yep. 

623
00:26:11,560 --> 00:26:14,480
So what about if you mentioned 
something very interesting about

624
00:26:14,480 --> 00:26:16,000
behavior, change of behavior, 
right. 

625
00:26:16,000 --> 00:26:18,840
So I think the business most 
likely will demand a lot of 

626
00:26:18,840 --> 00:26:21,800
changes, right? 
And some program actually are 

627
00:26:21,800 --> 00:26:25,280
not touched because some 
business does not demand it to 

628
00:26:25,280 --> 00:26:27,680
change, right? 
What do you think in terms of 

629
00:26:27,680 --> 00:26:31,120
those kind of code, right, for 
when it happened that we have to

630
00:26:31,120 --> 00:26:33,280
change the code, but there is 
some limited test. 

631
00:26:33,600 --> 00:26:36,560
Is this something that is also 
common in your consulting 

632
00:26:36,560 --> 00:26:38,640
experience, right? 
How should people think about 

633
00:26:38,920 --> 00:26:41,560
code that has been sitting 
around still producing value, 

634
00:26:41,880 --> 00:26:43,160
but one day it has to change, 
right? 

635
00:26:43,160 --> 00:26:45,600
But it's so difficult to change 
because maybe people have left. 

636
00:26:46,440 --> 00:26:48,960
I, I think generally I'm really,
you know, in favor of going, 

637
00:26:48,960 --> 00:26:51,400
actually just really trying to 
go and make your changes 

638
00:26:51,400 --> 00:26:54,520
supported by tents, OK. 
Because even though today it 

639
00:26:54,520 --> 00:26:56,600
looks like nobody's going to 
change this and stuff like that,

640
00:26:56,600 --> 00:26:58,440
it's kind of like it's just the 
safe thing to do. 

641
00:26:58,920 --> 00:27:01,120
The fact that you have that code
around still means enhanced 

642
00:27:01,120 --> 00:27:02,880
value. 
So you don't want to be in a 

643
00:27:02,880 --> 00:27:04,680
situation where you're just 
making it worse. 

644
00:27:04,760 --> 00:27:06,400
Right, but. 
Of course people are going to be

645
00:27:06,400 --> 00:27:08,240
pragmatic about this. 
It really depends upon how much 

646
00:27:08,240 --> 00:27:10,760
other work they have in front of
them and stuff like this. 

647
00:27:10,760 --> 00:27:14,520
But you know, I think even going
through the exercise of like, 

648
00:27:14,840 --> 00:27:16,640
trying to write tests for 
something which doesn't have 

649
00:27:16,640 --> 00:27:19,040
many tests and it's really, 
really difficult, gives you an 

650
00:27:19,040 --> 00:27:22,160
appreciation for, you know, it's
like, OK, I'm never going to do 

651
00:27:22,160 --> 00:27:23,480
this again. 
And none of my team mates. 

652
00:27:23,480 --> 00:27:25,400
Are because we know how bad this
is, right? 

653
00:27:26,000 --> 00:27:27,840
So it's really always a valuable
exercise. 

654
00:27:27,840 --> 00:27:30,040
Try to get the test in place to 
support the change you're going 

655
00:27:30,040 --> 00:27:31,720
to make the. 
Other thing I want to go and 

656
00:27:31,720 --> 00:27:33,720
mention with this is that this 
is not an uncommon thing. 

657
00:27:33,720 --> 00:27:36,480
It's kind of like, you know, 
people in business all the time 

658
00:27:36,480 --> 00:27:38,560
are trying to figure out how 
much to invest in particular 

659
00:27:38,560 --> 00:27:41,160
things in terms of like 
investing in the, you know, the 

660
00:27:41,600 --> 00:27:43,400
current line of business, 
basically going and creating new

661
00:27:43,400 --> 00:27:44,680
lines of. 
Business and stuff along those 

662
00:27:44,720 --> 00:27:46,640
lines. 
And we have the same thing as 

663
00:27:46,640 --> 00:27:48,720
technical people. 
There are no easy answers. 

664
00:27:48,720 --> 00:27:51,400
To this question, I think it's. 
Important to know that just 

665
00:27:51,440 --> 00:27:53,600
going into it, you know? 
Yeah. 

666
00:27:53,840 --> 00:27:57,120
So one thing that could help us 
these days is AI, right? 

667
00:27:57,120 --> 00:27:59,560
So if people dealing with legacy
code, maybe some people will 

668
00:27:59,560 --> 00:28:02,920
play around and try to explain 
this part of the code base, 

669
00:28:02,920 --> 00:28:04,760
right, so that you can actually 
understand it. 

670
00:28:04,960 --> 00:28:07,560
So I know that you're also 
writing this book AI Assisted 

671
00:28:07,560 --> 00:28:09,480
Programming, right? 
So I assume that you have been 

672
00:28:09,480 --> 00:28:12,360
playing a lot with AI recently, 
so maybe let's go there. 

673
00:28:12,640 --> 00:28:16,480
How do you think the role of AI 
in terms of tackling legacy 

674
00:28:16,480 --> 00:28:18,000
code? 
Maybe that's the first question 

675
00:28:18,000 --> 00:28:20,320
before we talk about anything in
general about AI. 

676
00:28:21,160 --> 00:28:23,720
Well, it's really kind of hard 
to go and actually sort of see 

677
00:28:23,720 --> 00:28:25,280
where things are going to go 
because they're changing all the

678
00:28:25,280 --> 00:28:27,040
time, right? 
And I think the thing that 

679
00:28:27,040 --> 00:28:29,120
people are most concerned with 
right now is the hallucination 

680
00:28:29,120 --> 00:28:31,440
problem where it's kind of like 
you ask a question, you get an 

681
00:28:31,440 --> 00:28:33,000
answer, and you just really 
don't know whether it's right or

682
00:28:33,000 --> 00:28:35,280
not. 
And I want to take that as a 

683
00:28:35,280 --> 00:28:36,480
given. 
It's going to get better over 

684
00:28:36,480 --> 00:28:37,680
time. 
But I think the thing that's 

685
00:28:37,680 --> 00:28:41,120
important is really to go and 
understand that if you can't 

686
00:28:41,120 --> 00:28:44,080
trust what's being generated, 
there still is value there. 

687
00:28:44,080 --> 00:28:46,120
And I think a lot of this is 
really about going exploring 

688
00:28:46,120 --> 00:28:48,480
alternatives. 
So it's, you know, if I'm about 

689
00:28:48,480 --> 00:28:51,640
to do something, quite often I'm
like, OK, well, let me go ahead 

690
00:28:51,640 --> 00:28:53,160
and ask for a different way of 
doing this. 

691
00:28:53,760 --> 00:28:55,560
OK, let me ask for three 
different ways of doing this, 

692
00:28:55,680 --> 00:28:58,920
OK, And just compare them side 
by side and understand what's 

693
00:28:58,920 --> 00:29:00,800
possible in this space. 
And quite often good ideas I 

694
00:29:00,800 --> 00:29:03,640
wouldn't have gotten otherwise 
for things that we can verify 

695
00:29:03,640 --> 00:29:06,480
easily, like going and asking a 
question on a particular. 

696
00:29:06,480 --> 00:29:08,120
API and gives you the answer in 
the course. 

697
00:29:08,680 --> 00:29:10,560
You put in place and you find it
very quickly whether it works or

698
00:29:10,560 --> 00:29:11,760
not. 
It's kind of, you know, 

699
00:29:11,760 --> 00:29:15,200
brilliant for that. 
But yeah, I do use it to explain

700
00:29:15,200 --> 00:29:17,600
code to me quite often. 
And I think, God, one thing I 

701
00:29:17,600 --> 00:29:20,760
love is this thing where you can
sort of like, I call it lensing 

702
00:29:20,760 --> 00:29:24,200
and it's kind of like you drop 
in a giant area of code and 

703
00:29:24,200 --> 00:29:26,840
you're kind of like, OK, this 
giant class that I have here, 

704
00:29:26,840 --> 00:29:28,280
what responsibilities does it 
have? 

705
00:29:28,520 --> 00:29:30,920
Right? 
And it goes and gives me a list 

706
00:29:30,920 --> 00:29:32,320
of them. 
And usually it's kind of like 

707
00:29:32,600 --> 00:29:34,840
so, so and you start to 
interrogate and you ask other 

708
00:29:34,840 --> 00:29:36,600
questions about it. 
But I love to do this thing 

709
00:29:36,600 --> 00:29:40,120
where you're like, OK, you gave 
me 10 responsibilities, just 

710
00:29:40,120 --> 00:29:42,400
give me 6. 
Basically, if you had to look in

711
00:29:42,400 --> 00:29:44,720
this frost, it's kind of like, 
what are the six most important 

712
00:29:44,720 --> 00:29:47,400
responsibilities? 
And by scaling back and forth 

713
00:29:47,400 --> 00:29:50,200
with this, you start to go and 
understand, you know, where 

714
00:29:50,200 --> 00:29:53,320
perception can change of a class
in terms of what the 

715
00:29:53,320 --> 00:29:55,200
responsibilities are depending 
upon the level that you're 

716
00:29:55,200 --> 00:29:57,840
looking at, right? 
And it can give you ideas for a 

717
00:29:57,840 --> 00:30:00,120
factor. 
And so I find that very, very 

718
00:30:00,120 --> 00:30:02,080
useful. 
In a strategy so. 

719
00:30:02,560 --> 00:30:04,080
There's a ton of other little 
things like that. 

720
00:30:04,160 --> 00:30:05,200
They're kind of, you know, 
handy. 

721
00:30:05,240 --> 00:30:07,680
Yeah. 
So I think these days a lot of 

722
00:30:07,680 --> 00:30:10,320
programmers have been playing 
around with AII personally also 

723
00:30:10,320 --> 00:30:11,920
have used it. 
So I think you mentioned about 

724
00:30:11,920 --> 00:30:14,800
hallucination problem, right? 
I think it's also one of the 

725
00:30:14,800 --> 00:30:17,280
risks. 
Would AI also create more legacy

726
00:30:17,280 --> 00:30:18,960
code? 
Because like some people will 

727
00:30:18,960 --> 00:30:21,840
just take it as it is, right? 
And then just plug it in and 

728
00:30:21,880 --> 00:30:24,160
maybe deploy it without even of 
course has to verify it. 

729
00:30:25,080 --> 00:30:27,600
Of course there's something it's
the get clear report. 

730
00:30:27,600 --> 00:30:29,440
I think one of the things that 
they were mentioning there is it

731
00:30:29,440 --> 00:30:31,920
seems like there's a lot more 
churn of code. 

732
00:30:31,920 --> 00:30:34,480
Code's being put in public repos
much faster. 

733
00:30:34,840 --> 00:30:37,240
There's much more churn change 
after task fund, right? 

734
00:30:37,680 --> 00:30:39,320
Yeah. 
I mean, we're just going to go 

735
00:30:39,320 --> 00:30:41,840
and end up in the space for a 
period of time and everything. 

736
00:30:42,320 --> 00:30:44,400
The thing that's tough is that 
it's kind of like it's shifting 

737
00:30:44,400 --> 00:30:45,200
the balance. 
In a way. 

738
00:30:45,200 --> 00:30:48,120
It's kind of like it's easier to
write code and it's a bit hard 

739
00:30:48,120 --> 00:30:50,320
to understand. 
And I think for me, I'm always 

740
00:30:50,320 --> 00:30:52,600
dealing with this fatigue issue.
It's like I'll look for three. 

741
00:30:52,600 --> 00:30:53,800
Different ways of doing 
something. 

742
00:30:54,320 --> 00:30:56,840
And then I'm doing code review 
for all these things and it's 

743
00:30:56,840 --> 00:30:58,760
kind of like, at what point is 
that? 

744
00:30:58,760 --> 00:30:59,880
Productive. 
And what point is that 

745
00:30:59,880 --> 00:31:04,400
counterproductive for me, right?
But it's kind of like we have to

746
00:31:04,520 --> 00:31:06,200
review code that other people 
have written or that we've 

747
00:31:06,200 --> 00:31:08,960
written a long time ago and have
forgotten, and this just goes 

748
00:31:08,960 --> 00:31:10,920
and increases the burden in. 
That space and it's kind of 

749
00:31:10,920 --> 00:31:12,800
tough I. 
Was just saying an area that I 

750
00:31:12,800 --> 00:31:14,440
think is really kind of 
interesting is the entire thing 

751
00:31:14,440 --> 00:31:16,120
of going and writing tests. 
Right, because. 

752
00:31:16,760 --> 00:31:19,120
It's kind of shocked at the 
beginning to see her vendors 

753
00:31:19,120 --> 00:31:20,800
basically go and say, hey, we're
going to write all your tests 

754
00:31:20,800 --> 00:31:21,280
for you. 
Yeah. 

755
00:31:21,440 --> 00:31:23,480
You know, as a TDD guy, you're 
looking at this and you're 

756
00:31:23,480 --> 00:31:25,840
saying, oh, my God, no, Right. 
But for characterization 

757
00:31:25,840 --> 00:31:28,560
testing, it's really kind of 
powerful because you know if 

758
00:31:28,560 --> 00:31:32,560
you're not changing the code 
right, it is a document of what 

759
00:31:32,560 --> 00:31:36,120
the behavior currently is, and 
you can go and write have. 

760
00:31:36,120 --> 00:31:39,320
Tests written for this. 
And if they pass, then they are 

761
00:31:39,320 --> 00:31:41,680
actually showing you, you know, 
real behavior. 

762
00:31:42,200 --> 00:31:44,040
And so that's useful. 
I think the thing we have to get

763
00:31:44,040 --> 00:31:46,560
used to with this is the idea 
that tests can be. 

764
00:31:46,560 --> 00:31:49,280
Disposable and temporary 
sometimes and just using the get

765
00:31:49,280 --> 00:31:51,920
insight or to facilitate change.
So I think that's a very 

766
00:31:51,920 --> 00:31:53,200
valuable. 
Thing, right. 

767
00:31:53,200 --> 00:31:55,480
So you mentioned about 
generating test cases, right? 

768
00:31:55,480 --> 00:31:58,040
And also interrogating code, 
explaining code, right. 

769
00:31:58,280 --> 00:32:01,360
What are some of the other use 
cases that you typically use 

770
00:32:01,360 --> 00:32:03,880
when using AI in your maybe 
day-to-day work? 

771
00:32:04,800 --> 00:32:06,280
Well, all the time. 
It's just for exploring 

772
00:32:06,280 --> 00:32:07,920
alternatives. 
You know, for the most part. 

773
00:32:08,000 --> 00:32:10,080
I mean, it's like even things 
that have nothing to do with 

774
00:32:10,080 --> 00:32:11,800
code. 
It's kind of like just, you 

775
00:32:11,800 --> 00:32:13,560
know, it's an interesting thing 
to admit. 

776
00:32:13,560 --> 00:32:15,120
I'm just so curious. 
About things that I have a 

777
00:32:15,120 --> 00:32:17,840
thought about. 
You know, something in culture 

778
00:32:17,840 --> 00:32:19,200
or something and you know, kind 
of like. 

779
00:32:19,200 --> 00:32:21,640
Science and it's like. 
Damn, it's like, you know, it's 

780
00:32:21,640 --> 00:32:25,800
like, how long is the manta 
rays, you know, Fin. 

781
00:32:25,840 --> 00:32:28,400
In the front, you know, it's 
like, oh, it's yeah, they're 

782
00:32:28,440 --> 00:32:31,120
interesting kind of thing. 
So it's, yeah, it's an 

783
00:32:31,120 --> 00:32:33,600
interesting thing. 
I just, I think in general, any 

784
00:32:33,600 --> 00:32:37,040
domain that you want to dig 
into, it's easier to do now, you

785
00:32:37,040 --> 00:32:40,600
know, the advent of search 
browsers gave us a lot more 

786
00:32:40,600 --> 00:32:42,400
ability to go and. 
Discover things and sort of 

787
00:32:42,400 --> 00:32:44,520
learn things. 
And now it's off the charts. 

788
00:32:44,520 --> 00:32:47,440
So I think that's just really, 
you know, incredible so. 

789
00:32:48,080 --> 00:32:50,560
You're writing this book AI 
Assisted Programming, so I think

790
00:32:50,560 --> 00:32:53,080
it's still in progress, right? 
Very early in the process, 

791
00:32:53,080 --> 00:32:55,240
right? 
So what made you decide to write

792
00:32:55,240 --> 00:32:58,880
a book about AI programming? 
Well, it seems like a very 

793
00:32:58,880 --> 00:33:01,120
strange thing to do considering 
the how fast things are moving. 

794
00:33:01,120 --> 00:33:04,040
But I think what was interesting
to me is I felt like it was an 

795
00:33:04,040 --> 00:33:06,840
interesting way of going and 
actually talking more about how 

796
00:33:06,840 --> 00:33:10,400
we work in a way. 
And I felt like there are some 

797
00:33:10,400 --> 00:33:12,320
of the things we confront with 
AI are things we're confronting 

798
00:33:12,320 --> 00:33:13,480
with right now, but haven't we 
talked? 

799
00:33:13,480 --> 00:33:14,560
About all that. 
That's right. 

800
00:33:15,240 --> 00:33:16,920
And you know one of those is 
that. 

801
00:33:16,920 --> 00:33:19,280
Fatigue issue that I mentioned a
little bit earlier, right? 

802
00:33:19,920 --> 00:33:22,080
Let's see, another 1 is really 
the thing that. 

803
00:33:22,080 --> 00:33:24,640
Sometimes you know it's. 
But often you're working in an 

804
00:33:24,640 --> 00:33:26,720
ID and basically gives you code 
suggestions all the time. 

805
00:33:26,720 --> 00:33:29,200
And you're looking at this as 
kind of like, can I accept this?

806
00:33:29,360 --> 00:33:30,840
How much trust can I place in 
this? 

807
00:33:31,280 --> 00:33:33,240
And the same thing is true with 
code that you get from somebody 

808
00:33:33,240 --> 00:33:34,680
else, right? 
Where is my trust? 

809
00:33:35,000 --> 00:33:36,640
How do I focus on this 
particular thing? 

810
00:33:37,160 --> 00:33:38,960
And then there's a general thing
of ideation. 

811
00:33:38,960 --> 00:33:41,320
You know, one of the sections I 
have in the book talks about the

812
00:33:41,320 --> 00:33:44,320
lost potential. 
Basically, you ask the question 

813
00:33:44,320 --> 00:33:46,080
of the AI and you accept the 
first answer. 

814
00:33:46,760 --> 00:33:49,440
Because quite often you just ask
this prompt again, you get a 

815
00:33:49,440 --> 00:33:50,680
different. 
Answer and a different answer 

816
00:33:50,680 --> 00:33:53,720
and a different answer. 
And I find that so valuable 

817
00:33:53,720 --> 00:33:54,760
because it's sort of open to 
the. 

818
00:33:54,760 --> 00:33:57,440
Possibility space in a way. 
And gets you thinking about 

819
00:33:57,440 --> 00:33:59,480
different things that pokes your
mind in a different. 

820
00:33:59,480 --> 00:34:01,160
Direction. 
Which quite often gives you 

821
00:34:01,160 --> 00:34:03,120
better ideas. 
About things and I think that's.

822
00:34:03,640 --> 00:34:05,640
You know, a great thing. 
The other thing as well is that 

823
00:34:05,640 --> 00:34:09,120
basically it makes us better 
question askers, right? 

824
00:34:09,120 --> 00:34:11,040
We get better at it because we 
have to go and sort of ask 

825
00:34:11,040 --> 00:34:15,159
questions to interact with it. 
So it's really a capability 

826
00:34:15,159 --> 00:34:18,040
amplifier. 
So do you think this prom 

827
00:34:18,040 --> 00:34:20,679
engineering thing is one of the 
skill set that any developers 

828
00:34:20,679 --> 00:34:23,719
now need to be able to master? 
I think so. 

829
00:34:23,719 --> 00:34:25,000
I think it's and it's going to 
change. 

830
00:34:25,000 --> 00:34:27,280
So I think with my book, it's 
less of that prompt engineering 

831
00:34:27,280 --> 00:34:30,639
and more bad approach. 
But yeah, it's it's interesting.

832
00:34:30,639 --> 00:34:33,719
I think 1 section I haven't 
written yet, but I gave him an 

833
00:34:33,840 --> 00:34:35,239
online lecture. 
About like a while. 

834
00:34:35,239 --> 00:34:38,480
Back it's just having a mental 
model to have these things work 

835
00:34:38,960 --> 00:34:41,199
at a behavioral level so they 
can help you with your 

836
00:34:41,199 --> 00:34:44,120
prompting, right? 
And just, I can very briefly 

837
00:34:44,120 --> 00:34:47,400
say, it's almost like you can 
imagine you have this giant net,

838
00:34:47,400 --> 00:34:48,840
right? 
And it's kind of like if you ask

839
00:34:48,840 --> 00:34:51,480
a question, it pulls some of 
those things towards you. 

840
00:34:52,040 --> 00:34:53,760
And then basically you ask 
another question, it pulls other

841
00:34:53,760 --> 00:34:56,199
things towards you. 
And quite often the way that you

842
00:34:56,199 --> 00:34:58,040
ask questions doesn't lead to in
a different path. 

843
00:34:58,040 --> 00:35:00,760
So it's kind of like this thing 
of going in, like what are you 

844
00:35:00,760 --> 00:35:02,760
pulling into active memory when 
you're going in? 

845
00:35:02,960 --> 00:35:04,280
Sort of like asking. 
Questions. 

846
00:35:04,800 --> 00:35:06,920
I think you know little things 
like that quite often. 

847
00:35:06,920 --> 00:35:08,800
Make us better at doing these 
things. 

848
00:35:09,720 --> 00:35:11,680
Yeah. 
So I think what 1, I mean, one 

849
00:35:11,680 --> 00:35:14,400
thing that if we always ask 
question and we got different 

850
00:35:14,400 --> 00:35:16,480
answers, right? 
Obviously reading the code is 

851
00:35:16,480 --> 00:35:18,320
like a big cognitive load, 
right? 

852
00:35:18,320 --> 00:35:20,680
We try to understand different 
ways of doing thing, although it

853
00:35:20,680 --> 00:35:23,640
maybe end up the same and also 
at the end of the day, still the

854
00:35:23,640 --> 00:35:26,240
same thing, right? 
So we gotta write the test for 

855
00:35:26,240 --> 00:35:28,040
it. 
So if we don't actually it 

856
00:35:28,040 --> 00:35:29,840
creates a legacy code as well, 
right? 

857
00:35:30,120 --> 00:35:33,160
I think reading code is 
something that I feel is much 

858
00:35:33,160 --> 00:35:35,280
more important these days, 
right, Rather than actually 

859
00:35:35,280 --> 00:35:38,200
writing it because the prompt 
probably could, you know, use a 

860
00:35:38,280 --> 00:35:41,400
natural language and they give 
us a code and you read the code 

861
00:35:41,400 --> 00:35:43,760
instead. 
So in your view, like how can 

862
00:35:43,760 --> 00:35:46,400
people master, you know, reading
the code much better? 

863
00:35:46,400 --> 00:35:49,360
Or maybe sometimes like the 
design is something that is 

864
00:35:49,760 --> 00:35:52,080
sometimes it's not appropriate 
with the larger code base, 

865
00:35:52,080 --> 00:35:54,080
right. 
So what's your take about 

866
00:35:54,080 --> 00:35:57,440
developers taking AI answer and 
just putting in well, I just, I 

867
00:35:58,000 --> 00:35:59,480
feel like everybody. 
Knows this, but I have to say. 

868
00:35:59,520 --> 00:36:02,320
And so I remember like the story
of about like somebody is in 

869
00:36:02,320 --> 00:36:04,960
like high school and they're 
taking mathematics course and 

870
00:36:04,960 --> 00:36:07,560
their teacher goes and says to 
them, you know, there's one 

871
00:36:07,560 --> 00:36:10,120
secret for getting an A to this 
course and everybody's like, oh,

872
00:36:10,120 --> 00:36:12,480
what is it? 
It's like, do your homework, OK,

873
00:36:12,480 --> 00:36:15,120
do the problems, right? 
And I think the same thing is 

874
00:36:15,120 --> 00:36:16,560
true for us in software 
development. 

875
00:36:16,560 --> 00:36:19,560
The secret for a lot of this 
stuff is take smaller steps, 

876
00:36:19,680 --> 00:36:21,520
right? 
So if you are looking at 

877
00:36:21,520 --> 00:36:24,040
generating something, generate 
something small, right? 

878
00:36:24,040 --> 00:36:27,240
If you're trying to understand 
something, paste in something 

879
00:36:27,240 --> 00:36:29,520
that is kind of small and just 
get its take on things and 

880
00:36:29,520 --> 00:36:32,160
you're just trying to understand
what you're bringing, what's 

881
00:36:32,160 --> 00:36:34,640
going on with something, look at
smaller steps and build up from 

882
00:36:34,640 --> 00:36:37,080
the foundations. 
And yeah. 

883
00:36:37,080 --> 00:36:38,600
There's a skill to that sort of 
thing, I think. 

884
00:36:39,160 --> 00:36:41,040
There's another thing which 
hasn't been written up all that 

885
00:36:41,040 --> 00:36:43,000
much that I think it's kind of 
powerful and it has nothing to 

886
00:36:43,000 --> 00:36:45,960
do with AI really. 
And it comes down to basically 

887
00:36:45,960 --> 00:36:49,960
seeing enough systems that you 
develop enough impressions of 

888
00:36:49,960 --> 00:36:51,920
different systems, you start to 
see what's common and what's 

889
00:36:51,920 --> 00:36:54,640
different, right? 
So there's nothing that's a good

890
00:36:54,640 --> 00:36:58,320
substitute for going and having 
very wide experience of many 

891
00:36:58,320 --> 00:37:00,640
different domains. 
And that experience of even if 

892
00:37:00,640 --> 00:37:03,800
you're not hopping from job to 
job to job is just, you know, 

893
00:37:03,800 --> 00:37:05,360
reading. 
There's books, there's open 

894
00:37:05,360 --> 00:37:08,440
source code and stuff like this.
And you start to see how people 

895
00:37:08,440 --> 00:37:10,320
approach problems differently in
different domains. 

896
00:37:10,720 --> 00:37:13,040
And then when you see something 
which is totally atypical to 

897
00:37:13,040 --> 00:37:16,320
you, you have, they call it 
sometimes the coat hangers. 

898
00:37:16,320 --> 00:37:18,520
It's kind of like you're given 
all this information and you're 

899
00:37:18,520 --> 00:37:21,640
looking for the things that are 
like the basis that you can use 

900
00:37:21,640 --> 00:37:23,720
to sort of organize your 
knowledge as you get more 

901
00:37:24,080 --> 00:37:25,360
knowledge of the thing you're 
looking at. 

902
00:37:26,040 --> 00:37:28,200
And yeah, I think that's a 
valuable skill to develop as 

903
00:37:28,280 --> 00:37:30,280
well. 
So, yeah, you mentioned about 

904
00:37:30,280 --> 00:37:32,280
understanding domain. 
Yeah, I still think that AI 

905
00:37:32,280 --> 00:37:33,800
still hasn't reached there yet, 
right? 

906
00:37:33,800 --> 00:37:36,840
So maybe like building the whole
application end to end, right? 

907
00:37:37,160 --> 00:37:40,960
And also maybe building a more 
distributed complex systems is 

908
00:37:40,960 --> 00:37:42,640
something that they haven't 
reached out yet. 

909
00:37:43,040 --> 00:37:47,440
So in your view, what is the 
ideal, you know, stage where we 

910
00:37:47,440 --> 00:37:51,160
should rely on AI more versus 
something that use human 

911
00:37:51,160 --> 00:37:54,480
creativity or brain more? 
I think it's really for the 

912
00:37:54,480 --> 00:37:57,000
areas which are low risk, you 
know, and this is kind of funny 

913
00:37:57,000 --> 00:37:58,680
because there's all different 
ways of looking at risk. 

914
00:37:59,440 --> 00:38:01,040
And one of the things I think is
great is actually going to 

915
00:38:01,040 --> 00:38:03,960
develop blower plate code. 
So it's like thinking well back 

916
00:38:03,960 --> 00:38:05,480
about creating like a Chrome 
extension. 

917
00:38:05,480 --> 00:38:08,120
And it's kind of like, OK, just 
ask me to create like a simple 

918
00:38:08,120 --> 00:38:10,080
Chrome extension. 
And it's kind of like, I don't 

919
00:38:10,080 --> 00:38:11,280
need to write all that code. 
It can. 

920
00:38:11,320 --> 00:38:13,200
Basically, I can find it very 
quickly whether it's working or 

921
00:38:13,200 --> 00:38:15,120
not, right? 
But right, we want to 

922
00:38:15,120 --> 00:38:17,440
concentrate on the thing that I 
want the Chrome extension to do,

923
00:38:17,440 --> 00:38:19,880
for instance. 
There's that, but there's also 

924
00:38:19,880 --> 00:38:21,640
things like that that should be 
like in house. 

925
00:38:21,640 --> 00:38:25,400
Tools and stuff like that. 
Where you have some confidence 

926
00:38:25,400 --> 00:38:28,520
that somebody's going to find a 
problem before it causes loss of

927
00:38:28,520 --> 00:38:31,640
life or money, right? 
That's a very important thing, 

928
00:38:31,680 --> 00:38:33,520
you know, so I think it's 
finding these low risk 

929
00:38:33,520 --> 00:38:36,640
environments and you know, a 
place where this actually kind 

930
00:38:36,640 --> 00:38:40,120
of works very well is if you are
creating tools to go and help 

931
00:38:40,120 --> 00:38:41,680
you do. 
Things with your code for 

932
00:38:41,680 --> 00:38:43,960
instance. 
And I guess you know, also 

933
00:38:43,960 --> 00:38:46,880
things like quite often I'm feel
like I'm rediscovering shell 

934
00:38:46,880 --> 00:38:48,400
programming in a way. 
I've done a lot of shell 

935
00:38:48,400 --> 00:38:50,960
programming in my in the past, 
but when you think about it, 

936
00:38:50,960 --> 00:38:55,560
shell is perfect for AI 
generation in the sense that 

937
00:38:56,000 --> 00:38:58,040
you're basically building from 
these bigger components, the 

938
00:38:58,040 --> 00:39:00,200
commands. 
And it's very easy to find out 

939
00:39:00,200 --> 00:39:03,440
exactly what a command does. 
It has wider knowledge of these 

940
00:39:03,440 --> 00:39:05,360
things than we do. 
And you can see very quickly 

941
00:39:05,360 --> 00:39:08,200
whether what it's producing is 
right or not right. 

942
00:39:08,200 --> 00:39:10,000
And it's usually. 
Very brief and you can see with 

943
00:39:10,000 --> 00:39:12,240
others. 
So going and doing that for my 

944
00:39:12,240 --> 00:39:13,440
work. 
Quite often it's not a very 

945
00:39:13,520 --> 00:39:15,800
valuable thing. 
So yeah, here's that. 

946
00:39:16,760 --> 00:39:18,720
I think one topic associated 
with AI, with software 

947
00:39:18,720 --> 00:39:21,480
programming is that a lot of 
people are worried about their 

948
00:39:21,480 --> 00:39:24,040
jobs, right? 
Or the roles will evolve quite a

949
00:39:24,040 --> 00:39:27,560
lot such that you are becoming 
obsolete or redundant, right? 

950
00:39:27,840 --> 00:39:31,280
We also see some maybe hype 
technologies like Devin where 

951
00:39:31,360 --> 00:39:34,160
they claim they can write code 
just by itself. 

952
00:39:35,160 --> 00:39:37,960
So what is your view about, you 
know, all these worry about 

953
00:39:37,960 --> 00:39:41,240
developers having to maybe 
upskill themselves or maybe 

954
00:39:41,240 --> 00:39:43,040
getting redundant or things like
that. 

955
00:39:43,040 --> 00:39:45,640
So is that something that we 
have to fear about? 

956
00:39:46,680 --> 00:39:48,520
Well, I think where people are 
getting much more realistic now.

957
00:39:48,520 --> 00:39:50,240
I think in the very beginning 
people start doing and 

958
00:39:50,240 --> 00:39:52,560
extrapolating and they just get 
completely. 

959
00:39:52,560 --> 00:39:54,400
Freaked out by the 
possibilities, right? 

960
00:39:54,840 --> 00:39:56,560
But I think many. 
Developers now have enough 

961
00:39:56,560 --> 00:39:58,360
experience what they are, they 
realize it's not going to 

962
00:39:58,360 --> 00:40:01,480
replace many times soon, right? 
It's basically at the end of the

963
00:40:01,480 --> 00:40:05,440
day, you know, it's kind of like
in the legal system, you can't 

964
00:40:05,440 --> 00:40:07,360
go and say, oh, the algorithm 
did it. 

965
00:40:07,360 --> 00:40:10,560
And it's like, no, a person who 
works at a company did this. 

966
00:40:10,560 --> 00:40:13,240
At the end of the day, we are 
responsible for what we do. 

967
00:40:13,320 --> 00:40:14,400
Right. 
And I think that's the thing 

968
00:40:14,400 --> 00:40:16,160
that's. 
You know, really important for 

969
00:40:16,160 --> 00:40:17,960
us to go and recognize that 
there has to be somebody in the 

970
00:40:17,960 --> 00:40:20,480
seat of responsibility. 
You have to understand what 

971
00:40:20,480 --> 00:40:23,040
you're creating as well. 
So I think we're going to have a

972
00:40:23,040 --> 00:40:26,240
place for a long time and I 
can't remember the name of the 

973
00:40:26,240 --> 00:40:26,920
book. 
I wish I. 

974
00:40:26,920 --> 00:40:28,360
Could maybe I'll send it to your
show notes. 

975
00:40:28,360 --> 00:40:30,960
If you do that, but this guy who
basically made the case ages 

976
00:40:30,960 --> 00:40:33,400
ago, it's kind of like we just 
need to see ourselves as problem

977
00:40:33,400 --> 00:40:37,080
solvers and programming is one 
tool to solve a problem, right? 

978
00:40:37,640 --> 00:40:39,920
And sometimes we can solve 
problems without writing code at

979
00:40:39,920 --> 00:40:42,040
all. 
And that's great, you know, but 

980
00:40:42,040 --> 00:40:44,480
we have to basically do that 
thing of understanding far 

981
00:40:44,480 --> 00:40:47,240
beyond the code, you know, 
everything around it, what's the

982
00:40:47,240 --> 00:40:49,080
business and all these other 
things because all that. 

983
00:40:49,080 --> 00:40:50,720
Information makes us much more 
effective. 

984
00:40:51,520 --> 00:40:53,280
So I think it's this thing of 
going and expanding. 

985
00:40:53,280 --> 00:40:56,200
Out from our roles to that. 
And I think a lot of people kind

986
00:40:56,200 --> 00:40:58,320
of recognize that that's just. 
Where the future is, and I do 

987
00:40:58,320 --> 00:41:00,920
too, so. 
Thanks for, you know, giving 

988
00:41:00,920 --> 00:41:03,680
your thoughts about this. 
So one technique that I found in

989
00:41:03,680 --> 00:41:06,280
some of your talk or resources 
that you shared before this 

990
00:41:06,400 --> 00:41:09,080
conversation is that one thing 
called pseudo Lang, right? 

991
00:41:09,080 --> 00:41:10,840
I find it quite interesting, 
right? 

992
00:41:10,840 --> 00:41:12,960
So I think for some people who 
may not have heard about it. 

993
00:41:13,160 --> 00:41:15,800
So tell us what is pseudo Lang 
and how can we use it in our, 

994
00:41:15,800 --> 00:41:17,280
you know, day-to-day work with 
AI? 

995
00:41:18,240 --> 00:41:19,960
Well, it's an interesting thing.
This is going to take a minute 

996
00:41:19,960 --> 00:41:22,720
or two to explain, right? 
But I remember I think I found 

997
00:41:22,720 --> 00:41:25,640
it through a web search and Slay
wrote a couple of media posts 

998
00:41:25,640 --> 00:41:27,720
about a thing they called pseudo
Lang. 

999
00:41:27,720 --> 00:41:31,360
So it's SUDO Lang, right? 
Just as Apana. 

1000
00:41:31,440 --> 00:41:35,160
You know, what the author was 
saying was that it'd be great to

1001
00:41:35,160 --> 00:41:38,040
go and actually create a 
language that's kind of like a 

1002
00:41:38,040 --> 00:41:41,120
programming language that 
basically you can feed into an 

1003
00:41:41,360 --> 00:41:45,000
LLM that would go and generate 
code for you and do translations

1004
00:41:45,000 --> 00:41:48,800
and all these other things. 
And so he described the language

1005
00:41:48,800 --> 00:41:51,040
and had interesting features 
like constraints and stuff like 

1006
00:41:51,040 --> 00:41:54,200
this and a very familiar syntax.
And it wasn't quite like any 

1007
00:41:54,200 --> 00:41:56,440
other language. 
It seemed like it was at a bit 

1008
00:41:56,440 --> 00:41:59,480
of a higher level because he 
could replace greater than with 

1009
00:41:59,480 --> 00:42:01,680
like the words greater than, for
instance, and all this stuff, 

1010
00:42:01,680 --> 00:42:03,560
right? 
But the further you write down 

1011
00:42:03,560 --> 00:42:05,880
in the post, the further you 
realize what had happened. 

1012
00:42:06,480 --> 00:42:10,000
What he did is he asked ChatGPT.
Hey, I want to have a language 

1013
00:42:10,000 --> 00:42:11,880
which makes it easy for me to 
talk to you about. 

1014
00:42:11,880 --> 00:42:13,440
Programming and get the things 
that I want. 

1015
00:42:14,360 --> 00:42:16,720
Give me a language that does 
this and actually, you know, 

1016
00:42:16,720 --> 00:42:19,800
that's what the system did. 
He created pseudo like, right? 

1017
00:42:20,360 --> 00:42:24,280
And then it was even interesting
and more tricky because he said,

1018
00:42:24,880 --> 00:42:26,040
you know, I asked for this 
again. 

1019
00:42:26,040 --> 00:42:28,760
And I asked for it. 
It's kind of like, can you give 

1020
00:42:28,760 --> 00:42:31,240
me a syntax to work for this 
sort of work even if I didn't 

1021
00:42:31,240 --> 00:42:32,320
tell you what the speck of 
pseudo. 

1022
00:42:32,320 --> 00:42:35,320
Language was right. 
And it's interesting because 

1023
00:42:35,320 --> 00:42:37,040
it's like it goes full circle at
that point. 

1024
00:42:37,040 --> 00:42:39,920
So it's really more like 
pointing in a direction. 

1025
00:42:39,920 --> 00:42:41,520
I don't think it's really like 
the language. 

1026
00:42:41,520 --> 00:42:43,480
To learn or anything? 
And in the book I'm writing 

1027
00:42:43,480 --> 00:42:46,280
right now, I basically talk 
about something I call pigeon 

1028
00:42:46,280 --> 00:42:49,600
specification, which is really 
kind of like a pigeon language 

1029
00:42:49,600 --> 00:42:52,480
is a language you know, that 
people from different languages 

1030
00:42:52,760 --> 00:42:54,240
adopt. 
They can communicate with each 

1031
00:42:54,240 --> 00:42:55,400
other. 
It's usually some subset. 

1032
00:42:55,400 --> 00:42:58,880
Of two languages. 
But I can write like a test case

1033
00:42:58,880 --> 00:43:03,240
using just a very brief test 
colon dot dot dot dot, you know 

1034
00:43:03,400 --> 00:43:06,600
this, assert that, right? 
I can type that in and basically

1035
00:43:06,600 --> 00:43:08,840
say, give this to me and J unit 
and it just gives it to me. 

1036
00:43:08,840 --> 00:43:10,880
And sometimes it's wrong. 
But I'm dealing with something 

1037
00:43:10,880 --> 00:43:13,000
small enough I can actually see 
what the results are, right? 

1038
00:43:13,480 --> 00:43:16,960
So I think we're going to see an
off lot more of this people 

1039
00:43:16,960 --> 00:43:19,600
developing like private 
languages in much the same way 

1040
00:43:19,600 --> 00:43:20,920
that you might with people you 
work with. 

1041
00:43:21,400 --> 00:43:23,960
I remember hearing about a 
musical group many years ago and

1042
00:43:24,440 --> 00:43:26,360
somebody knew joined the band 
and they had serious trouble 

1043
00:43:26,360 --> 00:43:29,000
because the other musicians in 
the back could talk to each 

1044
00:43:29,000 --> 00:43:31,480
other, winking a nod. 
And this guy was new. 

1045
00:43:31,480 --> 00:43:32,720
He had no. 
Idea what they were where? 

1046
00:43:33,040 --> 00:43:35,000
They were going and what they 
were doing because these people 

1047
00:43:35,000 --> 00:43:36,800
knew they, they knew things 
about each other. 

1048
00:43:36,800 --> 00:43:39,280
And I think we're going to go 
and get into that symbiotic 

1049
00:43:39,280 --> 00:43:41,800
state with the coding assistants
that we are using. 

1050
00:43:41,920 --> 00:43:46,240
So speaking about symbiotic, you
know, relationship, right, will 

1051
00:43:46,240 --> 00:43:51,080
AI be appropriate for us to do 
this TDD cycle where maybe we 

1052
00:43:51,080 --> 00:43:54,440
generate test 1st and maybe AI 
help to verify and also create 

1053
00:43:54,440 --> 00:43:57,720
the business code or maybe vice 
versa that kind of stuff like a 

1054
00:43:57,720 --> 00:44:01,280
real pair developer or those 
virtual, right. 

1055
00:44:01,440 --> 00:44:04,200
So is it something that you have
seen it working before? 

1056
00:44:05,080 --> 00:44:07,160
Yeah, I'm done and I basically 
do and I quite often get 

1057
00:44:07,160 --> 00:44:08,400
frustrated. 
I've seen people. 

1058
00:44:08,400 --> 00:44:11,840
Kind of carry a bit further. 
Loewen Falco is basically some 

1059
00:44:11,840 --> 00:44:14,720
videos ongoing and doing this, 
but I think it's, it's a 

1060
00:44:14,720 --> 00:44:16,360
powerful approach. 
You just need to get the bugs 

1061
00:44:16,360 --> 00:44:19,000
out of it to some degree. 
The thing is that essentially 

1062
00:44:19,000 --> 00:44:21,320
it's like you write tests and 
then you can go and sort of like

1063
00:44:21,320 --> 00:44:23,040
how to generate code to satisfy 
the test. 

1064
00:44:23,520 --> 00:44:26,560
What I've been finding is that 
essentially if you give it a 

1065
00:44:26,560 --> 00:44:28,920
whole bunch of tests at once, 
quite often it's going to do a 

1066
00:44:28,920 --> 00:44:31,760
reasonably good job for you and 
you can run the test to see 

1067
00:44:31,760 --> 00:44:34,720
whether it has or not, right? 
But quite often I've done this 

1068
00:44:34,720 --> 00:44:37,080
thing where I basically start to
go and say, OK, here's a test, 

1069
00:44:37,400 --> 00:44:39,160
here's another test, here's 
another test, here's another 

1070
00:44:39,160 --> 00:44:42,920
test and have it generate code. 
And I'm asking it to go and 

1071
00:44:42,920 --> 00:44:47,280
always make sure that when it 
generates code that it's going 

1072
00:44:47,280 --> 00:44:49,440
to satisfy all the tests I've 
shown so far. 

1073
00:44:49,800 --> 00:44:52,800
And it's kind of like a little 
bit problematic with that right 

1074
00:44:52,840 --> 00:44:53,920
now. 
I'm asked to do with I guess 

1075
00:44:54,240 --> 00:44:55,880
context window problems and 
stuff on your. 

1076
00:44:55,880 --> 00:44:58,520
So I think, you know, it's 
moving forward in a good way. 

1077
00:44:58,520 --> 00:45:01,280
I think there's so much you can 
learn just by going and taking a

1078
00:45:01,280 --> 00:45:03,760
project and going and deleting 
all the source code and just 

1079
00:45:03,760 --> 00:45:06,600
giving all the tests to an AI 
assistant saying write the code 

1080
00:45:06,600 --> 00:45:08,640
for me, right? 
The things that it's missing are

1081
00:45:08,640 --> 00:45:11,800
things that you were missing in.
Coverage for that kind of thing.

1082
00:45:12,320 --> 00:45:14,600
It's, yeah, there's a lot of 
interesting stuff we can do in 

1083
00:45:14,600 --> 00:45:16,440
that space. 
It's going to get better and I 

1084
00:45:16,440 --> 00:45:18,320
think TDD. 
Is still going to be around so. 

1085
00:45:19,280 --> 00:45:21,360
So you mentioned about context 
window, maybe some people are 

1086
00:45:21,360 --> 00:45:24,800
not familiar with the concept 
and I know that some of the LLM 

1087
00:45:24,800 --> 00:45:27,600
newer models always mentioned 
about this context thing which 

1088
00:45:27,600 --> 00:45:29,240
gets larger and larger and 
larger. 

1089
00:45:29,240 --> 00:45:32,000
Tell us what's the difference 
with having larger context 

1090
00:45:32,000 --> 00:45:34,560
window? 
Well, it's like when you look at

1091
00:45:34,560 --> 00:45:37,120
how an LLM works, it's kind of 
like it's rather deep and 

1092
00:45:37,120 --> 00:45:39,080
involved many layers of neural 
networks. 

1093
00:45:39,560 --> 00:45:42,720
But it seems that at least for a
little while ago, when it 

1094
00:45:42,720 --> 00:45:44,920
basically goes and does 
inference like of your prompt 

1095
00:45:44,920 --> 00:45:47,920
and processing and things, it's 
doing almost like a quadratic 

1096
00:45:47,920 --> 00:45:50,200
operation. 
It's just like the more the 

1097
00:45:50,200 --> 00:45:52,280
needs in memory, the longer it's
going to go and take. 

1098
00:45:52,280 --> 00:45:54,760
To go and do things. 
And so for that reason, it's 

1099
00:45:54,760 --> 00:45:57,120
kind of like you have this thing
that happens quite often where 

1100
00:45:57,720 --> 00:46:00,160
you're working in a session, and
then after a period of time, 

1101
00:46:00,160 --> 00:46:03,080
you're asking it to do something
and then it goes and gives you 

1102
00:46:03,080 --> 00:46:05,360
an answer, which makes it 
obvious that it doesn't know 

1103
00:46:05,840 --> 00:46:07,920
what you gave it like 10 minutes
ago, right? 

1104
00:46:08,480 --> 00:46:10,680
And so it's kind of like, I 
called this to like performance 

1105
00:46:10,680 --> 00:46:13,400
degradation, right? 
That just has to do with the 

1106
00:46:13,400 --> 00:46:15,200
physics pretty much. 
You know, like how 

1107
00:46:15,560 --> 00:46:19,000
computationally complex. 
These operations happen to be so

1108
00:46:19,000 --> 00:46:21,360
it puts limitations on how much 
we can go and basically do it 

1109
00:46:21,360 --> 00:46:23,120
once. 
The thing is, I've heard 

1110
00:46:23,120 --> 00:46:25,400
recently that some of the newer 
models, I think Gemini. 

1111
00:46:26,080 --> 00:46:28,360
Claims that it has like, you 
know, an infinite context 

1112
00:46:28,360 --> 00:46:30,360
window. 
And I haven't really kept up in 

1113
00:46:30,400 --> 00:46:32,520
that space to go and see whether
those things still have that 

1114
00:46:32,520 --> 00:46:34,000
issue. 
I know some of the tools I'm 

1115
00:46:34,000 --> 00:46:35,520
using today still have that. 
Issue. 

1116
00:46:36,080 --> 00:46:39,120
But I think it's going to be 
with us regardless because it's 

1117
00:46:39,120 --> 00:46:43,200
very much like, I took a lot of 
cognitive science in college and

1118
00:46:43,200 --> 00:46:45,200
it's just like the way humans 
interact with things. 

1119
00:46:45,200 --> 00:46:47,760
It's kind of like if I divert 
your attention to over there, 

1120
00:46:48,320 --> 00:46:50,520
it's not going to be immediately
top of mind the thing that we 

1121
00:46:50,520 --> 00:46:52,600
were just talking about and vice
versa, right? 

1122
00:46:53,040 --> 00:46:56,600
We have attention and it's 
relatively fixed because nothing

1123
00:46:56,600 --> 00:46:59,280
can have any attention. 
It's just it violates physics. 

1124
00:46:59,280 --> 00:47:02,160
So we're always going to have 
that thing of kind of like 

1125
00:47:02,560 --> 00:47:04,640
what's in our intent to focus 
and what is not. 

1126
00:47:05,120 --> 00:47:07,720
And I think that basically 
understanding that's very useful

1127
00:47:08,320 --> 00:47:10,320
to being effective with AI right
now. 

1128
00:47:11,120 --> 00:47:13,480
So I guess I hope that's, you 
know, a decent summary. 

1129
00:47:14,200 --> 00:47:17,160
Yep, thanks for explaining that.
So we have spoken a lot of 

1130
00:47:17,160 --> 00:47:19,600
things about AI. 
Any things that we haven't 

1131
00:47:19,600 --> 00:47:23,280
spoken that you figure it out 
recently that people need to 

1132
00:47:23,280 --> 00:47:27,200
know about AI programming. 
It's funny because in writing 

1133
00:47:27,200 --> 00:47:29,640
this, it seems like I've had a 
lot of topics and it's been like

1134
00:47:29,760 --> 00:47:33,080
digging down deep in them. 
So recent isn't really, you 

1135
00:47:33,080 --> 00:47:34,640
know, the best way of going and 
putting. 

1136
00:47:34,640 --> 00:47:35,520
Here's one. 
OK. 

1137
00:47:35,520 --> 00:47:39,000
And I just released on LinkedIn 
a couple of days ago a chapter 

1138
00:47:39,000 --> 00:47:41,640
when it's writing and it's 
something I call way words. 

1139
00:47:41,640 --> 00:47:43,160
And it's kind of a powerful 
idea. 

1140
00:47:43,920 --> 00:47:45,960
And what it comes down to is 
this. 

1141
00:47:45,960 --> 00:47:49,080
It's kind of like supposing 
you're asking, you know, the 

1142
00:47:49,080 --> 00:47:50,760
tool to go to retract or 
something, right? 

1143
00:47:51,200 --> 00:47:52,720
And you write a prompt to go and
do this. 

1144
00:47:53,280 --> 00:47:55,720
And then it's kind of like it 
does send you give it more test 

1145
00:47:55,720 --> 00:47:58,560
cases and you discover you need 
to change the prompt a bit and 

1146
00:47:58,560 --> 00:48:01,000
change it a little bit more. 
At that point, you probably want

1147
00:48:01,000 --> 00:48:02,240
to name this. 
Thing right? 

1148
00:48:02,360 --> 00:48:05,320
You really want to go and say, 
OK, you know, this is a, an 

1149
00:48:05,320 --> 00:48:06,800
operation called da, da, da, da 
da. 

1150
00:48:07,280 --> 00:48:09,920
And then basically you can just 
in English, you know, or your 

1151
00:48:09,920 --> 00:48:13,560
language, just go ahead and just
sort of like use that as a piece

1152
00:48:13,560 --> 00:48:15,280
of new nomenclature in 
terminology. 

1153
00:48:15,880 --> 00:48:17,960
And so it's just like 
introducing a, a method name or 

1154
00:48:17,960 --> 00:48:20,080
a variable. 
One thing you can do sometimes 

1155
00:48:20,080 --> 00:48:23,480
is go and say, OK, please, you 
know, now that I defined this 

1156
00:48:23,480 --> 00:48:26,960
thing, give me a summary prompt,
give me a prompt that I can use 

1157
00:48:26,960 --> 00:48:29,360
to put into another session so 
that we can go and actually do 

1158
00:48:29,360 --> 00:48:32,120
the same operations doesn't 
always work, but it's getting 

1159
00:48:32,120 --> 00:48:34,600
better. 
But I really find a lot of 

1160
00:48:35,120 --> 00:48:37,800
utility in this thing of naming 
things as you go along when 

1161
00:48:37,800 --> 00:48:38,680
you're. 
Working with things. 

1162
00:48:39,320 --> 00:48:41,640
It can just be OK. 
Well this example I just created

1163
00:48:41,640 --> 00:48:45,120
call this response ABC and then 
you can go back and say well 

1164
00:48:45,480 --> 00:48:47,200
when we did. 
ABC that's it, right? 

1165
00:48:47,200 --> 00:48:49,080
It's going and creating these 
handles for going and deal with 

1166
00:48:49,080 --> 00:48:51,760
things. 
And yeah, very useful thing to 

1167
00:48:51,760 --> 00:48:54,440
go and use. 
So speaking about this 

1168
00:48:54,440 --> 00:48:57,320
nomenclature, right, we just 
spoken about the context window 

1169
00:48:57,320 --> 00:49:00,760
in the different sessions. 
Do you have to sometimes copy 

1170
00:49:00,760 --> 00:49:03,200
and paste the prompts that you 
had previously in some of the 

1171
00:49:03,200 --> 00:49:06,240
notes and then when you work on 
a different sessions, maybe some

1172
00:49:06,400 --> 00:49:09,680
couple of days later that you 
have to paste it back, look sort

1173
00:49:09,680 --> 00:49:12,920
of the memory or the cognitive 
thing to the AI brain and then 

1174
00:49:12,920 --> 00:49:14,960
try again. 
Is that something that is also 

1175
00:49:14,960 --> 00:49:17,560
commonly done by people who are 
using AI? 

1176
00:49:18,640 --> 00:49:21,080
I think for the most part I kind
of cheat by going basically 

1177
00:49:21,080 --> 00:49:23,000
making the source code the 
thing, right? 

1178
00:49:23,000 --> 00:49:25,440
It's kind of large. 
If I knows I can transport 

1179
00:49:25,440 --> 00:49:28,120
source code from one session to 
another, that's kind of good. 

1180
00:49:28,120 --> 00:49:30,160
But what I have durable things 
I'm working on. 

1181
00:49:30,640 --> 00:49:33,440
Yeah, it gets down to copying. 
Things back and forth between 

1182
00:49:33,440 --> 00:49:36,240
sessions or just sort of re 
describing something and quite 

1183
00:49:36,240 --> 00:49:38,080
else I can get it back to the 
point where I feel it's useful. 

1184
00:49:38,720 --> 00:49:40,480
So yeah, it's kind of 
problematic with. 

1185
00:49:41,200 --> 00:49:43,280
So I'm looking forward to things
getting a bit better in that 

1186
00:49:43,280 --> 00:49:45,400
space. 
I think there's somebody who's 

1187
00:49:45,400 --> 00:49:47,480
talking about actually doing 
this and calling them skills 

1188
00:49:47,480 --> 00:49:50,240
that you can actually sort of 
like make almost like plug 

1189
00:49:50,240 --> 00:49:52,360
insurance for particular things.
And there's many different ways 

1190
00:49:52,360 --> 00:49:55,560
to going and tuning LMS to go 
and sort of like facilitate 

1191
00:49:55,560 --> 00:49:58,040
this, but to the point where we 
can actually create user 

1192
00:49:58,040 --> 00:49:59,440
defined. 
Skills to move them across 

1193
00:49:59,440 --> 00:50:01,800
sessions if it's valuable. 
The other thing I'll say is that

1194
00:50:01,800 --> 00:50:04,800
even if we have an Internet 
context window, sessions by 

1195
00:50:04,800 --> 00:50:07,560
themselves are so valuable 
because quite often I'll keep 

1196
00:50:07,560 --> 00:50:09,760
one main session and I'll 
basically just create small ones

1197
00:50:09,760 --> 00:50:12,720
I dispose of, right? 
And it's almost like managing 

1198
00:50:12,720 --> 00:50:15,200
tabs in a browser, right? 
It's kind of like, here's the 

1199
00:50:15,200 --> 00:50:17,760
main thing, I'm working and I've
got 567 eights and you have to 

1200
00:50:17,760 --> 00:50:19,280
kind of know when to get rid of 
them and when. 

1201
00:50:19,280 --> 00:50:21,280
To keep them. 
But it's nice to go and have a 

1202
00:50:21,280 --> 00:50:23,400
good separated space. 
We can, actually. 

1203
00:50:23,400 --> 00:50:25,320
Go and do some working things 
and experiments. 

1204
00:50:25,800 --> 00:50:27,560
Without actually sort of 
corrupting or degrading 

1205
00:50:27,560 --> 00:50:28,960
performance. 
And if you have the. 

1206
00:50:28,960 --> 00:50:32,240
Original session you have. 
I know it's a fast changing 

1207
00:50:32,240 --> 00:50:35,200
world these days, right, But any
tools, favorite tools that you 

1208
00:50:35,200 --> 00:50:38,600
use these days, you know, 
related to AI encoding or is it 

1209
00:50:38,600 --> 00:50:40,120
Co piloted? 
It's going to be so weird just 

1210
00:50:40,240 --> 00:50:43,280
there are so you know, Co 
piloted is great, but it's one 

1211
00:50:43,280 --> 00:50:45,600
of the things I kind of am 
drawing the distinction between 

1212
00:50:45,600 --> 00:50:49,880
is that let's see, we're in a 
financial in the world right 

1213
00:50:49,880 --> 00:50:52,200
now. 
The market is in this place 

1214
00:50:52,200 --> 00:50:56,040
where every time that you make a
general LM better, it's kind of 

1215
00:50:56,040 --> 00:50:58,360
like you're kind of eating into 
the space where people do 

1216
00:50:58,360 --> 00:50:59,760
specialty things. 
Right. 

1217
00:51:00,280 --> 00:51:03,280
So it's kind of like you can try
to specialize the tool, but if 

1218
00:51:03,320 --> 00:51:05,720
people can just wait for the 
next general LM to do things, 

1219
00:51:05,720 --> 00:51:08,320
then what's it do right? 
But I think it's starting to 

1220
00:51:08,320 --> 00:51:11,200
separate now and you're starting
to see decent coding tools to 

1221
00:51:11,200 --> 00:51:14,480
have their own utility. 
But what I like to do is even if

1222
00:51:14,480 --> 00:51:17,320
I'm using copilot or I'm using 
code scene or all these other 

1223
00:51:17,720 --> 00:51:22,040
tools is to have my own window 
open in something like cloud, 

1224
00:51:22,040 --> 00:51:25,040
for instance, whatever I 
consider to be the best LM at 

1225
00:51:25,040 --> 00:51:27,160
the moment. 
And basically do my more 

1226
00:51:27,160 --> 00:51:30,640
ideation work in that space 
because they aren't clamped 

1227
00:51:30,640 --> 00:51:32,360
down. 
And by what I mean by that is 

1228
00:51:32,880 --> 00:51:34,960
sometimes you'll be using a tool
and an IDE. 

1229
00:51:34,960 --> 00:51:38,000
And so you'll say, well, give me
three other approaches for going

1230
00:51:38,000 --> 00:51:40,680
and doing this or tell me more 
about this thing in the domain 

1231
00:51:40,680 --> 00:51:43,120
and they'll say, no, I'm sorry, 
I'm here to help you with your 

1232
00:51:43,120 --> 00:51:44,800
code and refactoring. 
And that's that. 

1233
00:51:45,320 --> 00:51:48,040
And you don't, you know, know 
what the tools are good for, but

1234
00:51:48,040 --> 00:51:51,840
always keep your most capable 
general tool next to you in 

1235
00:51:51,840 --> 00:51:54,600
order to go and actually do the 
things that you are going to 

1236
00:51:54,600 --> 00:51:56,440
help you have high creative 
value. 

1237
00:51:56,480 --> 00:52:00,840
So yeah, personally also 
subscribe to many AI tools, 

1238
00:52:00,840 --> 00:52:02,240
right? 
So I think sometimes you just, 

1239
00:52:02,440 --> 00:52:05,360
you know, pick the best from 
whatever AI that you use, right?

1240
00:52:05,360 --> 00:52:08,040
And sometimes, yeah, one works 
best for certain contexts and 

1241
00:52:08,040 --> 00:52:11,000
the other works best for others.
So I think that this landscape 

1242
00:52:11,000 --> 00:52:13,760
is changing really, really fast.
So I think there will be more 

1243
00:52:13,760 --> 00:52:15,840
exciting stuff happening within 
this space. 

1244
00:52:16,400 --> 00:52:18,520
But one thing for sure, like 
what you said, I think probably 

1245
00:52:18,520 --> 00:52:21,080
developers role won't be like 
gone, right? 

1246
00:52:21,080 --> 00:52:23,840
People are still having to 
problem solve something, right? 

1247
00:52:24,080 --> 00:52:26,080
And especially also the 
understanding about domain, 

1248
00:52:26,080 --> 00:52:27,720
right? 
I think that's still one key. 

1249
00:52:28,160 --> 00:52:30,840
So thank you so much for this 
exciting talk for Michael. 

1250
00:52:30,840 --> 00:52:33,200
Unfortunately, we reached the 
end of our conversation. 

1251
00:52:33,440 --> 00:52:35,920
But before I let you go, I have 
one last question that I always 

1252
00:52:35,920 --> 00:52:38,040
ask my guest. 
I call this 3 technical 

1253
00:52:38,040 --> 00:52:39,920
leadership wisdom. 
You can think of it just like 

1254
00:52:39,920 --> 00:52:42,160
advice that you want to give to 
us, the listeners here. 

1255
00:52:42,320 --> 00:52:44,440
So maybe you can share your 
version of the wisdom. 

1256
00:52:45,640 --> 00:52:47,600
Yeah, It's kind of funny because
I was looking back through, you 

1257
00:52:47,600 --> 00:52:50,320
know, the other, you know, some 
of your earlier episodes. 

1258
00:52:50,320 --> 00:52:54,000
And, you know, there's a lot of 
things about basically managing 

1259
00:52:54,040 --> 00:52:56,280
organizations and basically 
dealing with people and stuff 

1260
00:52:56,280 --> 00:52:58,800
like that purely from a 
technical point of view. 

1261
00:52:58,800 --> 00:53:00,840
The thing I want to go and 
basically mention is that 

1262
00:53:01,640 --> 00:53:03,760
basically looking for things 
that aren't there is very 

1263
00:53:03,760 --> 00:53:04,760
valuable. 
Right. 

1264
00:53:05,240 --> 00:53:07,760
And I think just generally in 
life, it's kind of like if, if 

1265
00:53:07,760 --> 00:53:09,920
you can detect the absence of 
something that should be there, 

1266
00:53:09,920 --> 00:53:12,960
right, then you're in a good 
position. 

1267
00:53:13,440 --> 00:53:15,640
The legacy code book came about 
because I realized it's like, 

1268
00:53:16,320 --> 00:53:17,960
this is a tough problem and 
nobody's going to touch it. 

1269
00:53:17,960 --> 00:53:19,600
Nobody wants to touch this 
problem. 

1270
00:53:19,600 --> 00:53:21,680
So it's like, OK, might as well 
do this, right? 

1271
00:53:22,280 --> 00:53:24,240
So developing a sense for the 
absence. 

1272
00:53:24,240 --> 00:53:25,560
Of things is extremely. 
Valuable. 

1273
00:53:26,040 --> 00:53:29,160
The other is like, you know #2 I
guess would be basically 

1274
00:53:29,160 --> 00:53:31,080
learning as many domains as you 
can, right? 

1275
00:53:31,080 --> 00:53:34,760
Really digging into things 
because it's like the more 

1276
00:53:34,760 --> 00:53:37,920
impressions you get of different
things, the more you have to 

1277
00:53:37,920 --> 00:53:39,560
draw upon when you're 
formulating solutions. 

1278
00:53:39,560 --> 00:53:43,200
Yourself, right? 
And this is almost like how an 

1279
00:53:43,200 --> 00:53:46,400
Lol works in a way, right? 
It basically is read almost all 

1280
00:53:46,400 --> 00:53:49,560
the online content in the world.
And one thing that makes it very

1281
00:53:49,560 --> 00:53:51,840
effective is because it has that
breadth, right? 

1282
00:53:52,240 --> 00:53:55,560
So you'll quite often see 
yourself, I'm reading about this

1283
00:53:55,560 --> 00:53:57,920
and you'll say, wow, that's very
close to this thing over there. 

1284
00:53:57,920 --> 00:54:00,080
What's is there a commonality 
here? 

1285
00:54:00,080 --> 00:54:02,480
And then you start asking 
questions and going deep. 

1286
00:54:02,680 --> 00:54:04,640
Right. 
And I guess the third thing is 

1287
00:54:04,640 --> 00:54:07,240
really just maintain your 
curiosity more than anything 

1288
00:54:07,280 --> 00:54:09,360
else. 
You know, everybody who's in 

1289
00:54:09,360 --> 00:54:12,280
software development is in a 
position to be able to learn 

1290
00:54:12,280 --> 00:54:15,200
more about many adjacent things.
You know, you're able to learn 

1291
00:54:15,200 --> 00:54:17,400
more about business, you're able
to learn more about management 

1292
00:54:17,800 --> 00:54:19,680
and the resources available to 
all of us. 

1293
00:54:19,680 --> 00:54:22,360
It's just a question of actually
going there and dealing with 

1294
00:54:22,360 --> 00:54:23,480
those things. 
So I guess those are the main 

1295
00:54:23,480 --> 00:54:25,880
things and those have served me 
well through my career. 

1296
00:54:25,920 --> 00:54:28,440
You know, and I, I don't know to
what degree people can trick 

1297
00:54:28,440 --> 00:54:30,760
themselves in the curiosity if 
they're not terribly curious. 

1298
00:54:30,760 --> 00:54:34,160
But yeah, I hope they can 
because I, you know, it's, it's 

1299
00:54:34,160 --> 00:54:35,080
fun to me. 
It's fun. 

1300
00:54:35,240 --> 00:54:38,160
So yeah. 
I'm sure when people opt for the

1301
00:54:38,160 --> 00:54:41,120
programmer's job, I think there 
is a sense of curiosity because 

1302
00:54:41,120 --> 00:54:43,600
otherwise, right, I mean, they 
they can't be a good programmer 

1303
00:54:43,600 --> 00:54:46,360
anyway. 
So sure, just some of the most 

1304
00:54:46,360 --> 00:54:48,400
interesting conversations ever 
had at conferences. 

1305
00:54:48,760 --> 00:54:50,560
They have nothing to do with 
software, just people are just 

1306
00:54:50,560 --> 00:54:52,880
very into things and. 
Curious. 

1307
00:54:53,120 --> 00:54:54,760
Sorry, Yeah. 
No problem. 

1308
00:54:55,200 --> 00:54:56,680
So thanks again for this 
conversation. 

1309
00:54:56,680 --> 00:54:58,680
So if people like this 
conversation or they want to 

1310
00:54:58,680 --> 00:55:01,520
reach out or check out with you 
certain stuff, is there a place 

1311
00:55:01,520 --> 00:55:03,680
where they can reach out online?
Sure. 

1312
00:55:03,680 --> 00:55:06,640
There's my sub stack Michael 
Chathers at substack.com. 

1313
00:55:06,640 --> 00:55:09,320
There's also on X or Twitters M 
Chathers. 

1314
00:55:09,720 --> 00:55:11,840
So just either one of those 
places is perfectly fine to go 

1315
00:55:11,840 --> 00:55:14,160
and reach me. 
You can also search for the book

1316
00:55:14,280 --> 00:55:17,680
AI assisted programming on 
Reenpub and it's early days. 

1317
00:55:17,680 --> 00:55:19,320
I'm about 15% done. 
But I'm. 

1318
00:55:19,720 --> 00:55:21,160
Releasing new chapters every 
week or so. 

1319
00:55:21,160 --> 00:55:25,200
So, all right, thanks. 
I don't know how far it can be a

1320
00:55:25,280 --> 00:55:29,000
legacy code book, right, which 
is very classic, but I think I 

1321
00:55:29,000 --> 00:55:32,560
hope I can see the book in a 
full form, right, and learn how 

1322
00:55:32,560 --> 00:55:35,280
to use the AI much better. 
So thanks for writing the book 

1323
00:55:35,280 --> 00:55:36,920
as well. 
Sure. 

1324
00:55:37,040 --> 00:55:37,320
Thank you.
