1
00:00:00,040 --> 00:00:02,440
Do you think that's the most 
effective way to create software

2
00:00:02,440 --> 00:00:05,040
within a team? 
I think that's the only way, 

3
00:00:05,240 --> 00:00:07,560
being the architect, but also 
work with the teams and 

4
00:00:07,840 --> 00:00:10,160
generally be part of the teams 
and code with them. 

5
00:00:10,440 --> 00:00:13,960
They were just copy pasting all 
these folders and project 

6
00:00:13,960 --> 00:00:16,360
structures without actually 
understanding why they were 

7
00:00:16,360 --> 00:00:18,440
doing it. 
They end up being so dogmatic 

8
00:00:18,440 --> 00:00:22,320
about that that they lose the 
capability of optimizing or 

9
00:00:22,320 --> 00:00:25,080
simplifying that code base. 
I feel there will be a point of 

10
00:00:25,080 --> 00:00:28,240
time in the future and I don't 
have a clue how fast that future

11
00:00:28,240 --> 00:00:30,400
is going to be that we don't 
care about the code anymore. 

12
00:00:30,720 --> 00:00:34,080
If you use open source code, it 
may eventually become your own 

13
00:00:34,080 --> 00:00:38,400
code that you have to maintain. 
It is almost like you give, but 

14
00:00:38,400 --> 00:00:41,560
you get so much back from it. 
Knowledge, experience, new 

15
00:00:41,560 --> 00:00:44,960
tools, new insights, feasibility
of course, and that is very 

16
00:00:44,960 --> 00:00:47,480
valuable. 
Today I'm joined by Dennis DOMA,

17
00:00:47,600 --> 00:00:52,080
Microsoft MVP, open source 
legend and Coding architect over

18
00:00:52,080 --> 00:00:54,960
at Aviva Solutions. 
Last time we spoke was four 

19
00:00:54,960 --> 00:00:56,360
years ago. 
We talked about quality and 

20
00:00:56,360 --> 00:00:59,440
software engineering and a lot 
has changed, which is exactly 

21
00:00:59,440 --> 00:01:01,760
what we talk about. 
Strong conventions, battling 

22
00:01:01,760 --> 00:01:05,200
complexity and the impact of AI 
on open source. 

23
00:01:05,280 --> 00:01:10,720
So enjoy. 
You mentioned you would never do

24
00:01:10,720 --> 00:01:13,480
conferences full time because 
you love your job too much. 

25
00:01:13,960 --> 00:01:17,560
Also because I Nah why would I 
do this full time? 

26
00:01:17,560 --> 00:01:19,560
There's no point. 
I still want to be able to do 

27
00:01:19,600 --> 00:01:22,880
things myself. 
I'm, I'd like to call myself a 

28
00:01:23,440 --> 00:01:25,480
hands on architect or coding 
architect. 

29
00:01:26,000 --> 00:01:31,080
And almost everything I talk 
about is based or fuelled by my 

30
00:01:31,080 --> 00:01:33,560
experiences. 
And if you stop coding, if you 

31
00:01:33,560 --> 00:01:35,800
actually stop building 
production systems and put them,

32
00:01:36,040 --> 00:01:38,480
you know, put them in on the 
Internet and everything, you 

33
00:01:38,480 --> 00:01:40,200
lose that, that, that 
experience. 

34
00:01:40,200 --> 00:01:43,880
I mean, let's imagine I would 
have stopped coding myself for 

35
00:01:43,880 --> 00:01:46,280
the last three years, then I 
would have probably missed the 

36
00:01:46,280 --> 00:01:50,400
whole AI scene. 
And I really, I'm 52 now. 

37
00:01:50,400 --> 00:01:52,240
I've been doing this for almost 
30 years. 

38
00:01:52,720 --> 00:01:56,000
I can't even imagine stopping 
this for some reason. 

39
00:01:56,000 --> 00:02:00,240
I've always been lucky where my 
job or my assignment is usually 

40
00:02:00,240 --> 00:02:03,240
a combination of being the 
architect, but also work with 

41
00:02:03,240 --> 00:02:06,560
the teams and generally be part 
of the teams and code with them.

42
00:02:06,760 --> 00:02:09,440
Putting stuff in production. 
You learn so much from that and 

43
00:02:09,759 --> 00:02:14,040
being able to demonstrate that 
to developers like OK, if you 

44
00:02:14,040 --> 00:02:17,000
actually take a slightly 
different approach, this will 

45
00:02:17,000 --> 00:02:18,680
actually make your code more 
maintainable. 

46
00:02:18,960 --> 00:02:22,240
That is so valuable, but also 
running into the limitations or 

47
00:02:22,240 --> 00:02:25,960
learning new things about the 
framework or new techniques or a

48
00:02:25,960 --> 00:02:28,960
new insight or a new paradigm or
something like that. 

49
00:02:29,280 --> 00:02:30,840
I think that's extremely 
valuable. 

50
00:02:30,840 --> 00:02:32,640
And I usually only talk about my
experience. 

51
00:02:32,640 --> 00:02:35,880
I don't talk about what's new in
dot net 10 or something like 

52
00:02:35,880 --> 00:02:36,800
that. 
There's plenty of people that 

53
00:02:36,800 --> 00:02:39,400
can do that. 
I I like to talk about my 

54
00:02:39,400 --> 00:02:43,520
experiences, the pains and the 
successes that I've experienced 

55
00:02:43,520 --> 00:02:45,680
during my day job. 
Day job. 

56
00:02:45,960 --> 00:02:49,320
This responsibility of also 
being responsible for 

57
00:02:49,320 --> 00:02:51,400
architecture but still being 
hands on, do you think that's 

58
00:02:51,400 --> 00:02:54,120
the most effective way to create
software within a team? 

59
00:02:54,440 --> 00:02:57,760
I think that's the only way. 
I can't imagine. 

60
00:02:58,200 --> 00:03:02,000
I mean, I do work with quite a 
lot of like, let's say 

61
00:03:02,040 --> 00:03:06,200
enterprise architects in the 
companies that I work with, but 

62
00:03:06,200 --> 00:03:08,440
they deal with the high level 
stuff they talk about. 

63
00:03:08,440 --> 00:03:11,320
They, they deal with policies 
and maybe information 

64
00:03:11,320 --> 00:03:14,840
architecture, but they don't 
actually have the experience 

65
00:03:14,840 --> 00:03:17,800
anymore to judge whether a 
certain solution will work 

66
00:03:17,800 --> 00:03:20,520
correctly or what's the 
consequence of using a 

67
00:03:20,680 --> 00:03:24,120
particular direction on the long
term maintainability and 

68
00:03:24,120 --> 00:03:29,520
sustainability of a solution. 
So for me being an architect, I 

69
00:03:29,520 --> 00:03:31,360
mean, if if you're a software 
architect, I mean, there are 

70
00:03:31,360 --> 00:03:33,520
different types of architecture,
there's a software architect. 

71
00:03:34,200 --> 00:03:37,400
The only way to be effective is 
to actually know what you're 

72
00:03:37,400 --> 00:03:42,360
doing, experiment, see how a 
particular solution that you 

73
00:03:42,360 --> 00:03:46,000
imagined is being used in 
practice. 

74
00:03:47,360 --> 00:03:49,400
Yeah. 
I mean, just fixing bugs in an 

75
00:03:49,400 --> 00:03:52,240
existing code base is already 
valuable, very valuable because 

76
00:03:52,240 --> 00:03:53,440
you learn a lot of stuff for 
that. 

77
00:03:54,280 --> 00:03:57,200
And I've, I've had, I had quite,
I don't know, we're going down 

78
00:03:57,200 --> 00:04:00,840
all kinds of directions, but I 
had quite a lot of experiences 

79
00:04:00,840 --> 00:04:04,200
where I joined a client because 
I'm a consultant. 

80
00:04:04,200 --> 00:04:06,440
I work for a small consultancy 
firm, Afiva. 

81
00:04:07,160 --> 00:04:11,920
And you go into a team and you 
look at the code base and then 

82
00:04:11,960 --> 00:04:13,840
you see they're struggling with 
the code base. 

83
00:04:13,840 --> 00:04:17,800
They struggling to keep it 
maintainable, too much coupling,

84
00:04:17,800 --> 00:04:21,200
not enough cohesion. 
Well, you know, all these terms 

85
00:04:21,200 --> 00:04:24,760
or principles and then you, you 
look at that code base from a 

86
00:04:25,000 --> 00:04:28,760
higher perspective and suddenly 
you realise like them, that 

87
00:04:28,760 --> 00:04:31,200
looks like an, an union 
architecture, clean 

88
00:04:31,200 --> 00:04:33,560
architecture. 
And then you discover that 

89
00:04:33,720 --> 00:04:37,320
apparently somebody in the past 
had a kind of vision, but the 

90
00:04:37,320 --> 00:04:39,440
current development team 
completely lost track of what 

91
00:04:39,440 --> 00:04:42,320
the architecture was about. 
Like what was the underlying 

92
00:04:42,320 --> 00:04:44,440
architectural style? 
They didn't even know it 

93
00:04:44,440 --> 00:04:46,800
anymore. 
They were just copy pasting all 

94
00:04:46,800 --> 00:04:50,120
these folders and the project 
structures without actually 

95
00:04:50,120 --> 00:04:51,440
understanding why they were 
doing it. 

96
00:04:51,880 --> 00:04:54,680
And they, they, they, they end 
up being so dogmatic about that,

97
00:04:55,320 --> 00:05:00,000
that they lose, yeah, the 
capability of, of optimizing or 

98
00:05:00,000 --> 00:05:02,000
simplifying that code base 
because they're just copy 

99
00:05:02,000 --> 00:05:05,720
pasting a particular pattern. 
And I think if you're not 

100
00:05:05,800 --> 00:05:08,320
actually in that code base, you 
will not be able to detect, 

101
00:05:08,320 --> 00:05:11,440
detect that. 
And if you're an architect and 

102
00:05:11,440 --> 00:05:13,680
you're, you're a Greenfield 
architect where you, where you 

103
00:05:13,680 --> 00:05:18,480
get the time to build up 
something from scratch, you make

104
00:05:18,480 --> 00:05:22,600
assumptions when you architect, 
you probably, you know, you know

105
00:05:22,600 --> 00:05:25,240
about the functional non 
functionals, you talk to the 

106
00:05:25,240 --> 00:05:28,200
stakeholders, you try to come up
with an architecture that makes 

107
00:05:28,200 --> 00:05:31,200
sense. 
But actually making that a 

108
00:05:31,200 --> 00:05:34,040
reality, implementing that. 
I, I don't believe you can write

109
00:05:34,040 --> 00:05:37,480
it down in such a way that the 
development team just says, Oh 

110
00:05:37,480 --> 00:05:40,560
yeah, we know how to do that 
because they will make mistakes.

111
00:05:40,560 --> 00:05:42,560
You make mistakes, you make 
assumptions. 

112
00:05:42,840 --> 00:05:46,680
You may actually, you may have 
thought like, OK, I need a 

113
00:05:46,680 --> 00:05:49,360
particular abstraction or I'm 
going to use, I don't know, 

114
00:05:49,360 --> 00:05:54,000
event sourcing or something I've
done in the past or CQRS based 

115
00:05:54,000 --> 00:05:56,960
on those non functionals. 
And maybe also based on this, 

116
00:05:57,280 --> 00:05:59,480
this gut feeling that you built 
after 30 years. 

117
00:06:00,040 --> 00:06:03,120
And then you discover that 
either it's too complicated for 

118
00:06:03,120 --> 00:06:07,240
the team or it's not. 
It's not performant enough. 

119
00:06:07,240 --> 00:06:11,920
You have to make changes or the 
team is not capable of making 

120
00:06:11,920 --> 00:06:14,720
decisions on their own that 
they're not experienced enough 

121
00:06:14,720 --> 00:06:17,480
to understand when that pattern 
applies or when not. 

122
00:06:17,840 --> 00:06:19,960
That is something you need to 
experience on the job. 

123
00:06:19,960 --> 00:06:22,560
And then reiterate, you know, 
it's, it's really like agile 

124
00:06:22,560 --> 00:06:24,040
development. 
You look at it, you implement 

125
00:06:24,040 --> 00:06:28,360
it, you you reflect on it, you 
make changes and that's part of 

126
00:06:28,360 --> 00:06:30,680
the job. 
Yeah, I truly believe that 

127
00:06:30,880 --> 00:06:34,440
software engineering or creating
software how it is or how it 

128
00:06:34,440 --> 00:06:38,120
used to be as well as how it 
will be in the future is all 

129
00:06:38,120 --> 00:06:41,360
about paddling or maintaining 
kind of this balance between 

130
00:06:41,360 --> 00:06:43,840
what you have and the complexity
that you build up. 

131
00:06:44,200 --> 00:06:46,480
So if you lose a fundamental 
understanding of certain 

132
00:06:46,480 --> 00:06:49,840
decisions that have been made in
the past and you're dogmatic 

133
00:06:49,840 --> 00:06:52,320
about certain decisions and you 
don't really understand, but you

134
00:06:52,320 --> 00:06:55,520
keep doing it conventionally, 
you might build up a lot of 

135
00:06:55,760 --> 00:06:57,880
complexity. 
Or you should be actually 

136
00:06:57,880 --> 00:07:00,560
keeping that in mind and kind of
battling it as you go. 

137
00:07:00,920 --> 00:07:04,440
Because time is the factor here 
and complexity is just to it can

138
00:07:04,440 --> 00:07:05,960
be make or break for your 
software at some. 

139
00:07:06,040 --> 00:07:08,800
Point and and if you, if you 
detect that, if you acknowledge 

140
00:07:08,800 --> 00:07:12,840
the fact that you have 
unnecessary complexity, some, 

141
00:07:12,840 --> 00:07:15,400
some people actually call it 
accidental complexity because 

142
00:07:15,400 --> 00:07:18,120
everybody's trying to do their 
best, but they sometimes don't 

143
00:07:18,120 --> 00:07:21,080
realize they make, they, they 
introduce something that makes 

144
00:07:21,080 --> 00:07:23,960
the code base more complicated. 
And if you don't need that, you 

145
00:07:23,960 --> 00:07:27,080
need to continuously invest in 
that, try to remove it. 

146
00:07:27,880 --> 00:07:31,640
But then usually you end up in 
in this discussion like, OK, you

147
00:07:31,640 --> 00:07:33,840
know, we have built this system,
different modules. 

148
00:07:34,080 --> 00:07:37,520
This module has been has become 
too complicated, but it does 

149
00:07:37,520 --> 00:07:40,760
follow the same pattern. 
Should we then remove the 

150
00:07:40,760 --> 00:07:42,360
pattern and make this module 
simpler? 

151
00:07:42,520 --> 00:07:44,000
Yeah. 
But then this code base becomes 

152
00:07:44,000 --> 00:07:46,000
inconsistent. 
You know, that that is an all 

153
00:07:46,000 --> 00:07:48,440
sort of thing. 
And then some developers will 

154
00:07:48,440 --> 00:07:51,960
say or some experienced tech 
leads will say, yeah, but I 

155
00:07:51,960 --> 00:07:54,640
prefer the consistency. 
So let's keep that complexity 

156
00:07:54,960 --> 00:07:58,800
because for aspiring developers,
it might be easy to understand. 

157
00:07:58,800 --> 00:08:01,560
I'm more the person that will 
say, no, no, we treat this 

158
00:08:01,560 --> 00:08:05,880
module as a boundary. 
And the consistency that we want

159
00:08:05,880 --> 00:08:10,320
to keep applies only to this 
boundary, this module. 

160
00:08:10,320 --> 00:08:14,000
So we keep, we make this module 
simpler because I know that if 

161
00:08:14,000 --> 00:08:16,640
you make it simpler, it will 
also be much easier to maintain.

162
00:08:17,200 --> 00:08:19,320
You know, a lot of developers 
are struggling like, OK, what 

163
00:08:19,320 --> 00:08:20,840
does, why do I need this 
abstraction? 

164
00:08:20,840 --> 00:08:22,920
Why do I, how do I unit test 
this? 

165
00:08:22,920 --> 00:08:24,040
What's the scope of the unit 
test? 

166
00:08:24,040 --> 00:08:25,720
And we talked about this, I 
think 4 years ago. 

167
00:08:26,200 --> 00:08:29,280
This is still the thing, you 
know, how do you apply DRY? 

168
00:08:29,800 --> 00:08:32,520
Do you actually duplicate code? 
I'm a person that will duplicate

169
00:08:32,520 --> 00:08:35,320
a lot of code because it reduces
coupling. 

170
00:08:35,720 --> 00:08:37,760
But I do that consciously. 
It's not like, OK, I duplicate 

171
00:08:37,760 --> 00:08:39,760
everything. 
Well, I never duplicate. 

172
00:08:39,760 --> 00:08:43,840
And that is the challenge that I
see a lot of developers, 

173
00:08:44,800 --> 00:08:47,800
especially if they reach the, I 
don't know if I'm generalizing, 

174
00:08:47,800 --> 00:08:52,040
but between 10:15 years 
experience, they start to learn 

175
00:08:52,040 --> 00:08:55,560
the patterns, they start to 
appreciate them, but then they 

176
00:08:55,560 --> 00:08:58,960
start to over overzealously 
apply them and stick to that. 

177
00:08:58,960 --> 00:09:02,360
And and if you then say, Abbott,
we don't need this abstraction. 

178
00:09:02,560 --> 00:09:06,040
Yeah, but this is this is open 
for extension, close for 

179
00:09:06,040 --> 00:09:08,080
modification. 
You know, this is a single 

180
00:09:08,080 --> 00:09:09,720
responsibility principle. 
Yeah, but you don't need this 

181
00:09:09,720 --> 00:09:11,360
abstraction. 
Yeah, but it's ready for the 

182
00:09:11,360 --> 00:09:13,400
future. 
You don't need this abstraction.

183
00:09:14,400 --> 00:09:17,520
I've seen this so many times. 
And it's impossible to 

184
00:09:17,520 --> 00:09:20,520
experience them because those 
developers will then, you know, 

185
00:09:20,520 --> 00:09:23,000
wave the SOLID principles in 
your face like, you know. 

186
00:09:23,320 --> 00:09:25,080
Yeah. 
But dude, you don't need this 

187
00:09:25,080 --> 00:09:27,720
complexity right now. 
You know, do you actually need 

188
00:09:27,720 --> 00:09:29,960
to support different databases? 
No. 

189
00:09:30,360 --> 00:09:32,160
But we may have to do that in 
the future. 

190
00:09:32,560 --> 00:09:34,040
Yeah. 
But do you actually believe that

191
00:09:34,040 --> 00:09:37,200
you can create an abstraction 
that has where the semantics 

192
00:09:37,200 --> 00:09:39,040
don't even change between 
different databases? 

193
00:09:39,480 --> 00:09:41,240
I don't know. 
But I've defined, you know, I've

194
00:09:41,240 --> 00:09:43,920
defined this abstraction. 
I've decoupled my code from the 

195
00:09:43,920 --> 00:09:45,040
database. 
Yeah. 

196
00:09:45,040 --> 00:09:48,800
But I. 
Mean it would be easy if there's

197
00:09:48,800 --> 00:09:50,720
like a playbook or a rule book, 
right? 

198
00:09:50,720 --> 00:09:53,440
We followed this. 
If we just follow this and we 

199
00:09:53,440 --> 00:09:56,080
keep following this, then 
everything is like really good. 

200
00:09:56,120 --> 00:09:59,560
It's. 
Called Sequel and every database

201
00:09:59,800 --> 00:10:01,520
implements the exact same no of 
course. 

202
00:10:01,600 --> 00:10:04,560
Yeah, no, like it's, it's, I 
would love that. 

203
00:10:04,560 --> 00:10:06,520
I mean, no, I don't think I 
would love that because I think 

204
00:10:06,520 --> 00:10:07,920
that would make things boring as
well. 

205
00:10:08,440 --> 00:10:10,600
We can use. 
AI then to implement it. 

206
00:10:10,600 --> 00:10:12,080
In fact, we can already do that,
but. 

207
00:10:12,080 --> 00:10:14,520
Yeah. 
I mean, this is for me the, the 

208
00:10:14,520 --> 00:10:16,960
interesting part in those 
conversations about kind of 

209
00:10:17,440 --> 00:10:20,520
conventions versus being 
pragmatic versus, OK, what do we

210
00:10:20,520 --> 00:10:23,680
do for the future or what do we 
do for now and how much is it 

211
00:10:23,680 --> 00:10:26,360
going to speed us up versus how 
much complexity is going to add 

212
00:10:26,360 --> 00:10:29,120
that we have to navigate. 
I've always really enjoyed those

213
00:10:29,120 --> 00:10:31,600
conversations. 
And now with AI assisted 

214
00:10:31,600 --> 00:10:34,120
development tooling, I wonder if
we're going to have 

215
00:10:34,600 --> 00:10:36,440
conversations in a different 
matter. 

216
00:10:36,640 --> 00:10:40,920
Because how we do things, I feel
like is accelerating to a point 

217
00:10:40,920 --> 00:10:43,720
where it might be really good 
and we might not really have to 

218
00:10:43,720 --> 00:10:47,680
care about how things are done 
if it still is maintainable in 

219
00:10:47,680 --> 00:10:52,920
the end. 
I think I, yeah, realistically, 

220
00:10:52,920 --> 00:10:55,720
I feel there will be a point of 
time in the future and I don't 

221
00:10:55,720 --> 00:10:58,200
have a clue how how fast that 
future is going to be. 

222
00:10:59,040 --> 00:11:00,840
Is that we don't care about the 
code anymore. 

223
00:11:01,720 --> 00:11:04,880
I mean, I don't know if you ever
watch Star Trek TV series or 

224
00:11:04,880 --> 00:11:06,760
anything like that, but they 
don't code. 

225
00:11:07,040 --> 00:11:11,640
They either tell the computer to
do something or they, you know, 

226
00:11:11,800 --> 00:11:14,120
press some buttons and suddenly 
everything works differently. 

227
00:11:14,120 --> 00:11:15,800
Of course, that was based on the
past. 

228
00:11:15,800 --> 00:11:18,520
They probably the original 
authors wouldn't even be able to

229
00:11:18,520 --> 00:11:22,360
imagine what we can do today. 
But I, I'm approaching this 

230
00:11:22,360 --> 00:11:27,560
point pretty quickly. 
I have, last September, I think 

231
00:11:27,960 --> 00:11:31,000
I've build a new open source 
project, some kind of HTP 

232
00:11:31,000 --> 00:11:36,160
mocking libraryfor.net. 
And I started with like at a 

233
00:11:36,160 --> 00:11:37,760
client project. 
We had to do a lot of HTTP 

234
00:11:37,760 --> 00:11:40,840
marketing because we were doing 
unit testing and at the right 

235
00:11:40,840 --> 00:11:42,680
scale, I would say. 
And I was using some other 

236
00:11:42,680 --> 00:11:44,280
libraries and I didn't like 
them. 

237
00:11:44,280 --> 00:11:47,280
I started building abstractions 
on top of them to make them 

238
00:11:47,280 --> 00:11:49,400
easier to work with. 
I was missing features. 

239
00:11:49,400 --> 00:11:51,920
So at some point I thought like,
OK, you know what? 

240
00:11:52,080 --> 00:11:54,200
I've been an open source 
developer for 15 years. 

241
00:11:55,160 --> 00:11:57,800
I can probably build something 
similar, maybe even better. 

242
00:11:58,320 --> 00:12:00,880
Arrogant. 
I don't know naive myself. 

243
00:12:00,880 --> 00:12:03,440
So I started collecting all 
these notes in GitHub in an 

244
00:12:03,440 --> 00:12:05,280
issue. 
I created the repo, it was 

245
00:12:05,280 --> 00:12:08,400
empty, almost empty. 
I used some kind of template 

246
00:12:08,400 --> 00:12:12,160
that I built myself and at some 
point the issue in GitHub 

247
00:12:12,160 --> 00:12:15,360
contained basically all the 
features that are needed, plus a

248
00:12:15,360 --> 00:12:17,880
couple of examples like I I 
actually thought about what the 

249
00:12:17,880 --> 00:12:22,240
API should look like and just 
out of fun the curiosity, I 

250
00:12:22,240 --> 00:12:25,840
decided to assign that GitHub 
issue to GitHub copilot. 

251
00:12:25,840 --> 00:12:30,320
You can do that inside GitHub. 
Yeah, to my surprise, it 

252
00:12:30,320 --> 00:12:35,800
produced a beautiful open source
project implementing basically 

253
00:12:35,800 --> 00:12:39,480
all the features that I needed 
using my own conventions because

254
00:12:39,480 --> 00:12:43,040
I already had set up editor 
configs and Roslin analysis so 

255
00:12:43,320 --> 00:12:46,360
to define what my coding 
conventions are and it was 

256
00:12:46,360 --> 00:12:50,040
exactly what I needed. 
After that I took the code. 

257
00:12:50,040 --> 00:12:53,400
Oh, no, actually when the when 
git up created the pool request,

258
00:12:53,880 --> 00:12:56,240
I started, you know, asking 
additional questions. 

259
00:12:56,240 --> 00:12:59,280
So like I was looking at some of
the unit tests it created based 

260
00:12:59,280 --> 00:13:02,800
on my examples and I thought 
like, actually, you know, this, 

261
00:13:02,800 --> 00:13:05,360
there's some additional steps. 
I want you to remove this. 

262
00:13:05,840 --> 00:13:09,720
And oh, by the way, can you also
create some assertion methods as

263
00:13:09,720 --> 00:13:13,000
part of the library? 
So it's easier to say, OK, did 

264
00:13:13,000 --> 00:13:16,040
the mock actually send or was 
there actually a request to a 

265
00:13:16,040 --> 00:13:18,800
particular endpoint with a 
particular route and particular 

266
00:13:18,800 --> 00:13:20,840
body? 
And I thought about it and then 

267
00:13:20,840 --> 00:13:24,320
I thought like, OK, can you, 
maybe, you know, I have an open 

268
00:13:24,320 --> 00:13:25,800
source project called Fluid 
assertions. 

269
00:13:25,800 --> 00:13:28,800
There's now 2 versions. 
Version 7 is still open source 

270
00:13:28,800 --> 00:13:31,240
fully version A's is like a dual
license. 

271
00:13:31,240 --> 00:13:35,200
And I wanted to support both. 
So I, I left a, a pull request 

272
00:13:35,200 --> 00:13:38,480
comment, like, can you actually 
create 2 sets of assertions, one

273
00:13:38,480 --> 00:13:40,960
for seven and one of eight? 
And it did that. 

274
00:13:41,440 --> 00:13:44,240
And then I said, like, OK, can 
you actually split that up into 

275
00:13:44,240 --> 00:13:45,760
projects? 
So I can create 2 new cat 

276
00:13:45,760 --> 00:13:47,600
packages from it. 
It did it as well. 

277
00:13:48,360 --> 00:13:51,400
And I said, can you also update 
to read me with some examples? 

278
00:13:51,400 --> 00:13:53,000
And it was incredible what it 
did. 

279
00:13:53,600 --> 00:13:56,480
And that's the point when I 
thought, OK, now I have the, 

280
00:13:57,640 --> 00:13:59,480
the, the bulk of the 
implementation. 

281
00:13:59,840 --> 00:14:01,440
Now I'm going to continue 
myself. 

282
00:14:02,080 --> 00:14:04,200
And from that point on, I 
started to treat that code as 

283
00:14:04,200 --> 00:14:09,520
mine and started to evolve. 
But still, I sometimes use 

284
00:14:09,520 --> 00:14:12,640
Copilot in GitHub to add new 
features like I create an issue,

285
00:14:12,880 --> 00:14:16,280
assign it to it, but sometimes I
do it from my IDE. 

286
00:14:16,320 --> 00:14:21,240
So I I now have a mix of both. 
What's interesting is that I now

287
00:14:21,240 --> 00:14:26,360
have codes in my library which 
doesn't entirely meet my 

288
00:14:26,360 --> 00:14:29,880
standards. 
Copilot tends to create pretty 

289
00:14:29,880 --> 00:14:33,160
long methods, especially if 
there's a lot of sequential 

290
00:14:33,160 --> 00:14:37,600
related to logic, and I've kind 
of accepted that because I 

291
00:14:37,600 --> 00:14:41,080
maintain it myself. 
I've accepted the fact that this

292
00:14:41,080 --> 00:14:44,360
code will be there for a while 
until the point that I'm going 

293
00:14:44,360 --> 00:14:47,600
to touch that and I'm going to 
refactor it to make to make sure

294
00:14:47,600 --> 00:14:51,000
it follows my standards. 
So I kind of embrace this. 

295
00:14:51,000 --> 00:14:53,360
So I have copilot that generates
implementation. 

296
00:14:53,760 --> 00:14:57,120
I sometimes use copilot in 
GitHub to add new features. 

297
00:14:58,280 --> 00:15:02,200
Then I go back to writers my my 
preferred editor and there I use

298
00:15:02,200 --> 00:15:06,840
Juni and Claude like a mix, mix 
and match to also make changes 

299
00:15:06,840 --> 00:15:08,880
for me and a lot of things I do 
myself. 

300
00:15:10,040 --> 00:15:12,120
I think this is quite 
interesting because I feel like 

301
00:15:12,120 --> 00:15:15,160
this also highlights then still 
the pragmatic side of things, 

302
00:15:15,160 --> 00:15:16,600
right? 
You could have said, OK, this 

303
00:15:16,600 --> 00:15:18,800
doesn't follow my standards, 
therefore I'm going to change 

304
00:15:18,800 --> 00:15:20,520
it. 
But the pragmatic thing is, if 

305
00:15:20,520 --> 00:15:24,240
it works, if all the tests a 
green basically, then in the end

306
00:15:24,240 --> 00:15:26,880
it does what it needs to do and 
I don't really have to touch it,

307
00:15:26,880 --> 00:15:28,200
right? 
This is more of a subjective 

308
00:15:28,200 --> 00:15:31,160
thing, or it's becoming more of 
a more of a subjective. 

309
00:15:31,160 --> 00:15:33,240
It is, it is. 
And of course, the code is not 

310
00:15:33,240 --> 00:15:34,560
bad. 
I mean, it does follow. 

311
00:15:34,640 --> 00:15:37,520
I've set up all kinds of 
conventions so it works and I'm 

312
00:15:37,520 --> 00:15:40,080
still experimenting, for 
example, with instructions files

313
00:15:40,240 --> 00:15:42,080
and now we have skills. 
I haven't tried that. 

314
00:15:42,080 --> 00:15:43,480
It's to my list to try that as 
well. 

315
00:15:43,960 --> 00:15:47,080
Yeah, I I've read about it. 
I still haven't figured out how 

316
00:15:47,080 --> 00:15:51,440
would I use this with for 
example a jet brace Juni also 

317
00:15:51,560 --> 00:15:53,040
because I switch agents all the 
time. 

318
00:15:53,040 --> 00:15:55,200
Within writer you can you can 
choose what you want and then 

319
00:15:55,200 --> 00:15:58,200
you have 15 different LMS to 
choose from. 

320
00:15:58,200 --> 00:15:59,400
So it's. 
It's a lot. 

321
00:15:59,720 --> 00:16:02,760
It's everyday is like a 
surprise, like what will happen?

322
00:16:03,920 --> 00:16:06,320
What was I saying? 
But I do review the tests. 

323
00:16:06,680 --> 00:16:09,760
So even if copilot or an AI 
generate some of the code, 

324
00:16:10,000 --> 00:16:12,640
including the test, I do review 
the test to make sure like OK, 

325
00:16:12,960 --> 00:16:15,480
do I understand the test? 
Do they make, do they make 

326
00:16:15,480 --> 00:16:17,600
sense? 
Do they actually test what I 

327
00:16:17,600 --> 00:16:19,360
expect? 
And I use that also to look at 

328
00:16:19,360 --> 00:16:21,800
the behaviour. 
So is the implementation 

329
00:16:21,800 --> 00:16:25,720
actually doing what I expected? 
Does the API look the way I want

330
00:16:25,720 --> 00:16:28,400
it to be? 
And then I continue to go back 

331
00:16:28,400 --> 00:16:29,760
and forth. 
But whenever I these days, 

332
00:16:29,760 --> 00:16:33,240
whenever I don't know how we end
on this discussion, but whenever

333
00:16:33,240 --> 00:16:37,160
I feel like OK this is 
repetitive and I think Journey 

334
00:16:37,160 --> 00:16:39,720
can do better or cloud, then 
I'll let it do it. 

335
00:16:39,800 --> 00:16:41,960
OK, that's the. 
That's the rule. 

336
00:16:41,960 --> 00:16:44,760
That's, that's kind of how I do 
it now these days, even for the 

337
00:16:44,760 --> 00:16:49,160
projects like this morning, I 
even asked the, the, the, the AI

338
00:16:49,160 --> 00:16:52,400
to generate some additional 
tests to make sure coverage was 

339
00:16:52,400 --> 00:16:54,720
complete. 
But then I went back and then 

340
00:16:54,720 --> 00:16:58,320
reviewed every test to make sure
they did what they did or they 

341
00:16:58,320 --> 00:17:02,240
did what they're supposed to do.
And also to, to actually to use 

342
00:17:02,240 --> 00:17:05,760
the same patterns that I liked. 
And now what I do is then the 

343
00:17:05,760 --> 00:17:08,680
first thing I ask them again to 
make some adjustments, but also 

344
00:17:08,680 --> 00:17:11,200
at the same time update the 
instructions file to make sure 

345
00:17:11,200 --> 00:17:13,720
the next time it will follow 
this more closely. 

346
00:17:14,240 --> 00:17:16,400
That's not a guarantee, but 
that's the whole way I work now,

347
00:17:16,520 --> 00:17:18,800
yeah. 
Yeah, I, I have been in teams 

348
00:17:18,800 --> 00:17:23,960
where during refinement the team
preference is to completely fill

349
00:17:23,960 --> 00:17:27,680
in a solution direction in the 
task, in the ticket itself with 

350
00:17:27,680 --> 00:17:30,120
regards to what are we going to 
change, kind of where is it? 

351
00:17:30,120 --> 00:17:32,880
These are the conventions, these
are the patterns making a lot of

352
00:17:32,880 --> 00:17:36,080
things explicit and without AI 
assist development tooling. 

353
00:17:36,400 --> 00:17:38,520
I did not like this way of 
working, but the only thing you 

354
00:17:38,520 --> 00:17:40,560
would have to do is pick up the 
ticket, read what has to be 

355
00:17:40,560 --> 00:17:43,920
done, and then execute. 
And I feel like nowadays the 

356
00:17:43,920 --> 00:17:47,680
execution side of things, that's
accelerating, so you don't have 

357
00:17:47,680 --> 00:17:50,480
to necessarily do all the 
execution yourself anymore. 

358
00:17:50,760 --> 00:17:53,040
Which brings an interesting 
question for me, because build 

359
00:17:53,040 --> 00:17:55,840
is accelerating. 
I see tools pop up out of the 

360
00:17:55,840 --> 00:17:58,840
ground like mushrooms, basically
out of nothing, out of thin air.

361
00:17:59,560 --> 00:18:03,080
And my assumption is that 
research and planning, figuring 

362
00:18:03,080 --> 00:18:05,320
out what problems you need to 
solve is going to become more 

363
00:18:05,320 --> 00:18:07,880
and more important. 
Build is going to accelerate so 

364
00:18:07,880 --> 00:18:10,880
we can build really fast. 
And then distribution and 

365
00:18:10,880 --> 00:18:14,120
adoption is going to be more and
more important than it now is. 

366
00:18:14,360 --> 00:18:16,800
Because if you build a tool like
that, like it's just a finger 

367
00:18:16,800 --> 00:18:19,640
snap, how are you going to get 
your users Or what problems does

368
00:18:19,640 --> 00:18:22,520
it actually solve if they can 
also build a tool for themselves

369
00:18:22,520 --> 00:18:25,000
like you did with a mocking 
library, and then solve their 

370
00:18:25,000 --> 00:18:30,440
own problems by themselves? 
Yeah, that is something I'm 

371
00:18:30,440 --> 00:18:33,880
wondering, like, is it still 
worthwhile building open source 

372
00:18:33,880 --> 00:18:37,200
projects or something like that?
But in the end, yeah, not 

373
00:18:37,200 --> 00:18:41,600
everybody has that capability. 
I think we sometimes forget that

374
00:18:41,880 --> 00:18:45,400
we live in a bubble. 
And especially if I look at 

375
00:18:45,400 --> 00:18:48,800
myself, I, I, I'm very lucky 
that I get to speak at, at 

376
00:18:48,800 --> 00:18:51,120
different conferences. 
And I'm part of an open source 

377
00:18:51,120 --> 00:18:54,800
community that, you know, a lot 
of people that are in the same 

378
00:18:55,160 --> 00:18:59,280
space, which are always working,
are always trying to be at the 

379
00:18:59,280 --> 00:19:03,240
brink of technology, doing what 
they can to learn as much as 

380
00:19:03,240 --> 00:19:05,760
possible. 
And also use conferences to be 

381
00:19:05,760 --> 00:19:08,520
able to speak to other people. 
I mean, a lot of discussions are

382
00:19:08,520 --> 00:19:11,040
happening, you know, during the,
the speakers dinner and the 

383
00:19:11,040 --> 00:19:13,480
evenings where you sit with 
people that are very 

384
00:19:13,480 --> 00:19:16,320
knowledgeable in their fields 
and you learn a lot of that. 

385
00:19:16,640 --> 00:19:19,040
And sometimes you forget there's
a lot of people, a lot of 

386
00:19:19,040 --> 00:19:22,280
developers in our profession 
that don't have that luxury or 

387
00:19:22,280 --> 00:19:23,840
don't even know how to get that 
knowledge. 

388
00:19:23,840 --> 00:19:26,520
They, they just need to get it 
from doing the work. 

389
00:19:26,520 --> 00:19:28,800
I mean, I've seen a lot of 
developers that are completely 

390
00:19:28,800 --> 00:19:31,840
stuck because they work at the 
company where there's nobody 

391
00:19:31,840 --> 00:19:33,840
that actually brings in that 
knowledge and they don't have 

392
00:19:33,840 --> 00:19:37,960
that, that, that passion or, or 
drive themselves to fetch 

393
00:19:37,960 --> 00:19:41,240
information. 
So what I'm trying to say is 

394
00:19:41,240 --> 00:19:45,320
that we're probably doing it not
just for, for us like the people

395
00:19:45,320 --> 00:19:47,720
in our little bubble, we're 
doing for the rest of the, the 

396
00:19:47,720 --> 00:19:52,080
people that are doing it. 
And for example, like Mockley, I

397
00:19:52,080 --> 00:19:55,360
basically told like in my client
projects, the teams like it, 

398
00:19:55,360 --> 00:19:57,160
they enjoy how to use it or they
use it. 

399
00:19:57,160 --> 00:20:00,600
And now we just use the AI to 
say, OK, rewrite some of these 

400
00:20:00,600 --> 00:20:03,680
tests, replace all the old 
mockling stuff and replace with 

401
00:20:03,680 --> 00:20:07,760
Mockli, or create some tests for
this Azure function that 

402
00:20:07,760 --> 00:20:11,520
interacts with, I don't know, 
some external surface and use 

403
00:20:11,520 --> 00:20:13,840
that library to implement it. 
And it will implement that 

404
00:20:14,320 --> 00:20:16,920
because it's still the whole 
goal that I always have is to 

405
00:20:16,920 --> 00:20:18,800
make my code as readable as 
possible. 

406
00:20:19,600 --> 00:20:22,240
And you probably know from the 
past, I really enjoy test driven

407
00:20:22,240 --> 00:20:24,560
development, the unit testing. 
And one of the things that I'm 

408
00:20:24,560 --> 00:20:27,720
trying to do is make sure that 
my tests are as self-explanatory

409
00:20:27,720 --> 00:20:30,200
as possible. 
They don't contain noise. 

410
00:20:30,200 --> 00:20:33,880
I have all kinds of experiences 
and principles that I follow to 

411
00:20:33,880 --> 00:20:36,280
make my make sure my test 
actually can be used as 

412
00:20:36,280 --> 00:20:39,120
documentation. 
So using libraries that will 

413
00:20:39,120 --> 00:20:43,000
make these things more explicit 
without really convoluted calls 

414
00:20:43,000 --> 00:20:46,240
with mocking where you build up 
Jason strings and stuff, which 

415
00:20:46,600 --> 00:20:49,440
is not always useful. 
That's basically drive. 

416
00:20:49,440 --> 00:20:52,160
So I'm basically doing it for 
myself now that I think about 

417
00:20:52,160 --> 00:20:53,760
it. 
I'm building these things for 

418
00:20:53,760 --> 00:20:55,480
myself. 
And then I think like, OK, let's

419
00:20:55,480 --> 00:20:58,480
pull it out of there, put it out
there and see if it's actually 

420
00:20:58,480 --> 00:21:00,160
pick picks up if people enjoy 
it. 

421
00:21:00,920 --> 00:21:04,520
I mean, I, I resonate with that.
I used to take a lot of pride in

422
00:21:04,520 --> 00:21:07,320
kind of how my tests are 
organised and how my tests are 

423
00:21:07,320 --> 00:21:10,000
structured, not just for me, but
for my future self, for my 

424
00:21:10,000 --> 00:21:13,000
future colleagues. 
I try and add as much context 

425
00:21:13,000 --> 00:21:16,600
that I can in pull requests, in 
commit messages, individual and 

426
00:21:16,600 --> 00:21:18,880
atomic commits that makes sense 
and are coherent. 

427
00:21:19,280 --> 00:21:23,440
I spent extra effort on that. 
And I feel like nowadays when 

428
00:21:23,440 --> 00:21:26,200
you're looking at your your 
tests and the quality that you 

429
00:21:26,200 --> 00:21:28,480
put in your code base, that is 
kind of your safety net. 

430
00:21:28,880 --> 00:21:32,560
And if you black box the 
software that you create and the

431
00:21:32,560 --> 00:21:35,440
safety net is your tests, then 
definitely you should spend 

432
00:21:35,440 --> 00:21:37,800
extra attention on that and make
sure those are robust because 

433
00:21:37,800 --> 00:21:40,600
then you can trust whatever is 
behind it, whether it's created 

434
00:21:40,600 --> 00:21:43,720
by human, by you, not by you or 
by an agent. 

435
00:21:43,720 --> 00:21:46,400
In the end, it doesn't matter. 
So I feel like this is going to 

436
00:21:46,400 --> 00:21:49,960
be quite crucial to make sure 
that your tests make sense, you 

437
00:21:49,960 --> 00:21:51,760
know what to test and also how 
to test. 

438
00:21:52,000 --> 00:21:54,120
I feel like it's going to come 
more towards the forefront. 

439
00:21:54,120 --> 00:21:56,880
Some people are already front 
loading that testing part and 

440
00:21:56,880 --> 00:21:59,240
then just generating based on 
the tests and the 

441
00:21:59,240 --> 00:22:00,720
specifications. 
It's also a way of doing it. 

442
00:22:00,760 --> 00:22:05,560
Yeah, until the point where we 
really don't have to write that 

443
00:22:05,560 --> 00:22:08,000
code anymore. 
Like if you look at open spec. 

444
00:22:08,040 --> 00:22:11,120
Yeah, that's pretty amazing. 
What I've learned from a 

445
00:22:11,120 --> 00:22:14,600
colleague has been demonstrating
that during an AI evening we had

446
00:22:15,000 --> 00:22:17,760
is that it's really great for 
starting something up, but at 

447
00:22:17,760 --> 00:22:20,560
some point still you need to 
take that code and treat it as 

448
00:22:20,560 --> 00:22:22,960
yourself. 
Which by the way is how I treat 

449
00:22:22,960 --> 00:22:26,960
all AI generated code. 
But I'm pretty sure I mean like 

450
00:22:26,960 --> 00:22:30,880
what is it 2026 now? 
When was when became ChatGPT 

451
00:22:30,880 --> 00:22:33,320
popular? 
I even lost track like. 2-3 end 

452
00:22:33,320 --> 00:22:36,080
of 2023 ish I think. 
It's only two years ago, two 

453
00:22:36,080 --> 00:22:37,080
years. 
Ago end of 2020. 

454
00:22:37,080 --> 00:22:39,440
Three and just imagine where 
we're now it's quick. 

455
00:22:39,640 --> 00:22:42,680
It's, and I'm not sure if you 
talk to, I intended to talk 

456
00:22:42,680 --> 00:22:46,320
during hello stuff anger 
conference by Richard Campbell 

457
00:22:46,320 --> 00:22:50,680
from Doner rocks and he kind of 
told us that like the technology

458
00:22:50,680 --> 00:22:53,640
for AI has kind of reached its 
potential and the, and the fact 

459
00:22:53,840 --> 00:22:55,280
no, not they didn't reach its 
potential. 

460
00:22:55,280 --> 00:23:00,200
It reached the roof. 
Like they can't really, they can

461
00:23:00,200 --> 00:23:03,480
still optimize the GPT and the, 
the, the machine learning and 

462
00:23:03,480 --> 00:23:08,120
the, the generative AI 
technology, but there's no, they

463
00:23:08,120 --> 00:23:11,760
really have to make some kind of
paradigm shift to move it 

464
00:23:11,760 --> 00:23:13,960
further. 
That's his statement right now. 

465
00:23:13,960 --> 00:23:16,320
And you still see improvements, 
but it's not this big anymore. 

466
00:23:16,600 --> 00:23:19,640
It's a tooling around that tries
to, you know, it becomes faster 

467
00:23:19,640 --> 00:23:22,920
and more powerful, But I don't 
actually understand how AI 

468
00:23:22,920 --> 00:23:24,520
works. 
Honestly, I have no clue. 

469
00:23:25,320 --> 00:23:28,560
I mean I tried to deep dive but 
then I was like am I doing this 

470
00:23:28,560 --> 00:23:30,880
out of curiosity? 
Out of interest, what problem am

471
00:23:30,880 --> 00:23:32,840
I solving with this? 
Is just knowledge to have the 

472
00:23:32,840 --> 00:23:35,520
knowledge. 
I see the tools, I can 

473
00:23:35,520 --> 00:23:38,080
experiment. 
I love experimenting in personal

474
00:23:38,080 --> 00:23:41,800
projects, but also if I can in 
production specifically. 

475
00:23:42,160 --> 00:23:45,560
I've had cases where I went 
fully AI assisted development 

476
00:23:45,560 --> 00:23:47,800
workflow and then all of a 
sudden my context got 

477
00:23:47,800 --> 00:23:50,000
compressed. 
And they always say context is 

478
00:23:50,000 --> 00:23:51,520
like milk, never let it 
compress. 

479
00:23:51,520 --> 00:23:54,320
And I, I know why because it 
compressed the context and it 

480
00:23:54,320 --> 00:23:57,120
was like, oh, we have changes, 
let's merge them and let's just 

481
00:23:57,160 --> 00:23:58,720
push them. 
And I was on the main branch and

482
00:23:58,720 --> 00:24:01,480
I was actually experimenting. 
So that was not a good idea. 

483
00:24:01,880 --> 00:24:03,240
Yeah, we didn't have the safety 
net. 

484
00:24:03,240 --> 00:24:06,400
So I, I've, I've made my 
mistakes and I've, I have my 

485
00:24:06,400 --> 00:24:08,560
learnings, but that's mainly 
through doing. 

486
00:24:08,880 --> 00:24:11,600
I'm having a lot of fun though. 
Like I was in a role responsible

487
00:24:11,600 --> 00:24:14,560
for product like you mentioned, 
I need to be hands on to have 

488
00:24:14,560 --> 00:24:16,440
things to talk about on this 
podcast. 

489
00:24:16,440 --> 00:24:19,400
And I had a lot of FOMO because 
things accelerated and I think 

490
00:24:19,400 --> 00:24:22,560
they're still accelerating. 
So yeah, if you're not in an 

491
00:24:22,560 --> 00:24:24,560
environment where you can 
experiment, where you can 

492
00:24:24,560 --> 00:24:27,800
actually figure out what works 
for you in this newer way of 

493
00:24:27,800 --> 00:24:31,240
working, it's going to be hard 
to kind of catch up at some 

494
00:24:31,240 --> 00:24:33,920
point. 
Yeah, kind of similar experience

495
00:24:33,960 --> 00:24:36,600
I had like I think yesterday or 
the day before I was, I was 

496
00:24:36,600 --> 00:24:40,120
using I think clothes within 
writer to make some code 

497
00:24:40,120 --> 00:24:42,760
changes. 
And I also made some manual code

498
00:24:42,760 --> 00:24:44,600
changes. 
And I I keep pushing them. 

499
00:24:44,680 --> 00:24:47,800
Like I use a couple of git 
aliases to quickly push 

500
00:24:47,800 --> 00:24:50,240
temporary commits to my brand so
I don't lose anything. 

501
00:24:50,480 --> 00:24:54,200
So whenever I use AII, first 
commit my changes, push them so 

502
00:24:54,200 --> 00:24:58,320
I can roll back and I made some 
changes, continue to make some 

503
00:24:58,320 --> 00:25:00,280
changes. 
And at some point I was looking 

504
00:25:00,280 --> 00:25:02,720
at the actual production code. 
Well, not production code, but 

505
00:25:02,720 --> 00:25:04,280
the, the, the real code, not the
tests. 

506
00:25:04,960 --> 00:25:07,000
And I was, I was like, Hey, this
looks like my previous 

507
00:25:07,000 --> 00:25:07,960
implementation. 
What happened? 

508
00:25:07,960 --> 00:25:12,240
And apparently for some reason, 
Junie or I think it was Claude 

509
00:25:12,240 --> 00:25:15,160
made some changes and, and did 
some of my changes. 

510
00:25:15,480 --> 00:25:18,920
And I was like, am I now like I 
was, I was challenging myself or

511
00:25:18,920 --> 00:25:20,760
doubting myself like did I make 
a mistake? 

512
00:25:21,040 --> 00:25:22,640
Did I excellently forget to push
it? 

513
00:25:23,240 --> 00:25:26,240
And then I used my knowledge of 
a git and did a Git revlog. 

514
00:25:26,640 --> 00:25:29,160
I started to look at all the 
commits that were made and I 

515
00:25:29,160 --> 00:25:32,920
discovered that two commits 
before I use claw to make some 

516
00:25:32,920 --> 00:25:35,800
changes, pushed it without 
looking and it actually undid 

517
00:25:35,800 --> 00:25:38,560
some of my changes. 
So you really have to be careful

518
00:25:38,560 --> 00:25:41,960
sometimes and using a branch, a 
feature branch and pull requests

519
00:25:42,240 --> 00:25:45,480
really help, especially because 
you can go to git up or if 

520
00:25:45,480 --> 00:25:48,160
you're stuck on Azure DevOps and
go back and see what you what 

521
00:25:48,160 --> 00:25:50,200
you force pushed all the time 
because I use a lot of force 

522
00:25:50,200 --> 00:25:53,000
pushing. 
And the other thing you said 

523
00:25:53,000 --> 00:25:57,600
about experimenting, I'm not the
I'm, I don't like experimenting 

524
00:25:57,600 --> 00:26:00,280
in the sense that I just start 
doing something. 

525
00:26:01,000 --> 00:26:03,400
You could say I use my open 
source projects to experiment, 

526
00:26:03,400 --> 00:26:05,360
but I'm not going to build 
something and throw it away. 

527
00:26:05,360 --> 00:26:08,240
I don't like that. 
But I had a discussion or not a 

528
00:26:08,240 --> 00:26:11,560
discussion. 
Like I was talking with one of 

529
00:26:11,560 --> 00:26:14,960
my managers at Aviva and he was 
asking like, yeah, I get all 

530
00:26:14,960 --> 00:26:18,680
these questions that people want
to use AI and do we want, don't 

531
00:26:18,680 --> 00:26:21,040
we want to standardise or 
something or make a decision 

532
00:26:21,040 --> 00:26:24,080
which one we use? 
And I kind of said like, don't 

533
00:26:24,080 --> 00:26:26,960
do that. 
Let people use whatever AI tool 

534
00:26:26,960 --> 00:26:30,760
they want because it changes all
the time. 

535
00:26:31,280 --> 00:26:34,280
And there may be tools that we 
didn't know about and can be 

536
00:26:34,280 --> 00:26:36,400
very valuable. 
Let them experiment. 

537
00:26:36,400 --> 00:26:40,160
We just track, you know, who's 
using which and and regularly 

538
00:26:40,160 --> 00:26:43,120
chip check up like, OK, are you 
still using this tool? 

539
00:26:43,120 --> 00:26:45,920
Should we extend the license? 
Because it's not about the cost.

540
00:26:46,440 --> 00:26:49,120
You will earn back that money in
in minutes. 

541
00:26:49,120 --> 00:26:52,800
You know, I also had some 
clients like I think at that 

542
00:26:52,800 --> 00:26:55,160
time where I tried to decide 
should we use copilot? 

543
00:26:55,160 --> 00:26:57,840
Do we even want to do that? 
Yeah, but we have 300 

544
00:26:57,840 --> 00:26:58,960
developers. 
Yeah. 

545
00:26:58,960 --> 00:27:02,320
So 300 developers times $15.00 a
month. 

546
00:27:02,920 --> 00:27:06,040
That sounds like a lot of money.
If you, if you think like that, 

547
00:27:06,840 --> 00:27:11,600
it's $15.00 a month, you earn 
that back in 5 minutes and 10 

548
00:27:11,600 --> 00:27:13,920
fold because it will give you so
much power. 

549
00:27:14,720 --> 00:27:17,080
But then it's the other side. 
I think we didn't talk about 

550
00:27:17,080 --> 00:27:19,560
that. 
There's also a lot of developers

551
00:27:19,560 --> 00:27:22,280
junior, I would say aspiring 
developers, junior sounds so 

552
00:27:22,280 --> 00:27:25,760
negative. 
Inexperienced developers that 

553
00:27:25,800 --> 00:27:29,360
either are too inexperienced to,
to. 

554
00:27:30,200 --> 00:27:32,080
I would say there's 22 versions 
of them. 

555
00:27:32,440 --> 00:27:36,240
You have the people that don't 
want to use AI because they're 

556
00:27:36,240 --> 00:27:39,160
afraid they lose the capability 
to learn themselves. 

557
00:27:39,160 --> 00:27:42,080
They kind of see that. 
I mean, if you experienced 

558
00:27:42,080 --> 00:27:44,840
enough, you've you, you went 
through that process, you build 

559
00:27:44,840 --> 00:27:48,600
the skills on how to find 
something using Google, but 

560
00:27:48,600 --> 00:27:51,680
they, they don't want to use AI 
because they want to force 

561
00:27:51,680 --> 00:27:54,560
themselves to do the 
investigation and the 

562
00:27:54,560 --> 00:27:57,360
experimenting themselves. 
They do want to make mistakes. 

563
00:27:57,640 --> 00:27:59,920
Go to Stack Overflow, although 
there's not much happening 

564
00:27:59,920 --> 00:28:02,080
there. 
Go to Google, read 

565
00:28:02,080 --> 00:28:05,040
documentation, try to interpret 
them themselves because they're 

566
00:28:05,040 --> 00:28:08,360
afraid if they don't, they lose 
these, these learning skills, 

567
00:28:08,360 --> 00:28:10,680
the cognitive skills. 
And I read somewhere that 

568
00:28:10,680 --> 00:28:14,040
there's actually that the 
current generation has less 

569
00:28:14,040 --> 00:28:17,160
cognitive skills than the 
previous generation because 

570
00:28:17,160 --> 00:28:19,520
they're so grown up with, with 
Chachi Petit and everything. 

571
00:28:21,200 --> 00:28:26,760
And you have like, relatively 
inexperienced developers that 

572
00:28:26,880 --> 00:28:31,600
are using AI everywhere they 
can, but they miss the skills or

573
00:28:31,600 --> 00:28:35,800
the experience to judge whether 
what the AI generated actually 

574
00:28:35,800 --> 00:28:38,280
makes sense. 
And I've seen that. 

575
00:28:38,280 --> 00:28:42,000
I've seen developers creating a 
pool quest with some changes. 

576
00:28:42,600 --> 00:28:45,240
And I was looking at it and I 
thought, like, does that even 

577
00:28:45,240 --> 00:28:46,920
work? 
And he said, yeah, the test 

578
00:28:46,920 --> 00:28:49,200
work, but do you understand how 
it works? 

579
00:28:50,120 --> 00:28:52,520
No. 
So you used AI. 

580
00:28:52,760 --> 00:28:55,160
Yes, I did. 
So you don't actually know what 

581
00:28:55,160 --> 00:28:58,160
this code is doing. 
Well, I know that know what it 

582
00:28:58,160 --> 00:29:00,320
tries to do, but I don't 
understand what these lines of 

583
00:29:00,320 --> 00:29:02,320
code are doing. 
And that's the point where I 

584
00:29:02,320 --> 00:29:08,760
said, OK, dude, I really support
that you use AI, but use it in a

585
00:29:08,760 --> 00:29:12,440
way that I don't see it, you 
know, kind of saying like, like,

586
00:29:12,440 --> 00:29:14,880
I don't care if you don't 
practice test driven development

587
00:29:15,640 --> 00:29:18,720
really properly, but make sure 
that the code is actually 

588
00:29:18,720 --> 00:29:22,320
designed in a way that I would 
if I practice DDD because I, I, 

589
00:29:22,400 --> 00:29:25,640
I, I, I'm a big fan of that. 
As long as you you can use 

590
00:29:25,640 --> 00:29:28,160
whatever code you, whatever 
tools you want, whatever 

591
00:29:28,160 --> 00:29:31,320
practice you want, as long as 
the code is really the way we 

592
00:29:31,320 --> 00:29:32,840
want to have it, then we can 
maintain it. 

593
00:29:33,160 --> 00:29:37,000
I think this is very interesting
because in my, at least if I 

594
00:29:37,000 --> 00:29:39,880
look at myself, my educational 
career was always OK, you go and

595
00:29:39,880 --> 00:29:41,400
you do the research yourself, 
right? 

596
00:29:41,600 --> 00:29:43,600
Because if you ask me and I give
you the answer, it's not going 

597
00:29:43,600 --> 00:29:46,800
to stick. 
Well, I did that and then I went

598
00:29:46,880 --> 00:29:50,200
into kind of adulthood and in my
first job and they said, well, 

599
00:29:50,680 --> 00:29:52,320
do the research and definitely 
do that. 

600
00:29:52,320 --> 00:29:54,960
But also if you're stuck and if 
you feel like you need a quicker

601
00:29:54,960 --> 00:29:58,200
answer, we are here to be 
productive as a team. 

602
00:29:58,200 --> 00:30:00,320
So if I can give you the answer 
instead of you researching and 

603
00:30:00,320 --> 00:30:04,080
being on an island by yourself 
for a day, ask and I'll, I'll, I

604
00:30:04,080 --> 00:30:07,360
will brainstorm. 
So I asked, I learned how to ask

605
00:30:07,360 --> 00:30:10,360
and I think the answer stuck 
with me because the answers made

606
00:30:10,360 --> 00:30:12,000
sense. 
And if I didn't understand, I 

607
00:30:12,000 --> 00:30:15,000
would ask again and I would go 
deeper with colleagues and with 

608
00:30:15,000 --> 00:30:17,760
my team specifically. 
I learned a lot through that 

609
00:30:17,800 --> 00:30:20,880
through just reflecting with 
people, bouncing off ideas, 

610
00:30:21,080 --> 00:30:23,800
genuinely being curious and 
being like, just can you explain

611
00:30:23,920 --> 00:30:27,360
exactly XY and Z? 
And I feel like I can't revert 

612
00:30:27,360 --> 00:30:28,960
time. 
I can't change how I learned, 

613
00:30:28,960 --> 00:30:32,480
but if I were to have CHA GPT 
right now, also from a coding 

614
00:30:32,480 --> 00:30:35,760
perspective, if I have a 
specific language, if there are 

615
00:30:35,760 --> 00:30:38,720
conventions that I don't 
understand, I ask and I go 

616
00:30:38,720 --> 00:30:42,480
through line by line, not every 
single line because I feel like 

617
00:30:42,480 --> 00:30:44,800
some stuff it's fine. 
If I don't understand this bit, 

618
00:30:44,800 --> 00:30:46,480
it's going to be OK. 
In the end. 

619
00:30:46,480 --> 00:30:48,840
I feel like it makes sense, but 
it's because you already have a 

620
00:30:48,840 --> 00:30:50,800
mental model. 
I feel like you can do two 

621
00:30:50,800 --> 00:30:52,320
things right? 
You can be the engineer that 

622
00:30:52,320 --> 00:30:55,040
copy paste from stack overflow 
pushes it to production, it 

623
00:30:55,040 --> 00:30:58,440
works, it's OK. 
Same with CHA GPT, it generated,

624
00:30:58,440 --> 00:31:01,640
it pushes, it's, it's OK. 
Or you can be the person that 

625
00:31:01,640 --> 00:31:05,080
leverages whatever you have now.
And that curiosity kind of drive

626
00:31:05,080 --> 00:31:09,600
you in doing AQ and a with 
yourself with an AI tool that 

627
00:31:09,600 --> 00:31:12,640
can actually explain and reason 
and go deep and be like what 

628
00:31:12,640 --> 00:31:14,080
these are the architecture 
conventions. 

629
00:31:14,080 --> 00:31:17,120
And this is actually where it, 
it doesn't follow these 

630
00:31:17,120 --> 00:31:19,640
standards. 
And then you can ask, I think 

631
00:31:19,640 --> 00:31:21,600
your colleagues or your team, 
does this make sense? 

632
00:31:21,600 --> 00:31:23,920
Or is it actually a conscious 
choice? 

633
00:31:23,920 --> 00:31:27,080
And as long as you have a 
curious mind, as long as you try

634
00:31:27,080 --> 00:31:30,160
and maintain your critical 
thinking, I think you can speed 

635
00:31:30,160 --> 00:31:34,160
up very quickly. 
You can, I'm, I'm trying to 

636
00:31:34,160 --> 00:31:37,680
think like in the past. 
I, I sometimes had to, well, I 

637
00:31:37,720 --> 00:31:41,440
often worked with, again, 
aspiring developers and you 

638
00:31:41,440 --> 00:31:44,720
typically saw scale. 
You have people that asked every

639
00:31:44,720 --> 00:31:46,240
question. 
They were asking questions all 

640
00:31:46,240 --> 00:31:48,440
the time. 
And you have people that were 

641
00:31:48,440 --> 00:31:51,720
afraid to ask questions. 
And I can also imagine that the 

642
00:31:51,720 --> 00:31:55,160
people who are very hesitant in 
bothering the team, even though 

643
00:31:55,160 --> 00:31:58,080
that's the whole point of the 
team, we'll probably go to chat 

644
00:31:58,080 --> 00:32:01,920
Chiapati instead of even asking.
I'm not sure if that will 

645
00:32:01,920 --> 00:32:04,800
actually give you a good or bad 
result because I do it myself. 

646
00:32:04,800 --> 00:32:08,120
I tend to like, I think a year 
or two years ago, a year ago, I 

647
00:32:08,120 --> 00:32:12,680
think I was wondering between 
Azure Function Apps or Azure 

648
00:32:12,680 --> 00:32:16,640
Container Apps and if you go on 
the Internet and try to find the

649
00:32:16,640 --> 00:32:19,760
answers, you typically would go 
to stacco flow because this is 

650
00:32:19,760 --> 00:32:22,400
where the descriptions happen. 
Maybe in Reddit these days. 

651
00:32:22,840 --> 00:32:26,960
Now I just ask Chetty Petty and 
it will give me a nice breakdown

652
00:32:26,960 --> 00:32:29,720
between the options and the pros
and cons and I can continue 

653
00:32:29,720 --> 00:32:33,000
asking like what is acceptable. 
Another example, like a couple 

654
00:32:33,000 --> 00:32:35,600
of weeks ago, we were were 
wondering like, OK, we need to 

655
00:32:35,600 --> 00:32:40,640
capture some guidelines on how 
fast our website should respond.

656
00:32:40,640 --> 00:32:43,640
What is acceptable, what's not? 
In the past, I would Google. 

657
00:32:43,880 --> 00:32:47,080
Now, I just asked ChatGPT and 
say, hey, do you know any 

658
00:32:47,080 --> 00:32:50,120
industry except the standards 
for defining how fast the 

659
00:32:50,120 --> 00:32:53,880
website should respond? 
And it gives me a beautiful 

660
00:32:53,880 --> 00:32:55,880
answer. 
And it can even tell me like, 

661
00:32:56,160 --> 00:32:59,640
oh, you want some examples of 
websites that document this or, 

662
00:32:59,920 --> 00:33:02,440
or sometimes there's 
documentation that's not 

663
00:33:02,440 --> 00:33:05,200
properly. 
There's no, there's no industry 

664
00:33:05,200 --> 00:33:08,080
standard, but it has kind of, 
you know, yeah. 

665
00:33:08,400 --> 00:33:12,440
What I was trying to say is that
ChatGPT or GPT or AI is capable 

666
00:33:12,720 --> 00:33:16,320
of interpreting different 
versions of the truth and try to

667
00:33:16,320 --> 00:33:19,160
combine that in a certain way, 
which is a nice way because 

668
00:33:19,160 --> 00:33:21,600
sometimes you do want to hear 
different stories or different 

669
00:33:21,840 --> 00:33:25,440
perspectives of a problem and 
get the combined result. 

670
00:33:26,320 --> 00:33:28,600
And it's ridiculous. 
But I use it every day, many 

671
00:33:28,600 --> 00:33:33,440
times a day, even when I was 
trying to buy a new car. 

672
00:33:33,520 --> 00:33:37,240
Get feedback on what are common 
problems with that car or or you

673
00:33:37,240 --> 00:33:39,840
know what is better or what what
do people say about it, about 

674
00:33:39,840 --> 00:33:43,120
this particular type of car. 
I used everywhere now. 

675
00:33:43,240 --> 00:33:45,800
Yeah, I'd love to get your 
perspective on this because I 

676
00:33:45,800 --> 00:33:49,160
did AQ and a episode recently 
and someone said, OK, if you 

677
00:33:49,160 --> 00:33:53,640
were to be responsible for 
actually building up a person 

678
00:33:53,640 --> 00:33:55,400
that wants to be a software 
engineer, they start from 

679
00:33:55,400 --> 00:33:59,160
scratch, what would you focus on
specifically with what you know 

680
00:33:59,160 --> 00:34:02,400
nowadays? 
That's a really good question. 

681
00:34:02,560 --> 00:34:03,600
Sorry. 
That's a really good. 

682
00:34:04,520 --> 00:34:08,280
I don't think I answered that in
a good way because this is one 

683
00:34:08,280 --> 00:34:11,159
that can go quite in a lot of 
directions to be honest. 

684
00:34:12,080 --> 00:34:14,800
This happens like this 
particular situation happens a 

685
00:34:14,800 --> 00:34:18,520
lot because I have a couple of 
pretty young developers in my 

686
00:34:18,520 --> 00:34:23,400
team. 
In the end, I think it's still 

687
00:34:23,400 --> 00:34:29,360
the way it happened in the past.
It's letting them fix box in an 

688
00:34:29,360 --> 00:34:34,040
existing code base, letting them
pick up small improvements where

689
00:34:34,040 --> 00:34:36,719
they touch a big chunk of the 
code base and learn about that 

690
00:34:36,719 --> 00:34:40,320
code base, let them ask 
questions. 

691
00:34:41,320 --> 00:34:43,400
And one of the things I do, and 
I've been doing this for many 

692
00:34:43,400 --> 00:34:48,080
years, when they create a pool 
request, I, I review it and I 

693
00:34:48,080 --> 00:34:51,320
use emojis in my poetry, not 
because I need to express my 

694
00:34:51,520 --> 00:34:58,760
emotions, but what I'm trying to
do is I tried to emphasize how 

695
00:34:58,760 --> 00:35:00,960
they should interpret my, my 
code review comments. 

696
00:35:01,240 --> 00:35:05,400
So I use, for example, a pickaxe
to say I'm, I'm nitpicking. 

697
00:35:05,400 --> 00:35:09,080
And especially in the beginning 
and with new, new joiners, I do 

698
00:35:09,080 --> 00:35:11,480
that more, I do that more 
extensively, even though I 

699
00:35:11,480 --> 00:35:15,200
shouldn't be nitpicking, but I, 
it's my way of saying, OK, this 

700
00:35:15,200 --> 00:35:18,360
is OK. 
This can be done better for 

701
00:35:18,360 --> 00:35:20,880
business reasons. 
And then I use different things.

702
00:35:20,880 --> 00:35:25,320
I use thinking person to say, 
OK, you know what? 

703
00:35:25,800 --> 00:35:28,040
This is probably OK. 
There's different ways of doing 

704
00:35:28,040 --> 00:35:29,400
it. 
Let's discuss that. 

705
00:35:29,840 --> 00:35:32,880
And then I use that opportunity.
They probably call me or we at 

706
00:35:32,880 --> 00:35:35,320
the office or we discussed that 
and I tried to explain them the 

707
00:35:35,320 --> 00:35:39,160
pros and cons of that solution 
and make them thinking about it,

708
00:35:39,200 --> 00:35:42,240
make them think about it. 
The other things are sometimes I

709
00:35:42,240 --> 00:35:45,640
use a camp campground icon, you 
know, to leave the campground 

710
00:35:45,640 --> 00:35:49,440
cleaner, which also is for them 
an opportunity to understand, 

711
00:35:49,440 --> 00:35:53,280
OK, so my code is OK, but 
there's, there's ways to make 

712
00:35:53,280 --> 00:35:55,720
that better. 
And I think that's, that's 

713
00:35:55,720 --> 00:35:57,760
already a learning exercise by 
itself. 

714
00:35:58,440 --> 00:36:02,320
And if they're stuck on a 
particular solution, sometimes 

715
00:36:02,320 --> 00:36:05,280
even though I know the answer, I
ask them, look, no, maybe you 

716
00:36:05,280 --> 00:36:08,720
should ask Cha Chi Patee or or 
Juni or whatever AI you're using

717
00:36:09,040 --> 00:36:11,080
to see what they come up, come 
up with and use that as a 

718
00:36:11,080 --> 00:36:13,520
discussion point. 
You know, they do that and we 

719
00:36:13,520 --> 00:36:15,040
have actually something to 
discuss about. 

720
00:36:15,280 --> 00:36:16,280
Interesting. 
Yeah. 

721
00:36:16,720 --> 00:36:20,280
Because especially if you talk 
about architecting the system, 

722
00:36:20,520 --> 00:36:22,280
what kind of abstraction do we 
need? 

723
00:36:22,440 --> 00:36:26,200
Why would we use the dependency 
inversion principle in this 

724
00:36:26,200 --> 00:36:28,160
solution to decouple something 
from each other? 

725
00:36:28,520 --> 00:36:30,280
That is not something an AI does
for you. 

726
00:36:30,720 --> 00:36:35,400
That requires like a holistic 
view on what you're trying to 

727
00:36:35,400 --> 00:36:37,960
do. 
And I don't think an AI can do 

728
00:36:37,960 --> 00:36:39,920
that right now. 
This is actually the value. 

729
00:36:40,560 --> 00:36:42,800
And as long as we need to 
maintain the code, we need to 

730
00:36:42,800 --> 00:36:45,760
think about coupling A cohesion 
and that kind of things. 

731
00:36:45,760 --> 00:36:46,840
We have still to think about 
that. 

732
00:36:46,920 --> 00:36:49,880
Yeah, yeah. 
The thing you triggered me when 

733
00:36:49,880 --> 00:36:52,600
you said, OK, some people will 
ask ChatGPT instead of asking a 

734
00:36:52,600 --> 00:36:54,280
colleague. 
For me, there are a lot of 

735
00:36:54,280 --> 00:36:58,000
things that my opinion is of 
myself, I should know these 

736
00:36:58,000 --> 00:37:01,440
things and I just don't. 
And then I can ask a colleague, 

737
00:37:01,440 --> 00:37:02,600
right? 
I, I feel he's a bit 

738
00:37:02,600 --> 00:37:04,560
embarrassing and probably from 
the other side, it's not 

739
00:37:04,560 --> 00:37:06,120
embarrassing at all. 
This is really just this 

740
00:37:06,120 --> 00:37:10,320
imposter syndrome feeling. 
Or I ask and I use a tool to 

741
00:37:10,320 --> 00:37:14,200
kind of better figure out what 
is actually going on before I 

742
00:37:14,200 --> 00:37:16,840
ask a question because I will 
still want kind of human 

743
00:37:16,840 --> 00:37:20,600
feedback, a human in the loop in
the end for my decision making 

744
00:37:20,600 --> 00:37:22,480
power. 
In essence, I feel like we have 

745
00:37:22,480 --> 00:37:25,560
a tool that can give us a lot of
input with regards to what is 

746
00:37:25,560 --> 00:37:28,080
there and also how historically 
things have built. 

747
00:37:28,520 --> 00:37:31,320
Sometimes if you are in a 
project that is quite far along,

748
00:37:31,320 --> 00:37:33,920
there is no single person that 
knows the context and the 

749
00:37:33,920 --> 00:37:36,320
history of the code base. 
But now you have a tool that can

750
00:37:36,320 --> 00:37:38,720
actually facilitate that 
information, that distribution 

751
00:37:38,720 --> 00:37:42,280
of information to you and it can
do it quite well, which is going

752
00:37:42,280 --> 00:37:45,360
to be quite interesting for like
modernizing software in essence.

753
00:37:45,880 --> 00:37:48,960
But we are still, we still have 
to take ownership, we still have

754
00:37:48,960 --> 00:37:53,040
to do the decision making and we
still have to align on things as

755
00:37:53,040 --> 00:37:56,560
a team, I would say. 
Yes, but the tool can help you 

756
00:37:58,440 --> 00:38:00,560
understand a complicated code 
base. 

757
00:38:01,000 --> 00:38:04,040
In fact, I use that also like 
especially when you have a lot 

758
00:38:04,040 --> 00:38:06,280
of micro service architecture, 
you try to figure out like how 

759
00:38:06,280 --> 00:38:08,440
does this information flow from 
one surface to the other? 

760
00:38:08,800 --> 00:38:11,040
You can do that yourself. 
Go through the abstractions. 

761
00:38:11,040 --> 00:38:12,920
Oh, I'm doing an HTP endpoint 
call here. 

762
00:38:13,120 --> 00:38:16,280
Where's the the handler on? 
Where's that HTPAPI on the other

763
00:38:16,280 --> 00:38:20,000
side? 
I use AI for that, but 

764
00:38:20,000 --> 00:38:24,200
understanding the history and 
the reasons behind that, that is

765
00:38:24,200 --> 00:38:26,120
the source control if you're 
lucky. 

766
00:38:26,720 --> 00:38:29,520
And that's also one of the 
reasons why I still are very 

767
00:38:29,600 --> 00:38:32,840
obnoxious about making sure that
people create pull requests that

768
00:38:32,840 --> 00:38:37,960
describe not just what it tries 
to do, but what is what's the 

769
00:38:37,960 --> 00:38:41,160
reason for that. 
And I still do that for commits,

770
00:38:41,240 --> 00:38:42,600
for pull requests, for 
everything. 

771
00:38:42,840 --> 00:38:45,520
It should capture what you're 
trying to do, not how you did 

772
00:38:45,520 --> 00:38:47,800
it, because I can see that 
because that information is 

773
00:38:47,800 --> 00:38:49,920
lost. 
It's not it's not on a code bit.

774
00:38:50,080 --> 00:38:53,440
Maybe by using comments you can 
I even do that and documenting 

775
00:38:53,440 --> 00:38:56,160
my code still properly 9 out of 
time. 

776
00:38:56,160 --> 00:38:58,600
I do that using AI, but it's 
really good. 

777
00:38:58,640 --> 00:39:01,080
So yeah. 
And by the way, that's funny 

778
00:39:01,080 --> 00:39:04,600
because I'm actually surprised. 
I use I use writer. 

779
00:39:04,600 --> 00:39:09,160
As I said, I often use AI or 
writer to generate description 

780
00:39:09,160 --> 00:39:12,320
of my pool of my commit because 
I still have a client that uses 

781
00:39:12,320 --> 00:39:13,880
Azure DevOps. 
I'm a big fan of it. 

782
00:39:14,200 --> 00:39:18,440
I'm not a fan of it that I said,
but I I let the AI generate the 

783
00:39:18,440 --> 00:39:21,680
description and I'm often 
surprised that it somehow 

784
00:39:21,680 --> 00:39:25,480
figured out what I'm trying to 
do so just didn't explain what 

785
00:39:25,480 --> 00:39:28,920
files are changed or but it 
actually sees the value of that 

786
00:39:28,920 --> 00:39:31,000
and can and can write that in a 
functional way. 

787
00:39:31,240 --> 00:39:33,200
That's really solid. 
I don't even understand how it 

788
00:39:33,200 --> 00:39:36,560
does that, but I take that, that
description and I put it in the 

789
00:39:36,640 --> 00:39:38,800
pull across description and 
sometimes tweak a little bit, 

790
00:39:39,520 --> 00:39:42,920
but it's better than Copilot, 
Git of Copilot, it's own summary

791
00:39:42,920 --> 00:39:44,840
functionality because that's 
very technical. 

792
00:39:45,200 --> 00:39:48,240
But for some reason Claude and 
Junie can actually do that for 

793
00:39:48,240 --> 00:39:50,080
me. 
Maybe because it looks at the 

794
00:39:50,080 --> 00:39:53,480
history of the codebase. 
I don't know what we were 

795
00:39:53,480 --> 00:39:54,160
saying. 
Oh yeah. 

796
00:39:54,520 --> 00:39:59,280
So it's still valuable to make 
sure that your your git history 

797
00:39:59,680 --> 00:40:02,520
captures the essence the the the
the purpose of what you're 

798
00:40:02,520 --> 00:40:03,800
doing. 
Yeah, absolutely. 

799
00:40:04,120 --> 00:40:07,360
I saw GitHub, they do this quite
extensively. 

800
00:40:07,360 --> 00:40:09,960
They make business decision 
records, so not architectural 

801
00:40:09,960 --> 00:40:13,040
decision records because they 
want business outcomes. 

802
00:40:13,040 --> 00:40:15,720
It can be cost savings, it could
be new revenue streams, 

803
00:40:16,160 --> 00:40:19,960
different or or magnitudes of 
scale, for example, that can 

804
00:40:19,960 --> 00:40:22,760
reach the business outcomes and 
they capture that in quite an 

805
00:40:22,760 --> 00:40:26,440
extensive documentation. 
If you already do AD Rs and if 

806
00:40:26,440 --> 00:40:30,440
you really work on historically 
capturing your context through 

807
00:40:30,440 --> 00:40:33,080
commits, through pull requests, 
through ticketing systems, 

808
00:40:33,400 --> 00:40:37,280
decision making records, I feel 
like you will be, I think 

809
00:40:37,280 --> 00:40:40,680
investing in the future because 
that context is quite useful for

810
00:40:40,680 --> 00:40:44,120
humans and it's hard for a human
to go through all the context, 

811
00:40:44,120 --> 00:40:46,680
But humans now have tools to 
actually go through all the 

812
00:40:46,680 --> 00:40:48,600
context. 
So the richer the context is, 

813
00:40:48,880 --> 00:40:51,440
the better we can make decisions
and kind of understand 

814
00:40:51,440 --> 00:40:54,640
historically what has happened, 
which I think is really cool to 

815
00:40:54,640 --> 00:40:56,280
be honest. 
The companies that have invested

816
00:40:56,280 --> 00:41:00,400
in that, they will be leaps and 
bounds ahead compared to the 

817
00:41:00,400 --> 00:41:02,600
companies that don't invest in 
that agree. 

818
00:41:03,080 --> 00:41:06,200
And, and, and you're preaching 
to the choir here because this 

819
00:41:06,200 --> 00:41:08,920
is exactly what I do with my 
clients quite often. 

820
00:41:09,360 --> 00:41:11,800
I try to convince them to adopt 
Confluence, Atlassian 

821
00:41:11,800 --> 00:41:13,720
Confluence, because it's a 
beautiful documentation 

822
00:41:13,720 --> 00:41:16,160
platform. 
And we use that to create 

823
00:41:16,480 --> 00:41:20,240
basically decision records, 
which is simple pages with which

824
00:41:20,240 --> 00:41:23,120
demonstrate or show you some of 
the history behind decisions, 

825
00:41:23,120 --> 00:41:26,280
like the pros and cons. 
And for any non trivial 

826
00:41:26,280 --> 00:41:29,880
decision, we capture that 
because you make so many 

827
00:41:29,880 --> 00:41:32,960
decisions. 
And I've, I've been at certain 

828
00:41:32,960 --> 00:41:35,960
clients for a long time and what
you, what happened at some 

829
00:41:35,960 --> 00:41:39,280
point, somebody new joins, maybe
a new senior developer, maybe a 

830
00:41:39,280 --> 00:41:42,280
new architect, and they may 
challenge certain decisions that

831
00:41:42,280 --> 00:41:44,920
I made in the past. 
And I make sure that I've 

832
00:41:44,920 --> 00:41:48,400
captured exactly what were the 
reasons at that time to adopt A 

833
00:41:48,400 --> 00:41:52,080
particular strategy. 
Also demonstrate even simple 

834
00:41:52,080 --> 00:41:54,960
tables, you know, with all the 
pros and cons and who were 

835
00:41:54,960 --> 00:41:59,080
involved in the decision and 
what other options did we reject

836
00:41:59,080 --> 00:42:02,720
and for what reasons? 
I used why statements, why dash 

837
00:42:02,720 --> 00:42:06,120
statements, which is a nice way 
of doing that because I've, I've

838
00:42:06,120 --> 00:42:10,080
had the pain of having to deal 
with that situation and I do it 

839
00:42:10,080 --> 00:42:11,840
everywhere. 
And most teams are like, why do 

840
00:42:11,840 --> 00:42:14,920
we need to capture that? 
And when you see after a year or

841
00:42:14,920 --> 00:42:17,800
so, they started to see the 
failure like, oh crap, we 

842
00:42:17,800 --> 00:42:21,400
actually wrote that down. 
And in Confluence, you also have

843
00:42:21,400 --> 00:42:24,360
like, AI, it's called Rovo. 
I think you can now just ask 

844
00:42:24,360 --> 00:42:28,200
like, hey, can you figure out 
why we decided to go for Azure 

845
00:42:28,200 --> 00:42:31,520
Container Apps, for example, as 
we'll find the decision page and

846
00:42:31,520 --> 00:42:36,480
tell you, yeah, because of these
reasons or, yeah, why did we use

847
00:42:36,480 --> 00:42:40,960
private endpoints Azure instead 
of going through application API

848
00:42:40,960 --> 00:42:42,160
management or something like 
that? 

849
00:42:42,840 --> 00:42:44,520
Those are decisions that you 
want to capture. 

850
00:42:44,520 --> 00:42:47,200
They're not even a code. 
They happen outside the code 

851
00:42:47,200 --> 00:42:50,360
base. 
That's maybe the flip side, but 

852
00:42:50,360 --> 00:42:53,760
I don't like writing a markdown 
in GitHub just for capturing 

853
00:42:53,760 --> 00:42:55,680
functional or technical 
decisions. 

854
00:42:55,920 --> 00:42:58,520
I think it's cumbersome. 
Have you ever seen those 

855
00:42:58,800 --> 00:43:03,360
practices of capturing decisions
linked to a sunken cost where we

856
00:43:03,360 --> 00:43:06,280
say, OK, we've made the 
trade-offs we chose for XY and Z

857
00:43:06,280 --> 00:43:09,760
in this context, and that's why 
we're sticking to it rather than

858
00:43:09,760 --> 00:43:12,240
looking at what is now and 
actually maybe pivoting or 

859
00:43:12,240 --> 00:43:14,960
shifting because of going 
through those motions of 

860
00:43:14,960 --> 00:43:16,640
actually capturing those 
decisions? 

861
00:43:16,920 --> 00:43:19,160
Yeah. 
In fact the example that I just 

862
00:43:19,160 --> 00:43:21,160
gave you about the new 
architect, I've seen that it 

863
00:43:21,160 --> 00:43:23,920
happened a couple of times, like
I've been for one particular 

864
00:43:23,920 --> 00:43:26,000
client for a longer period of 
time, couple of years. 

865
00:43:26,720 --> 00:43:31,000
And like what happened a couple 
of times, management changes and

866
00:43:31,000 --> 00:43:34,760
then management tend to talk to 
everybody, like trying to 

867
00:43:34,840 --> 00:43:39,440
understand the the department 
and they may talk to people that

868
00:43:39,480 --> 00:43:42,320
are pretty young but 
influential, which didn't 

869
00:43:42,320 --> 00:43:44,840
actually understand some of the 
decisions I made in the past. 

870
00:43:45,320 --> 00:43:47,720
I started to talk to a manager 
and then a manager at some point

871
00:43:47,720 --> 00:43:51,360
will come to me like, hey, I've 
heard that we're using this in 

872
00:43:51,360 --> 00:43:54,160
this architecture style, which 
the manager doesn't understand 

873
00:43:54,160 --> 00:43:56,560
at all, but it doesn't matter. 
And I heard it's causing a lot 

874
00:43:56,560 --> 00:44:00,080
of pain, you know, and then 
because I can go back and 

875
00:44:00,080 --> 00:44:05,120
demonstrate all that I can kind 
of circumfent somebody will 

876
00:44:05,120 --> 00:44:06,600
decide. 
Now we have to remove that 

877
00:44:06,600 --> 00:44:08,800
because we need to use a simple 
architecture. 

878
00:44:08,800 --> 00:44:13,760
Even though in all my I, I can 
honestly look at my heart and 

879
00:44:13,760 --> 00:44:17,240
say, like, I made that decision 
based on the situation at that 

880
00:44:17,240 --> 00:44:20,320
point of time with all the 
knowledge that I have, if the 

881
00:44:20,320 --> 00:44:22,920
situation has changed, this 
case, the situation didn't 

882
00:44:22,920 --> 00:44:26,000
change and there's no 
alternative, there's no reason 

883
00:44:26,000 --> 00:44:28,960
to change that. 
But I know that because I'm an 

884
00:44:28,960 --> 00:44:30,440
architect, I have the 
experience. 

885
00:44:30,840 --> 00:44:33,600
A manager doesn't have that. 
They just listen to, you know, 

886
00:44:33,600 --> 00:44:36,320
hearsay. 
So in that case has saved me a 

887
00:44:36,320 --> 00:44:37,680
couple of times. 
Yeah, Yeah. 

888
00:44:37,680 --> 00:44:39,480
I think that's super solid, one 
of the. 

889
00:44:39,480 --> 00:44:42,040
Last thoughts I wanted to share 
with you because I like your 

890
00:44:42,040 --> 00:44:44,560
perspective on this has to do 
with open source. 

891
00:44:44,920 --> 00:44:47,240
It was a few weeks back, I think
I read this article about 

892
00:44:47,240 --> 00:44:50,600
Tailwind and the team that 
supports Tailwind, they had to 

893
00:44:50,600 --> 00:44:54,560
lay off 75% of their team. 
Now 75% sounds big, but it's 

894
00:44:54,720 --> 00:44:57,600
three out of four people, which 
is still a lot in essence, but 

895
00:44:57,600 --> 00:45:00,240
it's because their business 
model didn't add up anymore till

896
00:45:00,240 --> 00:45:02,920
when it's there, it's free, it's
open source and they have this 

897
00:45:02,920 --> 00:45:05,440
premium features where certain 
components and component 

898
00:45:05,440 --> 00:45:08,400
libraries that they've made, 
which are really cool, you can 

899
00:45:08,400 --> 00:45:10,480
pay for them and you get those 
out-of-the-box rather than 

900
00:45:10,480 --> 00:45:13,320
creating them yourself. 
Well, now with AI assisted 

901
00:45:13,320 --> 00:45:16,280
development tooling, you can 
basically say I want this 

902
00:45:16,280 --> 00:45:18,600
component that is in their 
premium functionality. 

903
00:45:18,800 --> 00:45:20,960
So you don't have to pay, but 
you still get the benefits 

904
00:45:21,360 --> 00:45:22,840
because everything is open 
source. 

905
00:45:22,840 --> 00:45:26,200
This is now a possibility, but 
it kind of brings at risk 

906
00:45:26,640 --> 00:45:29,880
certain options for making code 
open source. 

907
00:45:29,880 --> 00:45:32,560
Because if there's no business 
model in the end and you still 

908
00:45:32,560 --> 00:45:36,840
need to have a maintenance and a
team behind it, it's kind of a 

909
00:45:36,840 --> 00:45:39,520
chicken and egg problem, right? 
If there's no money in it, then 

910
00:45:39,520 --> 00:45:42,480
people might lose the incentive 
to then make things open source,

911
00:45:42,840 --> 00:45:46,360
Which is a shame because I, I 
really loved that part of this 

912
00:45:46,400 --> 00:45:49,200
community and kind of being a 
software engineer part of 

913
00:45:49,200 --> 00:45:51,040
things. 
Yeah, I definitely have thought 

914
00:45:51,040 --> 00:45:53,840
about it and talked. 
About it this last year, given 

915
00:45:53,920 --> 00:45:56,760
that I actually commercialized 
an open source project, which by

916
00:45:56,760 --> 00:45:59,600
the way wasn't planned, it just 
happened was an opportunity. 

917
00:46:01,160 --> 00:46:05,280
I've always said, even way 
before I was doing that if you 

918
00:46:05,280 --> 00:46:08,040
use open source, it doesn't mean
you get anything. 

919
00:46:08,200 --> 00:46:12,480
Well, how do I phrase this? 
There's no guarantee that that 

920
00:46:12,480 --> 00:46:15,360
code will last. 
And that's actually what 

921
00:46:15,360 --> 00:46:17,280
happened. 
A lot of people felt entitled or

922
00:46:17,280 --> 00:46:20,240
feel entitled that if you use, 
if they use your open source 

923
00:46:20,240 --> 00:46:24,920
library, they feel like they 
kind of expect that this will be

924
00:46:24,920 --> 00:46:26,600
maintained. 
Definitely like a service 

925
00:46:26,960 --> 00:46:29,160
almost. 
And what I often. 

926
00:46:29,160 --> 00:46:35,200
Do as part of an architecture 
role is write down, write down 

927
00:46:35,200 --> 00:46:37,520
guidelines for open source 
consumption. 

928
00:46:38,000 --> 00:46:40,760
And what I usually no what I 
always do is write down 

929
00:46:40,760 --> 00:46:44,560
something that states something 
in the matter of in the style 

930
00:46:44,560 --> 00:46:47,920
of. 
If you use open source, look at 

931
00:46:47,920 --> 00:46:53,160
the quality of that open source 
library, because if the person 

932
00:46:53,160 --> 00:46:56,320
or group of people behind that 
will no longer support it, you 

933
00:46:56,320 --> 00:46:59,320
have to support it. 
So just like AI code is your 

934
00:46:59,320 --> 00:47:03,040
code, if you use a, if you use 
open source code, it may 

935
00:47:03,040 --> 00:47:05,560
eventually become your own code 
that you have to maintain. 

936
00:47:06,200 --> 00:47:09,680
So there are things like, OK, is
it just one man or one person 

937
00:47:09,680 --> 00:47:12,120
that maintains it, or is there 
an entire community behind that?

938
00:47:12,520 --> 00:47:13,800
It's not. 
It doesn't mean that you can't 

939
00:47:13,800 --> 00:47:15,280
use it just means that you have 
to think about it. 

940
00:47:15,720 --> 00:47:18,640
Is it something that you use in 
your build pipeline or unit 

941
00:47:18,640 --> 00:47:21,480
tests? 
Because then it's easier, you 

942
00:47:21,480 --> 00:47:23,920
can be more lenient. 
Or is it something you use in 

943
00:47:23,920 --> 00:47:26,080
production? 
Because if it if it stops being 

944
00:47:26,080 --> 00:47:28,640
maintained, you have to do it 
yourself and it might be very 

945
00:47:28,640 --> 00:47:31,000
complicated. 
What's the quality of that code?

946
00:47:31,000 --> 00:47:34,080
Does it have automatic tests? 
Does it have documentation? 

947
00:47:34,080 --> 00:47:39,200
Is the, does it use all kinds of
code checking tools to make sure

948
00:47:39,200 --> 00:47:42,720
that code is, is at the same 
level that you as a company or 

949
00:47:42,720 --> 00:47:46,560
team tries to uphold? 
And there's a bunch of more like

950
00:47:46,840 --> 00:47:49,080
do they use a a proper branching
strategy? 

951
00:47:49,360 --> 00:47:52,680
What's the code coverage? 
Do they proper read means? 

952
00:47:52,680 --> 00:47:55,440
Do they do release modes, 
release notes, stuff like that? 

953
00:47:55,840 --> 00:47:59,320
That kind of, it's not a single 
rule that says you can't use it,

954
00:47:59,600 --> 00:48:02,840
but it's to make you really 
aware that it is in the end your

955
00:48:02,840 --> 00:48:06,320
code. 
If you take that approach, it's 

956
00:48:06,320 --> 00:48:08,480
easier to to take something and 
and support it. 

957
00:48:08,960 --> 00:48:11,600
Because if, if, if the original 
developer decides to stop 

958
00:48:11,600 --> 00:48:14,720
maintaining it, yeah, then you 
fork the repostory and maintain 

959
00:48:14,720 --> 00:48:16,840
it yourself. 
You could have also decided to 

960
00:48:16,840 --> 00:48:19,040
say, OK, I'm going to write that
code yourself. 

961
00:48:19,720 --> 00:48:22,920
I think in the end that is still
much more expensive than take 

962
00:48:22,920 --> 00:48:24,680
something from the open source 
community. 

963
00:48:25,080 --> 00:48:28,280
We quite, quite a lot of people 
underestimate how much 

964
00:48:28,280 --> 00:48:31,080
complexity is behind that. 
I know that I've experienced 

965
00:48:31,080 --> 00:48:35,200
this first hand where people 
said like, oh, I don't, I don't 

966
00:48:35,200 --> 00:48:36,840
need these stupid fluent 
assertions. 

967
00:48:37,080 --> 00:48:39,280
I can build this in a couple of 
days yourself. 

968
00:48:39,520 --> 00:48:42,600
Sure. 
I've spent 15 years perfecting 

969
00:48:42,600 --> 00:48:48,160
it, you know, and even I I built
four or five new open source 

970
00:48:48,160 --> 00:48:50,800
projects this year and there's a
lot of energy. 

971
00:48:50,840 --> 00:48:54,280
It still takes me weeks of 
energy to improve things. 

972
00:48:54,280 --> 00:48:57,120
Even in fluent session eight, I 
was improving some kind of 

973
00:48:57,560 --> 00:48:59,600
reporting thing. 
When you compare collections. 

974
00:48:59,600 --> 00:49:02,840
I spent weeks on trying to find 
a good algorithm and 

975
00:49:02,840 --> 00:49:04,960
implementing in a way that 
actually makes it natural. 

976
00:49:05,160 --> 00:49:08,360
And I still use AI. 
People underestimate the amount 

977
00:49:08,360 --> 00:49:09,960
of work. 
I think Duanda is a good 

978
00:49:09,960 --> 00:49:11,960
example. 
Duanda has this AI. 

979
00:49:11,960 --> 00:49:15,680
Sorry, this authentication 
authorization library used to be

980
00:49:15,680 --> 00:49:18,120
called Identity Server. 
A lot of people use that. 

981
00:49:18,120 --> 00:49:21,200
And when they became commercial,
there was no discussion whether 

982
00:49:21,200 --> 00:49:23,320
the people want to pay for that 
because they realized how 

983
00:49:23,320 --> 00:49:28,800
complex something like that is. 
I think that kind of is an 

984
00:49:28,800 --> 00:49:30,680
answer to you. 
I think one of your points. 

985
00:49:30,920 --> 00:49:34,360
So in the end, use open source 
because it's probably cheaper 

986
00:49:34,440 --> 00:49:38,560
for you to start using it. 
And if it really dies, maintain 

987
00:49:38,560 --> 00:49:41,080
it yourself. 
And if that's too expensive, 

988
00:49:41,360 --> 00:49:42,960
then probably find something 
else. 

989
00:49:42,960 --> 00:49:45,720
But probably it was too 
complicated from the start and 

990
00:49:45,720 --> 00:49:47,600
doing it yourself would never 
have been feasible. 

991
00:49:48,920 --> 00:49:51,360
Now I lost track of my thoughts.
No worries if people are 

992
00:49:51,360 --> 00:49:54,080
wondering, should I? 
Build something that is a 

993
00:49:54,080 --> 00:49:56,200
building block or I have 
something, Should I open source 

994
00:49:56,200 --> 00:49:57,680
it? 
You're a person that open source

995
00:49:57,680 --> 00:50:00,560
a lot, why should they do that? 
What would you say to them? 

996
00:50:00,920 --> 00:50:03,160
It's fun. 
It is. 

997
00:50:03,200 --> 00:50:05,800
A nice way to demonstrate what 
you can. 

998
00:50:06,640 --> 00:50:10,520
It's super cool if you see other
people appreciate that, you 

999
00:50:10,520 --> 00:50:12,440
know? 
Yeah. 

1000
00:50:12,760 --> 00:50:18,560
And if you're lucky, people 
start adopting it and enjoy it. 

1001
00:50:18,560 --> 00:50:21,160
And when that happens, and I had
that with Mokli yesterday, the 

1002
00:50:21,160 --> 00:50:24,200
first time one of my colleagues,
new colleague, actually enjoyed 

1003
00:50:24,200 --> 00:50:26,240
it so much, he thought like, OK,
we found a bug. 

1004
00:50:26,800 --> 00:50:28,120
You know what? 
I'm going to file a bug. 

1005
00:50:28,120 --> 00:50:31,040
And I said, like, you're open to
create a pull request and fix 

1006
00:50:31,040 --> 00:50:32,960
it. 
It will automatically list you 

1007
00:50:32,960 --> 00:50:34,600
as a contributor. 
And he said, yeah, I will do 

1008
00:50:34,600 --> 00:50:36,240
that. 
And he created a pull request. 

1009
00:50:36,240 --> 00:50:38,560
And that for me is always 
valuable. 

1010
00:50:39,160 --> 00:50:41,440
And if I look at all the other 
open source projects, especially

1011
00:50:41,440 --> 00:50:43,560
through the assertions, I 
learned a lot from that. 

1012
00:50:44,120 --> 00:50:46,840
There were so many improvements.
People contributed at some 

1013
00:50:46,840 --> 00:50:50,800
point, ideas of using tools or 
methods or something like that 

1014
00:50:50,800 --> 00:50:54,200
that I didn't know about. 
I now have another library which

1015
00:50:54,200 --> 00:50:58,320
is called the.net Library 
Starter Kit, which I used to 

1016
00:50:58,320 --> 00:51:01,760
combine everything I've learned 
about building packages into 

1017
00:51:01,760 --> 00:51:04,720
likeyoucansay.net new and then 
it will generate an entire 

1018
00:51:04,720 --> 00:51:07,160
solution. 
You can use it for open source, 

1019
00:51:07,160 --> 00:51:10,000
for inner source, for GitHub, 
Azure DevOps capturing 

1020
00:51:10,000 --> 00:51:12,800
everything I learned. 
And people contribute to that by

1021
00:51:12,800 --> 00:51:16,080
saying, hey, did you know about,
I think it's called annotation 

1022
00:51:16,080 --> 00:51:19,000
or not annotation attestation in
GitHub. 

1023
00:51:19,000 --> 00:51:21,760
I never heard about that. 
And you learn from that or 

1024
00:51:22,280 --> 00:51:23,760
somebody else said, hey, maybe 
you can. 

1025
00:51:23,760 --> 00:51:25,720
I have another library called 
Package Card, which is for 

1026
00:51:25,720 --> 00:51:28,000
scanning your licences and open 
source packages. 

1027
00:51:28,520 --> 00:51:32,000
And maybe you can add some 
additional statistics about like

1028
00:51:32,000 --> 00:51:33,920
the maintainability of an open 
source library. 

1029
00:51:33,920 --> 00:51:35,120
And I thought like, hey, that's 
interesting. 

1030
00:51:35,360 --> 00:51:37,720
I didn't even know about this 
service that I can use for that.

1031
00:51:38,240 --> 00:51:42,600
It is almost like you give, but 
you get so much back from it. 

1032
00:51:43,520 --> 00:51:47,360
Knowledge, experience, new 
tools, new insights, visibility,

1033
00:51:47,360 --> 00:51:50,320
of course, and that is very 
valuable. 

1034
00:51:50,440 --> 00:51:52,520
Yeah, I love that. 
Thank you so much for. 

1035
00:51:52,520 --> 00:51:54,600
Coming on, Dennis, and sharing 
your perspective, this was a 

1036
00:51:54,600 --> 00:51:55,680
blast. 
Yeah. 

1037
00:51:56,040 --> 00:51:59,160
Last time was four years ago. 
Next time, hopefully it's not 

1038
00:51:59,160 --> 00:52:02,320
four years I lost even I lost 
track already. 4 times. 

1039
00:52:02,520 --> 00:52:04,280
Yeah. 
If you're still with us, let me.

1040
00:52:04,280 --> 00:52:06,400
Know in the comments section 
what you thought of this episode

1041
00:52:06,400 --> 00:52:07,400
and we'll see you in the next 
one.

