WEBVTT

NOTE
This file was generated by switchtitle

1
00:00:13.708 --> 00:00:15.708
This is Self-Directed Research. Our

2
00:00:15.708 --> 00:00:17.000
hosts, James and Amos,

3
00:00:17.000 --> 00:00:18.416
host weekly hyper-focused

4
00:00:18.416 --> 00:00:20.750
technical deep dives. In today's episode,

5
00:00:21.125 --> 00:00:22.833
James makes a pitch for "Traceability."

6
00:00:23.541 --> 00:00:24.916
Make sure to like, follow, and subscribe

7
00:00:24.916 --> 00:00:26.750
wherever you find us. And as always,

8
00:00:26.750 --> 00:00:29.625
visit sdr-podcast.com/episodes for

9
00:00:29.625 --> 00:00:29.791
all the

10
00:00:29.791 --> 00:00:31.625
presentations, videos, show notes,

11
00:00:31.625 --> 00:00:34.000
and transcripts. And of course, stay

12
00:00:34.000 --> 00:00:35.041
tuned to the end to hear more

13
00:00:35.041 --> 00:00:36.750
about Depot, the sponsor of this

14
00:00:36.750 --> 00:00:37.166
episode.

15
00:00:42.875 --> 00:00:43.916
<v James Munns>Slides, because I haven't looked these in

16
00:00:43.916 --> 00:00:44.583
like a week and a half.

17
00:00:44.958 --> 00:00:45.291
<v Amos Wenger >James.

18
00:00:46.041 --> 00:00:49.791
<v Amanda Majorowicz>I was like organizing before this, like

19
00:00:49.791 --> 00:00:51.541
all of, like getting all of this audio

20
00:00:51.541 --> 00:00:53.416
and everything into the season two blah,

21
00:00:53.416 --> 00:00:55.083
blah, blah, DaVinci Resolve thing.

22
00:00:55.083 --> 00:00:55.875
<v Amos Wenger>It's like you're unionizing.

23
00:00:56.291 --> 00:00:58.666
<v Amanda Majorowicz>And then I was like, "Oh shit," like what

24
00:00:58.666 --> 00:01:00.375
was it season two episode three?

25
00:01:01.125 --> 00:01:02.458
And I was like, "What did we even do?

26
00:01:02.458 --> 00:01:03.875
I can't find any slides anywhere.

27
00:01:03.875 --> 00:01:05.583
James, like what did you present about?"

28
00:01:05.583 --> 00:01:07.416
And then like I opened the audio and it

29
00:01:07.416 --> 00:01:08.500
was just like, "And today

30
00:01:08.500 --> 00:01:10.666
I'm not gonna have any slides."

31
00:01:10.666 --> 00:01:12.541
And I'm like, "Okay, good, good."

32
00:01:12.666 --> 00:01:13.833
<v Amos Wenger>I remember that.

33
00:01:14.208 --> 00:01:14.916
You were supposed to

34
00:01:14.916 --> 00:01:16.166
make some slides, yeah.

35
00:01:16.375 --> 00:01:18.000
<v James Munns>Oh yeah, I should probably go back and

36
00:01:18.000 --> 00:01:19.333
make those slides, yeah.

37
00:01:19.625 --> 00:01:21.791
<v Amanda Majorowicz>I have not started editing that one yet,

38
00:01:21.958 --> 00:01:23.708
so I did not yet, but.

39
00:01:23.958 --> 00:01:26.291
(Sighs)

40
00:01:27.041 --> 00:01:29.125
<v Amos Wenger>Yeah, I don't think I'm that vain, but

41
00:01:29.125 --> 00:01:31.291
listening to yourself in studio grade

42
00:01:31.291 --> 00:01:32.500
headphones is

43
00:01:32.500 --> 00:01:33.750
fascinating, it's mesmerizing.

44
00:01:34.041 --> 00:01:34.958
<v James Munns>I can't do it.

45
00:01:34.958 --> 00:01:36.625
Like I get like one watch of any talk

46
00:01:36.625 --> 00:01:37.958
that I give, then I

47
00:01:37.958 --> 00:01:39.250
have to not listen to it.

48
00:01:39.541 --> 00:01:40.916
Or I have to be in a very good mood when

49
00:01:40.916 --> 00:01:41.541
I listen to it, because

50
00:01:41.541 --> 00:01:43.750
otherwise it's just like, "UGH!"

51
00:01:44.041 --> 00:01:46.291
<v Amos Wenger>So you're saying I am a narcissist.

52
00:01:46.625 --> 00:01:47.250
That's what you're saying.

53
00:01:47.708 --> 00:01:49.750
<v James Munns>No, you have less anxiety of

54
00:01:49.750 --> 00:01:52.250
your own speaking patterns.

55
00:01:52.250 --> 00:01:52.666
I don't know.

56
00:01:52.791 --> 00:01:54.000
<v Amos Wenger>Have I just done it more than

57
00:01:54.000 --> 00:01:54.916
you, is that possible?

58
00:01:55.000 --> 00:01:56.125
<v James Munns>That's probably, yeah.

59
00:01:56.125 --> 00:01:57.291
You've listened to yourself a lot more

60
00:01:57.291 --> 00:01:58.583
than me probably, because you've done all

61
00:01:58.583 --> 00:02:00.166
your own editing and production.

62
00:02:00.500 --> 00:02:02.708
<v Amos Wenger>I have been working way too much, like 60

63
00:02:02.708 --> 00:02:04.041
hours last week, it's not good.

64
00:02:04.291 --> 00:02:05.708
And I'm not getting startup founder

65
00:02:05.708 --> 00:02:07.291
money, is the sad part.

66
00:02:07.291 --> 00:02:07.958
<v Amanda Majorowicz>Oh darn.

67
00:02:08.041 --> 00:02:08.708
<v Amos Wenger>I know.

68
00:02:09.000 --> 00:02:09.750
<v James Munns>Yeah, I have Poststation shipped.

69
00:02:10.000 --> 00:02:12.541
<v Amos Wenger>Yeah, I saw, how did I learn about it

70
00:02:12.666 --> 00:02:14.250
from frickin' Bluesky?

71
00:02:14.750 --> 00:02:16.000
Why didn't you ping me?

72
00:02:16.041 --> 00:02:17.583
<v James Munns>Because we haven't sat down and had a

73
00:02:17.583 --> 00:02:18.833
video call in like three weeks.

74
00:02:20.083 --> 00:02:22.125
<v Amos Wenger>Welcome back to, "So... the podcast."

75
00:02:22.541 --> 00:02:23.291
<v James Munns>So today-

76
00:02:23.625 --> 00:02:24.791
<v Amanda Majorowicz>Okay, bye, I'm leaving.

77
00:02:24.833 --> 00:02:25.291
<v Amos Wenger>Bye, Amanda.

78
00:02:25.375 --> 00:02:25.916
<v James Munns>Get out of here, Amanda.

79
00:02:26.250 --> 00:02:27.000
<v Amos Wenger>Anyway, James.

80
00:02:27.000 --> 00:02:28.791
<v James Munns>Okay, I have a topic that's a little out

81
00:02:28.791 --> 00:02:30.541
of left field, comes from my background

82
00:02:30.541 --> 00:02:32.541
in safety critical, but it is a thing

83
00:02:32.541 --> 00:02:34.041
that I wish we had more of.

84
00:02:34.041 --> 00:02:35.791
And that thing is traceability.

85
00:02:36.250 --> 00:02:37.666
And really what I wish is that we had

86
00:02:37.666 --> 00:02:39.291
good open source traceability tools.

87
00:02:39.916 --> 00:02:41.250
So, Amos, have you heard

88
00:02:41.250 --> 00:02:43.000
of traceability before?

89
00:02:43.041 --> 00:02:44.166
<v Amos Wenger>I have heard of the tracing

90
00:02:44.166 --> 00:02:45.500
crate. Are those related?

91
00:02:45.583 --> 00:02:47.000
<v James Munns>Okay, nope, this is one of those

92
00:02:47.000 --> 00:02:49.291
traditional software, one word means 30

93
00:02:49.291 --> 00:02:50.000
different things in

94
00:02:50.000 --> 00:02:50.916
30 different contexts.

95
00:02:51.416 --> 00:02:52.916
<v Amos Wenger>Is it reproducible build?

96
00:02:54.291 --> 00:02:55.375
<v James Munns>No? No.

97
00:02:56.083 --> 00:02:58.250
It does come from safety critical fields.

98
00:02:59.000 --> 00:03:01.375
And generally what it means is it's a way

99
00:03:01.625 --> 00:03:02.916
to link different pieces

100
00:03:02.916 --> 00:03:04.000
of information together.

101
00:03:04.458 --> 00:03:05.625
So whether you're talking about

102
00:03:05.625 --> 00:03:08.333
requirements or documents to your code,

103
00:03:08.333 --> 00:03:10.916
to your tests, to even documents to

104
00:03:10.916 --> 00:03:12.416
documents like, hey, the government says

105
00:03:12.416 --> 00:03:14.625
we have to do this, this and this, and we

106
00:03:14.625 --> 00:03:16.416
promised our customers we were gonna do

107
00:03:16.416 --> 00:03:17.416
this, this and this.

108
00:03:17.708 --> 00:03:19.041
We should probably make sure that we've

109
00:03:19.041 --> 00:03:21.000
done all of those things or like the

110
00:03:21.000 --> 00:03:22.291
superset of all of those things.

111
00:03:22.625 --> 00:03:23.666
And then we should probably make sure

112
00:03:23.666 --> 00:03:25.375
that we've tested that we do all of those

113
00:03:25.375 --> 00:03:26.666
things, that we do them correctly.

114
00:03:27.000 --> 00:03:28.000
And we should probably make sure that

115
00:03:28.000 --> 00:03:30.541
we've tested all of the code that we've

116
00:03:30.541 --> 00:03:32.500
written or that there is a test for

117
00:03:32.500 --> 00:03:34.041
everything or we didn't just invent

118
00:03:34.041 --> 00:03:35.958
something that we're doing for no good

119
00:03:35.958 --> 00:03:37.791
reason if we didn't say we were gonna do

120
00:03:37.791 --> 00:03:39.166
it or we're not required to

121
00:03:39.166 --> 00:03:40.791
do it or things like that.

122
00:03:41.333 --> 00:03:43.375
<v Amos Wenger>Right, do you know the classic story

123
00:03:43.375 --> 00:03:45.208
about this where like there's a mom that

124
00:03:45.208 --> 00:03:48.958
always cuts the edges of some meat before

125
00:03:48.958 --> 00:03:51.000
she cooks it in the oven and then

126
00:03:51.000 --> 00:03:52.791
eventually the daughter asks like 'why

127
00:03:52.791 --> 00:03:54.666
you're doing that' and then she doesn't.

128
00:03:54.666 --> 00:03:56.125
So she asks her mother, she doesn't, they

129
00:03:56.125 --> 00:03:57.541
go back all the way and it's like, 'oh,

130
00:03:57.541 --> 00:03:59.000
because the oven was too small.

131
00:03:59.000 --> 00:04:00.083
So we had to cut the

132
00:04:00.083 --> 00:04:01.250
edges so it would fit in.'

133
00:04:01.916 --> 00:04:02.833
They did it for generations.

134
00:04:03.500 --> 00:04:04.625
<v James Munns>Exactly that kind of thing.

135
00:04:04.875 --> 00:04:06.958
The example that was always given to me...

136
00:04:07.208 --> 00:04:08.708
so in safety critical fields, usually

137
00:04:08.708 --> 00:04:09.916
traceability is a requirement.

138
00:04:10.291 --> 00:04:11.333
It's one of those things you have to

139
00:04:11.333 --> 00:04:13.458
include in your big piece of paper that

140
00:04:13.458 --> 00:04:15.750
says like: yes, all of my requirements

141
00:04:15.750 --> 00:04:18.333
are documented, all of the code exists to

142
00:04:18.333 --> 00:04:19.916
fulfill a requirement, all the tests

143
00:04:19.916 --> 00:04:22.416
exist to fulfill code and a requirement

144
00:04:22.666 --> 00:04:24.291
and we're not missing anything.

145
00:04:24.291 --> 00:04:25.208
There's no extra code,

146
00:04:25.208 --> 00:04:26.125
there's no extra tests.

147
00:04:26.458 --> 00:04:28.041
The example that was given to us in

148
00:04:28.041 --> 00:04:30.250
safety critical training was: you could put

149
00:04:30.250 --> 00:04:32.583
like a Pac-Man game in a piece of

150
00:04:32.583 --> 00:04:34.625
avionics but you better have requirements

151
00:04:34.625 --> 00:04:36.416
for it and you better have tests for it

152
00:04:36.625 --> 00:04:38.625
because if you just put Easter eggs in

153
00:04:38.625 --> 00:04:40.583
there and they don't map to some

154
00:04:40.583 --> 00:04:42.333
requirement, then they should not be

155
00:04:42.333 --> 00:04:44.291
there because you've never said what

156
00:04:44.291 --> 00:04:46.291
they're supposed to do or not do. And it's

157
00:04:46.291 --> 00:04:48.083
a little silly because you wouldn't wanna

158
00:04:48.083 --> 00:04:50.416
sit down and verify Pac-Man is working

159
00:04:50.416 --> 00:04:51.791
correctly to aviation standards.

160
00:04:52.250 --> 00:04:54.041
But I think this is one of those things

161
00:04:54.041 --> 00:04:55.750
where a lot of the tools that exist for

162
00:04:55.750 --> 00:04:58.250
this are outrageously expensive and

163
00:04:58.250 --> 00:05:00.000
usually their UX is terrible because

164
00:05:00.000 --> 00:05:02.208
their market is like 50 automotive

165
00:05:02.208 --> 00:05:05.250
companies and 10 aviation companies and

166
00:05:05.250 --> 00:05:07.250
some medical device companies and the

167
00:05:07.250 --> 00:05:09.875
iconic document capture tool for this is

168
00:05:09.875 --> 00:05:13.458
IBM DOORS which is like a tool straight

169
00:05:13.458 --> 00:05:16.375
out of the 90s and it's like a very fancy

170
00:05:16.375 --> 00:05:18.458
version of Word with way-- I don't know,

171
00:05:18.458 --> 00:05:20.000
I'm probably casting aspersions on it.

172
00:05:20.000 --> 00:05:22.833
I haven't used DOORS in 10, 15 years but

173
00:05:22.833 --> 00:05:24.916
it's a tool that you only use if you have

174
00:05:24.916 --> 00:05:25.958
to and you pay a lot of

175
00:05:25.958 --> 00:05:28.041
money to a few set of companies.

176
00:05:28.041 --> 00:05:28.375
<v Amos Wenger>I bet.

177
00:05:28.791 --> 00:05:29.958
<v James Munns>Because you have to--

178
00:05:29.958 --> 00:05:31.625
<v Amos Wenger>I thought I was edgy with Apple scripts and

179
00:05:31.625 --> 00:05:34.000
you bring out IBM stuff, okay.

180
00:05:34.000 --> 00:05:35.208
<v James Munns>And there are some companies, like I've

181
00:05:35.208 --> 00:05:36.666
worked at companies that rolled their own,

182
00:05:36.958 --> 00:05:38.166
but they were companies that were big

183
00:05:38.166 --> 00:05:40.333
enough where the cost benefit ratio, it

184
00:05:40.333 --> 00:05:42.041
was cheaper to pay an in-house dev tool

185
00:05:42.041 --> 00:05:44.333
team, like 10 people full time to work on

186
00:05:44.333 --> 00:05:45.583
that tool than it was to pay the

187
00:05:45.583 --> 00:05:46.958
licensing cost for that.

188
00:05:47.208 --> 00:05:48.500
Whereas if you're a smaller company or

189
00:05:48.500 --> 00:05:50.291
you're only making a couple products, you

190
00:05:50.291 --> 00:05:52.375
pay through the nose to have a tool that

191
00:05:52.375 --> 00:05:54.083
when you show it to a regulator, they're

192
00:05:54.083 --> 00:05:55.833
gonna go, "Oh yeah, you use that tool, I

193
00:05:55.833 --> 00:05:57.750
know how to check your configuration, I

194
00:05:57.750 --> 00:05:58.375
know how to check your

195
00:05:58.375 --> 00:05:59.708
reports, no surprises."

196
00:06:00.041 --> 00:06:01.750
A lot of engineering in general but

197
00:06:01.750 --> 00:06:02.916
especially like safety critical

198
00:06:02.916 --> 00:06:03.708
engineering is just

199
00:06:03.708 --> 00:06:05.750
avoiding surprises to regulators.

200
00:06:06.083 --> 00:06:08.041
So just making sure that they go, "Yeah, I

201
00:06:08.041 --> 00:06:08.875
know what I'm seeing and

202
00:06:08.875 --> 00:06:10.083
I know how to verify it."

203
00:06:10.166 --> 00:06:11.833
But I've also worked in teams where this

204
00:06:11.833 --> 00:06:13.916
wasn't just a checkbox, this was like

205
00:06:13.916 --> 00:06:15.166
part of the whole process.

206
00:06:15.625 --> 00:06:18.208
And there's some real like development

207
00:06:18.208 --> 00:06:21.750
flow stuff that I desperately miss from

208
00:06:21.750 --> 00:06:23.125
having that tooling set up.

209
00:06:23.125 --> 00:06:24.708
And I've not found any open source

210
00:06:24.708 --> 00:06:26.666
tooling... There's some open source tooling

211
00:06:26.666 --> 00:06:27.833
that gets near this and there's some

212
00:06:27.833 --> 00:06:28.416
people who have built

213
00:06:28.416 --> 00:06:29.500
their own on top of it.

214
00:06:29.500 --> 00:06:31.208
For example, like Ferrocene is written,

215
00:06:31.708 --> 00:06:33.250
their requirements document is written in

216
00:06:33.250 --> 00:06:34.500
Sphinx which is a Python

217
00:06:34.500 --> 00:06:36.000
tool for specify requirement.

218
00:06:36.208 --> 00:06:38.166
I think they either use some extensions

219
00:06:38.166 --> 00:06:40.291
or built some extensions and they can

220
00:06:40.291 --> 00:06:42.000
like annotate requirements and that's

221
00:06:42.000 --> 00:06:42.791
where like the Ferrocene

222
00:06:42.791 --> 00:06:44.875
language spec is specified in.

223
00:06:45.250 --> 00:06:46.750
It's some dialect of Sphinx.

224
00:06:47.125 --> 00:06:48.125
So it's just a way of

225
00:06:48.125 --> 00:06:49.208
marking up documents.

226
00:06:50.208 --> 00:06:50.416
<v Amos Wenger>Interesting.

227
00:06:50.625 --> 00:06:52.208
Python would not be where I would start

228
00:06:52.208 --> 00:06:52.958
for something like that

229
00:06:52.958 --> 00:06:54.833
but I also don't do it.

230
00:06:54.833 --> 00:06:56.125
<v James Munns>There's a lot of these tools.

231
00:06:56.125 --> 00:06:57.416
The other one that I can think of is from

232
00:06:57.416 --> 00:07:00.708
the, like the web world, WHATWG I think,

233
00:07:00.708 --> 00:07:02.250
they use a tool which is hilariously

234
00:07:02.250 --> 00:07:04.291
called Bikeshed which is a requirements

235
00:07:04.291 --> 00:07:06.041
capture tool, which is excellent.

236
00:07:06.125 --> 00:07:07.000
<v Amos Wenger>It's self-aware.

237
00:07:07.375 --> 00:07:08.041
<v James Munns>Yeah, exactly.

238
00:07:08.375 --> 00:07:10.250
And it's made to make these requirements

239
00:07:10.250 --> 00:07:11.500
documents and things like that, but--

240
00:07:12.000 --> 00:07:13.500
<v Amos Wenger>The WHATWG is the version

241
00:07:13.500 --> 00:07:15.041
of the W3C that matters.

242
00:07:15.250 --> 00:07:16.083
Well, it's a different

243
00:07:16.083 --> 00:07:17.666
consortium that actually works.

244
00:07:18.375 --> 00:07:21.208
From what I know, I just offended like 12

245
00:07:21.208 --> 00:07:21.708
different people

246
00:07:21.708 --> 00:07:22.583
listening to this podcast.

247
00:07:22.833 --> 00:07:23.458
I will send you

248
00:07:23.458 --> 00:07:25.000
individually penned apologies.

249
00:07:25.291 --> 00:07:26.458
<v James Munns>These are things where I'd have to go in

250
00:07:26.458 --> 00:07:29.375
like DM Simon Sapin and like Manish to

251
00:07:29.375 --> 00:07:30.916
figure out like: okay, how

252
00:07:30.916 --> 00:07:32.166
should I feel about these groups?

253
00:07:32.166 --> 00:07:33.250
Because those are the people who have the

254
00:07:33.250 --> 00:07:35.125
opinions that I trust of

255
00:07:35.125 --> 00:07:36.791
those groups and things like that.

256
00:07:36.833 --> 00:07:39.583
<v Amos Wenger>The logo for the WHATWG is just a question

257
00:07:39.583 --> 00:07:41.250
mark which I feel is very appropriate.

258
00:07:41.583 --> 00:07:42.416
It's how I feel about it.

259
00:07:43.458 --> 00:07:45.000
<v James Munns>So let me explain why I miss this.

260
00:07:45.291 --> 00:07:46.875
So at least in Rust, we have a pretty

261
00:07:46.875 --> 00:07:47.791
good culture of having

262
00:07:47.791 --> 00:07:49.333
docs, code and tests.

263
00:07:49.625 --> 00:07:52.166
You usually have a book written in like

264
00:07:52.166 --> 00:07:56.250
MD book or you have doc tests or you just

265
00:07:56.250 --> 00:07:58.083
have like module level docs, so you have

266
00:07:58.083 --> 00:08:00.916
some level of docs and those are

267
00:08:00.916 --> 00:08:02.875
basically requirements like... or they can

268
00:08:02.875 --> 00:08:03.916
be think of to take the

269
00:08:03.916 --> 00:08:04.791
place of requirements.

270
00:08:04.791 --> 00:08:06.708
They're saying what the code should do in

271
00:08:06.708 --> 00:08:09.000
a non-code form through examples or

272
00:08:09.000 --> 00:08:10.750
written prose or things like that.

273
00:08:10.791 --> 00:08:12.208
<v Amos Wenger>But they're not like preconditions like

274
00:08:12.208 --> 00:08:13.500
you got in some other languages.

275
00:08:13.916 --> 00:08:16.000
Like... I think people coming from maybe Ada

276
00:08:16.000 --> 00:08:17.583
or something would think that what we

277
00:08:17.583 --> 00:08:19.583
have in Rust is not good enough.

278
00:08:19.583 --> 00:08:20.916
It doesn't go far enough I think.

279
00:08:21.083 --> 00:08:22.500
<v James Munns>There's all different kinds of things and

280
00:08:22.500 --> 00:08:24.000
like this is like formal verification,

281
00:08:24.291 --> 00:08:25.791
not formal in the same way safety

282
00:08:25.791 --> 00:08:27.208
critical is, but like formally

283
00:08:27.208 --> 00:08:29.500
mathematically verified stuff is- it's

284
00:08:29.500 --> 00:08:31.416
kind of like using code to write your

285
00:08:31.416 --> 00:08:33.125
docs or there's even like, what is it?

286
00:08:33.333 --> 00:08:35.000
Cucumber tests and things like that,

287
00:08:35.000 --> 00:08:36.625
where you say like: as a user, I want my

288
00:08:36.625 --> 00:08:39.125
session to be retained when I logged in

289
00:08:39.208 --> 00:08:40.541
and you write prose to write

290
00:08:40.541 --> 00:08:41.666
tests and things like that.

291
00:08:41.958 --> 00:08:42.875
So I mean, there's different ways to

292
00:08:42.875 --> 00:08:45.208
slice all of this, but in general you

293
00:08:45.208 --> 00:08:46.666
have some kind of documentation, some

294
00:08:46.666 --> 00:08:47.541
kind of description of what

295
00:08:47.541 --> 00:08:48.791
your code's supposed to do.

296
00:08:48.791 --> 00:08:50.166
You have your code where you actually do

297
00:08:50.166 --> 00:08:51.666
it and then you probably have some kind

298
00:08:51.666 --> 00:08:53.458
of unit tests or integration tests where

299
00:08:53.458 --> 00:08:55.458
you say like, yes, it actually does what

300
00:08:55.458 --> 00:08:58.250
I intended and... You just kind of maintain

301
00:08:58.250 --> 00:09:00.416
those all as a bag of things in a repo.

302
00:09:00.791 --> 00:09:02.416
And like these days in open source,

303
00:09:02.541 --> 00:09:04.208
usually the split is better because most

304
00:09:04.208 --> 00:09:05.416
people are putting all three of those

305
00:09:05.416 --> 00:09:06.750
things in one Git repo.

306
00:09:07.208 --> 00:09:08.083
So they do travel

307
00:09:08.083 --> 00:09:09.333
together, which is nice.

308
00:09:09.333 --> 00:09:11.000
Like they travel as a crate or as a

309
00:09:11.000 --> 00:09:13.291
workspace or whatever, which is not

310
00:09:13.291 --> 00:09:15.750
always what like commercial or corporate

311
00:09:15.750 --> 00:09:17.291
projects used to do at least where you'd

312
00:09:17.291 --> 00:09:19.416
have like whatever Excel docs or Word

313
00:09:19.416 --> 00:09:21.083
docs that were captured somewhere and you

314
00:09:21.083 --> 00:09:23.166
might have your code in one weird source

315
00:09:23.166 --> 00:09:25.458
control thing and tests might be some

316
00:09:25.458 --> 00:09:26.500
paperwork that you give

317
00:09:26.500 --> 00:09:28.083
people to do on every release.

318
00:09:28.083 --> 00:09:29.833
At least like in open source, we tend to

319
00:09:29.833 --> 00:09:32.708
have a fairly grouped set of all of these

320
00:09:32.708 --> 00:09:33.958
assets in one place.

321
00:09:33.958 --> 00:09:35.041
But if you go through and you're doing

322
00:09:35.041 --> 00:09:37.666
some like, optimization or just fixing a

323
00:09:37.666 --> 00:09:39.541
bug or something like that, you probably

324
00:09:39.541 --> 00:09:42.916
change some stuff and you probably make

325
00:09:42.916 --> 00:09:43.875
sure your tests work.

326
00:09:44.125 --> 00:09:46.333
And if you have doc tests and you did

327
00:09:46.333 --> 00:09:47.833
change something fundamental enough or

328
00:09:47.833 --> 00:09:49.458
your doc tests now break, because in

329
00:09:49.458 --> 00:09:51.375
Rust, the examples that you put in your

330
00:09:51.375 --> 00:09:53.458
docs will get run as unit tests, at least

331
00:09:53.458 --> 00:09:54.708
that they compile and

332
00:09:54.708 --> 00:09:55.916
sometimes that they run as well.

333
00:09:56.250 --> 00:09:58.541
But outside of that, if you rearchitected

334
00:09:58.541 --> 00:10:00.458
something major or if you fundamentally

335
00:10:00.458 --> 00:10:02.791
added or changed something, nothing's

336
00:10:02.791 --> 00:10:04.625
really gonna tell you if you have a whole

337
00:10:04.625 --> 00:10:06.250
section of your documents that are

338
00:10:06.250 --> 00:10:09.208
totally not relevant anymore or totally

339
00:10:09.208 --> 00:10:12.166
incorrect or you don't know if you

340
00:10:12.166 --> 00:10:13.833
changed something and all of your tests

341
00:10:13.833 --> 00:10:15.500
pass, but you just added a bunch of new

342
00:10:15.500 --> 00:10:17.875
code that is completely untested and

343
00:10:17.875 --> 00:10:18.958
maybe doesn't work the

344
00:10:18.958 --> 00:10:19.791
way you think it does.

345
00:10:20.291 --> 00:10:21.708
So when I've worked in these environments

346
00:10:21.708 --> 00:10:23.208
before where you had real traceability

347
00:10:23.208 --> 00:10:25.458
tools and you had linked all of your docs

348
00:10:25.458 --> 00:10:27.166
to your code and your code to your tests

349
00:10:27.541 --> 00:10:28.958
and then usually your tests back to your

350
00:10:28.958 --> 00:10:31.708
docs, what if instead of just when you do

351
00:10:31.708 --> 00:10:34.166
a PR, the things that changed pop up,

352
00:10:34.541 --> 00:10:37.500
what if also everything one step away

353
00:10:37.500 --> 00:10:40.041
from that thing also came up for

354
00:10:40.041 --> 00:10:41.833
re-review to make sure

355
00:10:41.833 --> 00:10:42.625
it was still accurate?

356
00:10:43.000 --> 00:10:45.625
So if you said this paragraph of docs

357
00:10:45.916 --> 00:10:47.708
goes with this chunk of code, whenever

358
00:10:47.708 --> 00:10:49.708
you change that code, it would present to

359
00:10:49.708 --> 00:10:50.833
you: hey, here's this paragraph.

360
00:10:51.041 --> 00:10:52.208
Is this paragraph still right?

361
00:10:52.500 --> 00:10:53.958
Or hey, there are these tests.

362
00:10:54.333 --> 00:10:56.750
You didn't tell me where the new tests

363
00:10:56.750 --> 00:10:59.083
for the new functionality are or are all

364
00:10:59.083 --> 00:11:01.041
these tests still testing something

365
00:11:01.041 --> 00:11:03.125
worthwhile or are they just trivial or

366
00:11:03.125 --> 00:11:05.500
they're passing for the wrong reason or

367
00:11:05.500 --> 00:11:06.666
something like that now.

368
00:11:06.875 --> 00:11:08.416
<v Amos Wenger>I would imagine the value in that is only

369
00:11:08.416 --> 00:11:10.375
as good as the annotations that you leave

370
00:11:10.375 --> 00:11:12.083
in your docs sources though.

371
00:11:12.416 --> 00:11:15.541
<v James Munns>Yeah, there's no magic here.

372
00:11:15.541 --> 00:11:16.875
At least in these different tools,

373
00:11:16.875 --> 00:11:20.666
usually you get a unique ID for functions

374
00:11:20.958 --> 00:11:23.083
and lines of your docs and

375
00:11:23.083 --> 00:11:24.250
your tests and things like that.

376
00:11:24.250 --> 00:11:26.666
So you have some like project global

377
00:11:26.666 --> 00:11:29.166
numeric store and they act as like

378
00:11:29.166 --> 00:11:30.750
permalinks for all of these things.

379
00:11:31.041 --> 00:11:32.250
When you write your tests, you might say:

380
00:11:32.250 --> 00:11:34.625
verifies either this function name or

381
00:11:34.625 --> 00:11:37.291
verifies some ID that goes with that.

382
00:11:37.291 --> 00:11:39.291
Or when you write the code, you might say:

383
00:11:39.291 --> 00:11:41.166
this goes with this text

384
00:11:41.166 --> 00:11:42.500
section and things like that.

385
00:11:42.500 --> 00:11:43.166
And you don't usually

386
00:11:43.166 --> 00:11:45.083
do like section 2.2f.

387
00:11:45.333 --> 00:11:48.083
You have some ID that is consistent even

388
00:11:48.083 --> 00:11:49.875
if you reorder the docs or you reorder

389
00:11:49.875 --> 00:11:50.791
the code or whatever.

390
00:11:51.125 --> 00:11:52.958
And those tools like DOORS or whatever

391
00:11:52.958 --> 00:11:54.208
will, they have essentially like a

392
00:11:54.208 --> 00:11:56.291
numeric allocator where you can assign

393
00:11:56.291 --> 00:11:58.083
these numbers and they only ever go up.

394
00:11:58.083 --> 00:11:59.833
And it's a large enough space that even

395
00:11:59.833 --> 00:12:01.791
over a very long project, it's like eight

396
00:12:01.791 --> 00:12:03.291
or nine digits worth of numbers.

397
00:12:03.291 --> 00:12:04.375
So you're not gonna run out of them.

398
00:12:04.916 --> 00:12:07.375
<v Amos Wenger>To be fair, it's really hard to, if you

399
00:12:07.375 --> 00:12:09.333
have tests, you can run them and you can

400
00:12:09.333 --> 00:12:11.625
instrument the code to measure code

401
00:12:11.625 --> 00:12:12.416
coverage essentially.

402
00:12:12.750 --> 00:12:15.208
But measuring lines is garbage.

403
00:12:15.791 --> 00:12:17.666
Measuring branches is not much better

404
00:12:17.791 --> 00:12:19.500
because yeah, you can make sure that in

405
00:12:19.500 --> 00:12:22.125
all tests taken together, each branch is

406
00:12:22.125 --> 00:12:24.166
at least taken once, but I don't think it

407
00:12:24.166 --> 00:12:26.083
tests for like all possible combinations

408
00:12:26.083 --> 00:12:27.208
of all possible branches.

409
00:12:27.791 --> 00:12:29.916
So there may be behavior that's described

410
00:12:29.916 --> 00:12:31.000
in the docs that is not

411
00:12:31.000 --> 00:12:32.041
actually tested at all.

412
00:12:32.041 --> 00:12:32.875
And there's no automated

413
00:12:32.875 --> 00:12:34.125
way to really find that out.

414
00:12:34.583 --> 00:12:36.666
<v James Munns>Yeah, so I mean, there's two things in

415
00:12:36.666 --> 00:12:38.666
safety critical, depending on how safety

416
00:12:38.666 --> 00:12:40.000
critical you're talking, where you'll get

417
00:12:40.000 --> 00:12:41.708
into something that's called MC/DC

418
00:12:41.708 --> 00:12:43.791
coverage or modified condition/decision

419
00:12:43.791 --> 00:12:45.291
coverage, where kind of like you're

420
00:12:45.291 --> 00:12:49.083
talking about if A and and B or C, you

421
00:12:49.083 --> 00:12:51.041
don't need to just exercise getting in

422
00:12:51.041 --> 00:12:53.416
that if and out of that if, you have to

423
00:12:53.416 --> 00:12:55.833
exercise all the preconditions and the

424
00:12:55.833 --> 00:12:58.708
MC/DC versus DC means that you could at

425
00:12:58.708 --> 00:13:00.791
least cheat and or not cheat, but you

426
00:13:00.791 --> 00:13:02.291
don't have to prove that the ones that

427
00:13:02.291 --> 00:13:04.208
shortcut because if you have like A and

428
00:13:04.208 --> 00:13:07.916
and B or C, if A is false, you can just

429
00:13:07.916 --> 00:13:09.333
take it for granted that you don't have

430
00:13:09.333 --> 00:13:10.166
to come up with

431
00:13:10.166 --> 00:13:11.708
different test cases for B and C.

432
00:13:12.458 --> 00:13:13.625
So that's the MC/DC versus

433
00:13:13.625 --> 00:13:15.166
just raw decision coverage.

434
00:13:16.125 --> 00:13:18.000
But the other thing is, at least in

435
00:13:18.000 --> 00:13:20.208
avionics, you get into something called

436
00:13:20.208 --> 00:13:22.208
requirements based testing in that you

437
00:13:22.208 --> 00:13:23.666
can't just write tests

438
00:13:23.666 --> 00:13:25.166
to hit code coverage.

439
00:13:25.666 --> 00:13:27.125
Every test case has to be

440
00:13:27.125 --> 00:13:28.958
mapped to some requirement.

441
00:13:29.458 --> 00:13:31.291
And so you end up in this case where

442
00:13:31.291 --> 00:13:32.083
like, you can't just be

443
00:13:32.083 --> 00:13:33.375
like, "Ah, I need to cover this."

444
00:13:33.666 --> 00:13:35.125
It kind of forces you to make sure that

445
00:13:35.125 --> 00:13:37.208
your docs are accurate in that like, you

446
00:13:37.208 --> 00:13:39.041
need to explain why there's an edge case

447
00:13:39.041 --> 00:13:41.541
here and what you do in response to those

448
00:13:41.541 --> 00:13:44.041
edge cases or why you do something

449
00:13:44.041 --> 00:13:45.583
differently when there are more than 64

450
00:13:45.583 --> 00:13:47.541
items where you might just do it linearly

451
00:13:47.541 --> 00:13:49.750
less than that, but you might do binary

452
00:13:49.750 --> 00:13:51.250
search or something for more than that.

453
00:13:51.583 --> 00:13:54.541
<v Amos Wenger>So what you're getting at is that you

454
00:13:54.541 --> 00:13:56.416
think we should not write

455
00:13:56.416 --> 00:13:58.333
markdown for documentation.

456
00:13:58.708 --> 00:13:59.875
We should not write MDBook.

457
00:13:59.875 --> 00:14:01.666
We should write a bunch of tests and then

458
00:14:01.666 --> 00:14:03.791
in the doc tests for those tests, that

459
00:14:03.791 --> 00:14:04.750
should be the entire documentation.

460
00:14:05.041 --> 00:14:06.083
<v James Munns>No, actually the opposite.

461
00:14:06.333 --> 00:14:07.291
<v Amos Wenger>I know that's not what you're actually

462
00:14:07.291 --> 00:14:08.416
saying, but if we did that.

463
00:14:09.083 --> 00:14:10.916
<v James Munns>Yeah, I think that's one way of doing it,

464
00:14:10.916 --> 00:14:13.000
but I think what I really wish is that we

465
00:14:13.000 --> 00:14:16.166
had a way, regardless of syntax, like if

466
00:14:16.166 --> 00:14:17.708
I write it in Typst or if I write it in

467
00:14:17.708 --> 00:14:20.041
markdown or restructured text or

468
00:14:20.041 --> 00:14:22.750
whatever, what I want is a cargo tracing

469
00:14:22.750 --> 00:14:26.208
or cargo trace or some tool that wasn't

470
00:14:26.208 --> 00:14:27.583
necessarily tied to any language

471
00:14:27.583 --> 00:14:29.000
ecosystem where you'd be able to put

472
00:14:29.000 --> 00:14:31.000
these annotations in and some way of

473
00:14:31.000 --> 00:14:32.583
understanding between them.

474
00:14:32.583 --> 00:14:35.333
So actually when I advise teams, I tell

475
00:14:35.333 --> 00:14:36.083
them to keep doing

476
00:14:36.083 --> 00:14:37.083
whatever's effective for them.

477
00:14:37.083 --> 00:14:38.416
If they use a wiki for

478
00:14:38.416 --> 00:14:40.041
docs, keep using the wiki.

479
00:14:40.041 --> 00:14:41.458
It has change management,

480
00:14:41.458 --> 00:14:42.375
it has things like that.

481
00:14:42.625 --> 00:14:44.333
If you use markdown files, great.

482
00:14:44.708 --> 00:14:47.208
Use whatever is useful to you, but I

483
00:14:47.208 --> 00:14:49.458
wanna be able to add that linking of

484
00:14:49.458 --> 00:14:51.500
metadata in a way that

485
00:14:51.500 --> 00:14:53.000
you can get that awareness.

486
00:14:53.000 --> 00:14:54.500
Because like I said, safety critical does

487
00:14:54.500 --> 00:14:55.458
this because you have to have what's

488
00:14:55.458 --> 00:14:57.250
called a traceability matrix, which shows

489
00:14:57.250 --> 00:14:59.500
that you've got like 100% traceability

490
00:14:59.500 --> 00:15:00.708
coverage more or less.

491
00:15:01.333 --> 00:15:03.541
But just how useful it is when you go

492
00:15:03.541 --> 00:15:05.541
like: I'm changing this chunk of code,

493
00:15:05.916 --> 00:15:07.416
why is this code like this?

494
00:15:07.791 --> 00:15:11.125
I wish that language servers existed, so

495
00:15:11.125 --> 00:15:12.666
you could like right click on a function

496
00:15:13.208 --> 00:15:15.583
and jump to the docs or jump to the tests

497
00:15:15.583 --> 00:15:17.833
or even like within a function, like why

498
00:15:17.833 --> 00:15:18.750
does this change

499
00:15:18.750 --> 00:15:20.666
behavior above 64 elements?

500
00:15:21.083 --> 00:15:23.041
And you'd be able to jump to that and say

501
00:15:23.041 --> 00:15:25.125
like: ah, it's like this for this.

502
00:15:25.375 --> 00:15:27.125
In the same way that we have just that

503
00:15:27.125 --> 00:15:28.916
ability to jump back and forth, and once

504
00:15:28.916 --> 00:15:31.166
you have that metadata, the ability to

505
00:15:31.166 --> 00:15:33.916
build tools that help you with that is a

506
00:15:33.916 --> 00:15:36.875
stunningly useful piece of kit.

507
00:15:36.875 --> 00:15:39.083
Because you always know like, if I change

508
00:15:39.083 --> 00:15:39.916
something, what are the

509
00:15:39.916 --> 00:15:41.000
ripple effects of this?

510
00:15:41.458 --> 00:15:43.166
And you don't end up changing something

511
00:15:43.166 --> 00:15:45.291
six months ago and only realizing six

512
00:15:45.291 --> 00:15:46.708
months later that it changed, and you go,

513
00:15:46.708 --> 00:15:47.833
"Why are these docs out of date?"

514
00:15:48.500 --> 00:15:51.166
<v Amos Wenger>So you mentioned wikis earlier, but

515
00:15:51.166 --> 00:15:53.666
usually those have a separate revision

516
00:15:53.666 --> 00:15:56.916
control system than like-- I would think

517
00:15:56.916 --> 00:15:57.916
that with the tooling that you're

518
00:15:57.916 --> 00:15:59.500
describing, you would need to store the

519
00:15:59.500 --> 00:16:01.541
docs alongside the source code so that

520
00:16:01.541 --> 00:16:03.666
you can travel back in time six months

521
00:16:03.666 --> 00:16:05.458
and see what like things were then.

522
00:16:05.458 --> 00:16:07.708
Otherwise, you only get the picture of

523
00:16:07.708 --> 00:16:10.208
what things are now, you need to refer to

524
00:16:10.208 --> 00:16:11.791
timestamps, which gets complicated with

525
00:16:11.791 --> 00:16:13.166
DBCS and branches and whatnot.

526
00:16:13.583 --> 00:16:15.916
<v James Munns>Yeah, I think, yeah, paid tools do that.

527
00:16:15.958 --> 00:16:18.458
They have integrations with Jira for wiki

528
00:16:18.666 --> 00:16:19.791
or the integrations with

529
00:16:19.791 --> 00:16:20.916
other tools and stuff like that.

530
00:16:21.333 --> 00:16:22.458
I guess what I'm saying is in open

531
00:16:22.458 --> 00:16:23.666
source, we actually sort of have it

532
00:16:23.666 --> 00:16:24.833
easier because they

533
00:16:24.833 --> 00:16:26.250
do all travel together.

534
00:16:26.458 --> 00:16:27.875
So I do think that if you were building

535
00:16:27.875 --> 00:16:29.708
something, you'd wanna lean on that

536
00:16:29.708 --> 00:16:31.375
requirement that like: okay, we're just

537
00:16:31.375 --> 00:16:32.583
gonna say that they all travel in the

538
00:16:32.583 --> 00:16:35.166
same repo and so when branches happen,

539
00:16:35.666 --> 00:16:37.458
it's only coherent within like a single

540
00:16:37.458 --> 00:16:39.500
commit or maybe through some

541
00:16:39.500 --> 00:16:41.208
like history of that as well.

542
00:16:41.666 --> 00:16:43.291
But yeah, I think you definitely make

543
00:16:43.291 --> 00:16:45.583
your life way easier when all three of

544
00:16:45.583 --> 00:16:46.708
those travel together.

545
00:16:47.208 --> 00:16:48.666
And yeah, the other thing you can just do

546
00:16:48.666 --> 00:16:51.375
is in the same way that like on Docs.rs,

547
00:16:51.625 --> 00:16:52.625
you can say like, what

548
00:16:52.625 --> 00:16:55.166
percentage of my code is documented?

549
00:16:55.375 --> 00:16:56.833
So you can say like: on all your public

550
00:16:56.833 --> 00:16:58.875
modules or public functions and things

551
00:16:58.875 --> 00:17:02.041
like that, now on Docs.rs, you can poke

552
00:17:02.041 --> 00:17:04.000
the dropdown and it'll say like "70% of

553
00:17:04.000 --> 00:17:06.375
functions have documentation" or whatever.

554
00:17:06.708 --> 00:17:07.208
<v Amos Wenger>Wait, is that new?

555
00:17:08.208 --> 00:17:10.375
<v James Munns>In the last year or so, I think, but

556
00:17:10.375 --> 00:17:11.208
yeah, it shows you like

557
00:17:11.208 --> 00:17:12.208
documentation coverage.

558
00:17:12.708 --> 00:17:14.416
<v Amos Wenger>Oh yeah, wow, I never noticed that.

559
00:17:14.416 --> 00:17:15.458
<v James Munns>It's relatively new.

560
00:17:15.458 --> 00:17:16.458
<v Amos Wenger>Yeah, it is in the dropdown.

561
00:17:16.458 --> 00:17:16.666
<v James Munns>Yeah.

562
00:17:16.916 --> 00:17:17.333
<v Amos Wenger>Cool.

563
00:17:17.375 --> 00:17:18.458
<v James Munns>But like, what if you

564
00:17:18.458 --> 00:17:19.666
could have the same thing?

565
00:17:19.958 --> 00:17:22.000
What if it was just easy to say like: how

566
00:17:22.000 --> 00:17:24.875
much of my code has docs? Or how much of

567
00:17:24.875 --> 00:17:27.208
my docs match my code? Or

568
00:17:27.208 --> 00:17:29.458
what is my test coverage?

569
00:17:29.458 --> 00:17:30.875
Not necessarily like what is my code

570
00:17:30.875 --> 00:17:33.375
coverage, but like how many places did I

571
00:17:33.375 --> 00:17:35.125
say: hey, I'm testing this function or

572
00:17:35.125 --> 00:17:36.875
I'm testing this module or I'm testing

573
00:17:36.875 --> 00:17:39.041
the whole system or something like that.

574
00:17:39.333 --> 00:17:40.541
And you can see that linkage.

575
00:17:40.833 --> 00:17:42.625
And then kind of to complete the circle

576
00:17:42.625 --> 00:17:45.083
to say like, how many tests are backing

577
00:17:45.083 --> 00:17:46.625
up what I claim in my docs?

578
00:17:46.875 --> 00:17:48.375
How confident can someone be that like,

579
00:17:48.375 --> 00:17:50.208
if I write a big paragraph of how this

580
00:17:50.208 --> 00:17:52.375
works, that didn't change six months ago

581
00:17:52.375 --> 00:17:54.125
when I totally changed the algorithm or

582
00:17:54.125 --> 00:17:55.166
something like that.

583
00:17:55.166 --> 00:17:56.791
And this, like I mentioned, this is what

584
00:17:56.791 --> 00:17:58.041
gets reported and is required

585
00:17:58.041 --> 00:17:59.583
in safety critical projects.

586
00:17:59.583 --> 00:18:00.916
This is the traceability matrix.

587
00:18:01.541 --> 00:18:04.500
And in a really cool way, the Ferrocene

588
00:18:04.500 --> 00:18:05.875
Project publishes their

589
00:18:05.875 --> 00:18:06.833
traceability matrix.

590
00:18:06.833 --> 00:18:08.583
So you can see, hey, here's a version of

591
00:18:08.583 --> 00:18:10.541
the Rust language specification.

592
00:18:11.000 --> 00:18:12.000
And then what is the

593
00:18:12.000 --> 00:18:13.333
traceability matrix of that?

594
00:18:13.375 --> 00:18:14.708
How does that link to code?

595
00:18:14.708 --> 00:18:16.583
And how does that link to validation of

596
00:18:16.583 --> 00:18:17.625
that in the form of

597
00:18:17.625 --> 00:18:18.625
tests and things like that?

598
00:18:18.916 --> 00:18:20.583
And I think you have to pay for the real

599
00:18:20.583 --> 00:18:22.541
one that you can use when you submit to

600
00:18:22.541 --> 00:18:24.750
whatever your governing authority is.

601
00:18:25.000 --> 00:18:26.833
But just as an open source artifact, you

602
00:18:26.833 --> 00:18:28.625
can go and look at it and you can tell

603
00:18:28.625 --> 00:18:30.750
like, "Ah, they said that this unit test

604
00:18:30.750 --> 00:18:33.625
goes to verify this portion of the

605
00:18:33.625 --> 00:18:35.708
language specification," which is like a

606
00:18:35.708 --> 00:18:37.541
really validating and useful thing to

607
00:18:37.541 --> 00:18:39.833
have because you know, otherwise it's

608
00:18:39.833 --> 00:18:42.291
hard to tell when docs get stale because

609
00:18:42.291 --> 00:18:44.041
they aren't tested nearly as thoroughly

610
00:18:44.208 --> 00:18:46.541
as code is and things like that.

611
00:18:46.583 --> 00:18:48.958
<v Amos Wenger>Yes, I'm looking at one of the UI tests

612
00:18:49.208 --> 00:18:50.583
from the Ferrocene test suite.

613
00:18:50.583 --> 00:18:52.416
And it has-- they basically just use a

614
00:18:52.416 --> 00:18:53.833
bunch of normal commands.

615
00:18:53.833 --> 00:18:55.333
They're not even code comments.

616
00:18:55.333 --> 00:18:56.958
They're just a Ferrocene annotations,

617
00:18:57.208 --> 00:18:59.583
colon, and then an identifier starting

618
00:18:59.583 --> 00:19:01.708
with FLS_, and then

619
00:19:01.708 --> 00:19:03.458
some random bunch of letters.

620
00:19:03.458 --> 00:19:05.708
And those are all listed in, yeah, in the

621
00:19:05.708 --> 00:19:07.125
traceability matrix report,

622
00:19:07.125 --> 00:19:09.958
which I can see without paying.

623
00:19:10.208 --> 00:19:10.666
I don't know which

624
00:19:10.666 --> 00:19:11.708
part is paid, but yeah.

625
00:19:11.750 --> 00:19:12.875
<v James Munns>I think it's one of

626
00:19:12.875 --> 00:19:13.791
those licensing things.

627
00:19:13.791 --> 00:19:16.166
I think it's free to view, but you can't

628
00:19:16.166 --> 00:19:17.416
use it as part of your like,

629
00:19:17.500 --> 00:19:18.583
certification argument

630
00:19:18.583 --> 00:19:19.916
for those kinds of things.

631
00:19:19.916 --> 00:19:21.333
This is all stuff that I started when I

632
00:19:21.333 --> 00:19:23.125
was at Ferrous, but the actual execution

633
00:19:23.125 --> 00:19:25.250
was done entirely after I left.

634
00:19:25.250 --> 00:19:27.041
So I remember what the plans were, and I

635
00:19:27.041 --> 00:19:28.583
always have sort of a blurry time of what

636
00:19:28.583 --> 00:19:30.083
we were originally planning versus the

637
00:19:30.083 --> 00:19:32.041
folks like Jorge and Pietro and things

638
00:19:32.041 --> 00:19:32.625
like that, that actually

639
00:19:32.625 --> 00:19:34.541
executed on it after I left.

640
00:19:35.000 --> 00:19:36.208
But I give them a ton of credit because

641
00:19:36.208 --> 00:19:37.708
they did it in the way that we wanted it

642
00:19:37.708 --> 00:19:38.666
to, which was not

643
00:19:38.666 --> 00:19:40.000
intrusive to the Rust language.

644
00:19:40.750 --> 00:19:43.083
And as something that releases with the

645
00:19:43.083 --> 00:19:44.125
same cadence, using

646
00:19:44.125 --> 00:19:45.333
tooling and things like that.

647
00:19:45.333 --> 00:19:46.541
Because a lot of these like safety

648
00:19:46.541 --> 00:19:48.333
critical areas, they don't release

649
00:19:48.333 --> 00:19:50.000
quarterly, let alone

650
00:19:50.000 --> 00:19:51.375
yearly a lot of the time.

651
00:19:51.625 --> 00:19:52.916
And the fact that they're generally

652
00:19:52.916 --> 00:19:54.500
keeping up with the open source project

653
00:19:54.500 --> 00:19:56.666
while not being a bummer to them, says

654
00:19:56.666 --> 00:19:58.416
that these kinds of tools don't have to

655
00:19:58.416 --> 00:20:01.041
be very intrusive and painful over an

656
00:20:01.041 --> 00:20:02.208
expected like quality

657
00:20:02.208 --> 00:20:03.708
open source workflow.

658
00:20:03.708 --> 00:20:05.208
Like if you're just like shoving commits

659
00:20:05.416 --> 00:20:06.916
and not writing tests or whatever, like

660
00:20:06.916 --> 00:20:08.041
this is not the first

661
00:20:08.041 --> 00:20:09.208
thing that you should be doing.

662
00:20:09.666 --> 00:20:11.041
But if you're like: I have a pretty

663
00:20:11.041 --> 00:20:13.208
stable project and I wanna make sure that

664
00:20:13.208 --> 00:20:15.166
I don't accidentally break things or

665
00:20:15.166 --> 00:20:16.250
people build a lot of

666
00:20:16.250 --> 00:20:17.291
stuff on top of this.

667
00:20:17.291 --> 00:20:18.708
So like right now I'm sitting down and

668
00:20:18.708 --> 00:20:20.541
writing a new revision of a specification

669
00:20:20.958 --> 00:20:23.166
for Postcard the serialization format,

670
00:20:23.666 --> 00:20:25.708
some internal pieces that are used in

671
00:20:25.708 --> 00:20:27.250
different parts, and then

672
00:20:27.250 --> 00:20:28.666
Postcard-RPC the protocol.

673
00:20:29.166 --> 00:20:30.500
And this is really where this itch comes

674
00:20:30.500 --> 00:20:32.416
from, is I wish I had a way to say like:

675
00:20:32.541 --> 00:20:34.291
okay, I'm writing a human text version of

676
00:20:34.291 --> 00:20:35.416
how this encoding format

677
00:20:35.416 --> 00:20:36.708
and this protocol works.

678
00:20:37.125 --> 00:20:38.750
And instead of just like, "Go read the RFC

679
00:20:39.083 --> 00:20:40.416
and maybe there's some code comments that

680
00:20:40.416 --> 00:20:43.125
tell you why this test exists," I wish I

681
00:20:43.125 --> 00:20:45.125
had an ability to say like, "Okay, there

682
00:20:45.125 --> 00:20:47.333
are 2000 lines in this protocol

683
00:20:47.333 --> 00:20:49.416
definition," and every single one of those

684
00:20:49.416 --> 00:20:51.916
lines, you can jump to a chunk of code or

685
00:20:51.916 --> 00:20:53.541
a test or the same way if you're digging

686
00:20:53.541 --> 00:20:54.958
through the code, why is

687
00:20:54.958 --> 00:20:56.333
this hashing like this?

688
00:20:56.625 --> 00:20:58.416
You can jump to the spec and it will

689
00:20:58.416 --> 00:21:00.500
explain exactly why it's like that.

690
00:21:00.500 --> 00:21:01.958
Because that's one of those things that

691
00:21:01.958 --> 00:21:03.583
like-- yeah, I don't know, it's totally

692
00:21:03.583 --> 00:21:04.958
valuable, especially when you're like

693
00:21:04.958 --> 00:21:06.500
refining things and making sure they're

694
00:21:06.500 --> 00:21:07.875
all still correct, that you

695
00:21:07.875 --> 00:21:09.291
didn't leave any loose edges.

696
00:21:09.666 --> 00:21:11.708
So that's where that itch comes from now,

697
00:21:11.708 --> 00:21:14.125
is I'm writing a lot of documentation and

698
00:21:14.125 --> 00:21:15.916
I don't have a better way than just

699
00:21:15.916 --> 00:21:17.208
putting on line numbers on my

700
00:21:17.208 --> 00:21:19.541
documentation and in my code saying, "This

701
00:21:19.541 --> 00:21:24.083
is version 1.1 line 247, this paragraph,"

702
00:21:24.416 --> 00:21:25.125
you know what I mean?

703
00:21:25.375 --> 00:21:26.375
And that stuff goes stale

704
00:21:26.375 --> 00:21:28.500
immediately and is painful.

705
00:21:28.916 --> 00:21:30.125
So it requires a lot of care

706
00:21:30.125 --> 00:21:31.750
and tools can help with that.

707
00:21:31.875 --> 00:21:33.750
<v Amos Wenger>How is that we don't already have some

708
00:21:33.750 --> 00:21:35.125
open source tooling for that?

709
00:21:35.375 --> 00:21:36.833
We have open source tooling for

710
00:21:36.833 --> 00:21:39.208
everything, even if it's crap, we usually

711
00:21:39.208 --> 00:21:40.541
have some version of it.

712
00:21:40.708 --> 00:21:42.166
Like, yeah, someone came from the

713
00:21:42.166 --> 00:21:43.416
industry and they were like, "Oh, I wish I

714
00:21:43.416 --> 00:21:45.500
could do the same for my..." why, like... are

715
00:21:45.500 --> 00:21:46.083
you really the first

716
00:21:46.083 --> 00:21:47.666
person to ask for it in 2025?

717
00:21:48.291 --> 00:21:49.625
<v James Munns>I don't know! I wrote

718
00:21:49.625 --> 00:21:51.166
up... I'd have to go find it.

719
00:21:51.166 --> 00:21:53.500
I wrote up a pitch of if I were to do it,

720
00:21:53.500 --> 00:21:55.708
this is how I would do it in the Rust

721
00:21:55.708 --> 00:21:57.083
ecosystem a couple of years back.

722
00:21:57.083 --> 00:21:58.291
And a couple of people were like: yeah. I

723
00:21:58.291 --> 00:22:00.375
think it's a mix of one, it's seen as

724
00:22:00.375 --> 00:22:02.833
like a vegetable of the process.

725
00:22:03.125 --> 00:22:04.250
Like it's something you do because it's

726
00:22:04.250 --> 00:22:05.958
good for you, not because you enjoy it.

727
00:22:06.208 --> 00:22:06.833
It's like eating your

728
00:22:06.833 --> 00:22:08.041
vegetables is how I should say it.

729
00:22:08.041 --> 00:22:09.000
<v Amos Wenger>Yeah, that's a great expression.

730
00:22:09.250 --> 00:22:10.916
<v James Munns>And so like a lot of people, especially

731
00:22:10.916 --> 00:22:12.458
people... I don't know, this is true with

732
00:22:12.458 --> 00:22:14.541
any like process where people go with the

733
00:22:14.541 --> 00:22:16.250
motions without understanding the why.

734
00:22:16.541 --> 00:22:18.166
I think there's a lot of people who hate

735
00:22:18.166 --> 00:22:19.875
doing traceability because it's just a

736
00:22:19.875 --> 00:22:21.166
box they check and they

737
00:22:21.166 --> 00:22:22.416
don't get any value from it.

738
00:22:22.416 --> 00:22:24.208
But if you do it well, you

739
00:22:24.208 --> 00:22:25.500
do it because it helps you.

740
00:22:25.500 --> 00:22:27.000
And it actually, I miss not

741
00:22:27.000 --> 00:22:28.458
having the ability to do it.

742
00:22:28.541 --> 00:22:29.833
<v Amos Wenger>And I would think if any language

743
00:22:29.833 --> 00:22:31.916
community is receptive to this, it would

744
00:22:31.916 --> 00:22:34.083
be Rust who's already like subjecting

745
00:22:34.083 --> 00:22:35.083
themselves to lifetime

746
00:22:35.083 --> 00:22:36.041
annotations and whatnot.

747
00:22:36.416 --> 00:22:37.500
<v James Munns>Yeah, I think it's one of those things

748
00:22:37.500 --> 00:22:39.375
it's just the population of people who

749
00:22:39.375 --> 00:22:41.750
have seen it done and seen it done well,

750
00:22:42.208 --> 00:22:44.083
and are interested in taking the time to

751
00:22:44.083 --> 00:22:46.416
build the annotation and tooling in a way

752
00:22:46.416 --> 00:22:48.458
that is pleasing-- or really not even

753
00:22:48.458 --> 00:22:50.375
necessarily pleasing, but not disruptive

754
00:22:50.375 --> 00:22:52.458
to the development process where it

755
00:22:52.458 --> 00:22:54.625
doesn't feel like eating your vegetables.

756
00:22:55.291 --> 00:22:57.708
That's a very narrow set, which is I

757
00:22:57.708 --> 00:22:58.666
think a lot of that

758
00:22:58.666 --> 00:22:59.958
stuff becomes paid dev tools.

759
00:22:59.958 --> 00:23:01.458
All that stuff where like you either have

760
00:23:01.458 --> 00:23:03.750
to have it or only the people that really

761
00:23:03.750 --> 00:23:05.166
have seen enough shit that

762
00:23:05.166 --> 00:23:06.291
they know that they need that.

763
00:23:06.625 --> 00:23:08.166
A lot of that stuff becomes paid dev

764
00:23:08.166 --> 00:23:08.833
tools because the

765
00:23:08.833 --> 00:23:10.250
upkeep of it takes effort.

766
00:23:10.541 --> 00:23:12.708
And especially if you weren't in Rust, a

767
00:23:12.708 --> 00:23:15.666
community that has docs and tests and

768
00:23:15.666 --> 00:23:18.833
code in the same repo and has a care for

769
00:23:18.833 --> 00:23:21.791
validation and correctness... like you're

770
00:23:21.791 --> 00:23:24.208
saying, I think Rust is the first maybe

771
00:23:24.208 --> 00:23:26.416
large scale community of

772
00:23:26.416 --> 00:23:27.833
people who are likely adopt that.

773
00:23:28.208 --> 00:23:29.625
And I think there's just not enough

774
00:23:29.625 --> 00:23:31.416
overlap with the safety critical domain.

775
00:23:31.833 --> 00:23:33.250
And even in that population, there's a

776
00:23:33.250 --> 00:23:35.708
lot of people who like don't get why you

777
00:23:35.708 --> 00:23:37.166
would want to do it or haven't had a good

778
00:23:37.166 --> 00:23:38.750
experience doing it because they were

779
00:23:38.750 --> 00:23:39.833
just forced to do it.

780
00:23:40.083 --> 00:23:41.250
That I think they're just, the Venn

781
00:23:41.250 --> 00:23:44.291
diagram has a very narrow sliver in it.

782
00:23:44.291 --> 00:23:45.958
<v Amos Wenger>Yeah, now that I think about it, even

783
00:23:45.958 --> 00:23:48.250
though the Rust people might be receptive

784
00:23:48.250 --> 00:23:50.708
to it, the others needed so much more, I

785
00:23:50.708 --> 00:23:52.791
think, because they don't have those like

786
00:23:52.791 --> 00:23:53.625
the safety provided

787
00:23:53.625 --> 00:23:54.541
by the language itself.

788
00:23:54.541 --> 00:23:56.000
So they need the whole test of

789
00:23:56.000 --> 00:23:58.666
specification code trial much more.

790
00:23:59.416 --> 00:24:00.791
<v James Munns>Because there's only so much, so many

791
00:24:00.791 --> 00:24:02.541
invariants you can put into code.

792
00:24:02.791 --> 00:24:04.083
Like that is a thing that Rust tries to

793
00:24:04.083 --> 00:24:05.541
do is you try and make your invariants

794
00:24:05.541 --> 00:24:07.083
encode so the compiler

795
00:24:07.083 --> 00:24:08.208
can help you enforce them.

796
00:24:08.208 --> 00:24:09.541
But there's some stuff that's just not

797
00:24:09.541 --> 00:24:11.750
reasonable to encode or

798
00:24:11.750 --> 00:24:13.666
not efficient to encode or--

799
00:24:13.750 --> 00:24:14.166
<v Amos Wenger>I mean, you have

800
00:24:14.166 --> 00:24:15.500
unsafe interfaces as well.

801
00:24:15.500 --> 00:24:16.791
You have to deal with the real

802
00:24:16.791 --> 00:24:19.083
physicality of the world at some point.

803
00:24:19.125 --> 00:24:20.708
<v James Munns>Or some like generics and type states

804
00:24:20.833 --> 00:24:21.958
sometimes just make the code

805
00:24:21.958 --> 00:24:24.166
so egregious to actually use.

806
00:24:24.541 --> 00:24:25.916
So like the actual enforcing

807
00:24:25.916 --> 00:24:28.375
makes it so unpleasant to use.

808
00:24:28.750 --> 00:24:31.041
It becomes awful, you know what I mean?

809
00:24:31.041 --> 00:24:32.208
So there's a balance for sure.

810
00:24:32.708 --> 00:24:34.333
<v Amos Wenger>I keep thinking of my question like, "Why

811
00:24:34.333 --> 00:24:36.208
isn't this already done and great and

812
00:24:36.208 --> 00:24:36.958
available for everyone?"

813
00:24:37.166 --> 00:24:39.708
It's because it's the docs of the docs.

814
00:24:39.708 --> 00:24:42.791
Like there's already-- the docs tooling is

815
00:24:42.791 --> 00:24:44.416
already overlooked

816
00:24:44.416 --> 00:24:45.791
compared to everything else.

817
00:24:45.791 --> 00:24:47.000
Like if you look at the number of

818
00:24:47.000 --> 00:24:49.583
contributors to Rust core projects, I

819
00:24:49.583 --> 00:24:51.041
think it goes first rustc,

820
00:24:51.416 --> 00:24:53.333
then Cargo, then rustdoc.

821
00:24:53.708 --> 00:24:54.833
So if we were to make something like

822
00:24:54.833 --> 00:24:56.708
that, there would be like 0.5 of a person

823
00:24:56.708 --> 00:24:58.208
working on it because--

824
00:24:58.208 --> 00:24:59.958
<v James Munns>It's the vegetables of the vegetables really.

825
00:25:00.291 --> 00:25:00.833
You know what I mean?

826
00:25:01.083 --> 00:25:03.166
Like it's not just making sure that

827
00:25:03.166 --> 00:25:05.000
you're testing and documenting, it's

828
00:25:05.000 --> 00:25:06.333
making sure that you're testing and

829
00:25:06.333 --> 00:25:07.958
documenting correctly.

830
00:25:08.708 --> 00:25:10.625
So I mean, yeah, like I said, it's one of

831
00:25:10.625 --> 00:25:11.708
those things that I think if there was a

832
00:25:11.708 --> 00:25:13.458
good tool for it where people could just

833
00:25:13.458 --> 00:25:15.666
add it as a step and it's something that

834
00:25:15.666 --> 00:25:17.583
you could do incrementally... You do have

835
00:25:17.583 --> 00:25:18.458
to hit some threshold.

836
00:25:18.458 --> 00:25:19.833
Like you said, the value of it comes from

837
00:25:19.833 --> 00:25:21.000
how good your annotations are.

838
00:25:21.416 --> 00:25:23.166
So you do have to get some care to it.

839
00:25:23.375 --> 00:25:25.208
And I think there's some design to be had

840
00:25:25.291 --> 00:25:27.541
of how do you litter a document with all

841
00:25:27.541 --> 00:25:28.416
of these annotations

842
00:25:28.625 --> 00:25:30.458
without making the document worse.

843
00:25:31.250 --> 00:25:32.708
And that's how these tools like DOORS and

844
00:25:32.708 --> 00:25:34.208
stuff, like it's built into the editor

845
00:25:34.500 --> 00:25:35.541
where you have one column with your

846
00:25:35.541 --> 00:25:37.041
requirement numbers and then with your

847
00:25:37.041 --> 00:25:37.750
actual requirements.

848
00:25:37.750 --> 00:25:39.625
So like it's intuitive, but how do you do

849
00:25:39.625 --> 00:25:42.208
that in a given markdown file or in a

850
00:25:42.208 --> 00:25:43.750
given Typst file or

851
00:25:43.750 --> 00:25:45.291
restructured text or whatever?

852
00:25:45.541 --> 00:25:47.041
And I think that's what like Sphinx is

853
00:25:47.041 --> 00:25:49.500
doing, but that's a population that is

854
00:25:49.500 --> 00:25:51.750
motivated to deal with those annotations

855
00:25:51.875 --> 00:25:53.125
because it's an entry

856
00:25:53.125 --> 00:25:54.208
criteria for existing.

857
00:25:54.541 --> 00:25:55.750
<v Amos Wenger>I think it could happen though.

858
00:25:55.750 --> 00:25:57.916
Cause the whole memory safety thing was

859
00:25:57.916 --> 00:25:59.791
like a fringe thing.

860
00:26:00.000 --> 00:26:02.750
I think a decade ago, like a bunch of

861
00:26:02.750 --> 00:26:05.708
people did it cause they saw the value

862
00:26:05.708 --> 00:26:07.083
before everyone else.

863
00:26:07.083 --> 00:26:08.708
And now the government says,

864
00:26:08.708 --> 00:26:10.125
"You have to do it that way."

865
00:26:10.125 --> 00:26:11.625
So there's been a hell of

866
00:26:11.625 --> 00:26:13.708
an adoption curve for that.

867
00:26:13.708 --> 00:26:15.416
So I could totally see something else

868
00:26:15.416 --> 00:26:16.708
like that taking off.

869
00:26:16.708 --> 00:26:17.583
We need it.

870
00:26:17.583 --> 00:26:19.333
Cause the documentation situation for

871
00:26:19.333 --> 00:26:20.458
most projects is dire.

872
00:26:20.458 --> 00:26:22.208
And I'm the first guilty party here.

873
00:26:22.416 --> 00:26:23.208
Don't look at my stuff.

874
00:26:23.291 --> 00:26:25.416
<v James Munns>I think it just becomes once there's a

875
00:26:25.416 --> 00:26:27.500
good tool and it's desirable.

876
00:26:27.833 --> 00:26:28.708
Well, first people need

877
00:26:28.708 --> 00:26:29.875
to know to ask for it.

878
00:26:29.875 --> 00:26:31.291
So maybe that's what this is, is me

879
00:26:31.291 --> 00:26:32.416
telling people that like:

880
00:26:32.416 --> 00:26:33.166
<v Amos Wenger>Thank you James.

881
00:26:33.458 --> 00:26:35.541
<v James Munns>Hey, there's established art on how to

882
00:26:35.541 --> 00:26:37.000
make sure your docs and your code and

883
00:26:37.000 --> 00:26:38.625
your tests are all coherent with each

884
00:26:38.625 --> 00:26:40.916
other and you can use tools to help you

885
00:26:40.916 --> 00:26:41.583
make sure it's right

886
00:26:41.583 --> 00:26:42.750
instead of just 'get good.'

887
00:26:43.000 --> 00:26:44.833
So like that's sort of step one of

888
00:26:44.833 --> 00:26:46.708
knowing that there is like established

889
00:26:46.708 --> 00:26:48.833
art and we could go and look at those

890
00:26:48.833 --> 00:26:51.083
areas for ideas, but also because we're

891
00:26:51.083 --> 00:26:53.125
not tied to safety critical tooling, you

892
00:26:53.125 --> 00:26:55.708
can really focus on the UX or like, hey,

893
00:26:55.708 --> 00:26:57.083
we only support things where your docs

894
00:26:57.083 --> 00:26:58.458
and your code and your tests are in

895
00:26:58.458 --> 00:27:01.208
GitHub repos and you're willing to

896
00:27:01.208 --> 00:27:03.208
install a cargo extension or some binary

897
00:27:03.208 --> 00:27:04.666
tool that will check it for you.

898
00:27:04.666 --> 00:27:06.666
And you probably already have CI on your

899
00:27:06.666 --> 00:27:09.416
repo so you can run trace check and make

900
00:27:09.416 --> 00:27:11.250
sure that it's still good and you know,

901
00:27:11.541 --> 00:27:12.708
make sure you at least never move

902
00:27:12.708 --> 00:27:14.083
backwards and stuff like that.

903
00:27:14.083 --> 00:27:15.583
So this is my call to action.

904
00:27:15.583 --> 00:27:16.416
If that sounds appealing

905
00:27:16.416 --> 00:27:17.875
to anyone, let me know.

906
00:27:17.875 --> 00:27:18.666
Cause I have some ideas

907
00:27:18.666 --> 00:27:19.625
of how I'd want to do it.

908
00:27:19.625 --> 00:27:20.541
I might end up building it

909
00:27:20.541 --> 00:27:22.083
for some of my Postcard stuff.

910
00:27:22.375 --> 00:27:22.750
<v Amos Wenger>Please do.

911
00:27:22.791 --> 00:27:24.416
<v James Munns>Just because I want it to be right.

912
00:27:24.458 --> 00:27:25.291
<v Amos Wenger>I have one note.

913
00:27:25.791 --> 00:27:28.375
I know it's called traceability in... for

914
00:27:28.375 --> 00:27:30.458
real, but don't call it that. Because the

915
00:27:30.458 --> 00:27:32.333
word is already so overloaded.

916
00:27:32.333 --> 00:27:32.791
<v James Munns>It's true.

917
00:27:32.791 --> 00:27:33.166
All right.

918
00:27:33.166 --> 00:27:34.458
I need some pitches for names.

919
00:27:34.583 --> 00:27:35.458
<v Amos Wenger>Because people think

920
00:27:35.458 --> 00:27:37.125
tracing is logging when it's not.

921
00:27:37.333 --> 00:27:38.541
So people are going to think traceability

922
00:27:38.541 --> 00:27:39.958
is tracing, even though it's not.

923
00:27:40.333 --> 00:27:42.208
So you need to make up a new word.

924
00:27:42.208 --> 00:27:42.708
I don't know.

925
00:27:42.750 --> 00:27:42.958
<v James Munns>Yeah.

926
00:27:42.958 --> 00:27:43.250
All right.

927
00:27:43.458 --> 00:27:44.625
I guess then email me

928
00:27:44.625 --> 00:27:45.916
if you have a--

929
00:27:46.291 --> 00:27:48.333
Go to sdr-podcast.com/

930
00:27:48.333 --> 00:27:50.000
...contact? Is contact--

931
00:27:50.000 --> 00:27:51.041
We always say the episodes page.

932
00:27:51.250 --> 00:27:53.000
I don't know sdr-podcast.com.

933
00:27:53.000 --> 00:27:54.291
There's a contact button on there.

934
00:27:54.291 --> 00:27:54.958
Send us an email.

935
00:27:54.958 --> 00:27:56.125
<v Amos Wenger>We have an about page...?!

936
00:27:56.125 --> 00:27:57.125
<v James Munns>Maybe it's on the about page.

937
00:27:57.416 --> 00:27:57.625
<v Amos Wenger>Yeah.

938
00:27:57.750 --> 00:28:00.625
alt contact goes to the clip from the

939
00:28:00.625 --> 00:28:01.750
guy with the red hair.

940
00:28:02.458 --> 00:28:04.583
My brain is completely drawing a blank.

941
00:28:04.625 --> 00:28:05.166
<v James Munns>Carrot Top?

942
00:28:05.333 --> 00:28:05.750
<v Amos Wenger>Rick roll.

943
00:28:06.125 --> 00:28:06.541
Rick roll.

944
00:28:06.875 --> 00:28:07.500
<v James Munns>Oh, okay.

945
00:28:07.500 --> 00:28:08.083
Rick Astley.

946
00:28:08.333 --> 00:28:09.041
<v Amos Wenger>Rick Astley.

947
00:28:09.500 --> 00:28:11.000
Please cut all of the-- please cut the

948
00:28:11.000 --> 00:28:11.708
entire-- please cut me

949
00:28:11.708 --> 00:28:12.916
entirely out of this episode.

950
00:28:13.208 --> 00:28:15.125
I'm good Lord.

951
00:28:15.666 --> 00:28:15.875
<v James Munns>Okay.

952
00:28:16.125 --> 00:28:17.041
So yeah, let me know.

953
00:28:17.291 --> 00:28:18.458
Cause I want it to be a thing.

954
00:28:18.458 --> 00:28:19.958
If I write it, I at least love for some

955
00:28:19.958 --> 00:28:21.041
other people to help or

956
00:28:21.041 --> 00:28:22.208
some other people to use it.

957
00:28:22.458 --> 00:28:24.000
Cause otherwise people are just going to

958
00:28:24.000 --> 00:28:25.958
look at my repos weird, but hit me up!

959
00:28:25.958 --> 00:28:26.750
I'm excited for it.

960
00:28:26.750 --> 00:28:27.666
And I wish this was a thing.

961
00:28:28.000 --> 00:28:28.708
<v Amos Wenger>I would try it.

962
00:28:28.708 --> 00:28:29.333
<v James Munns>Hell yeah.

963
00:28:29.333 --> 00:28:30.041
<v Amos Wenger>I think it's interesting.

964
00:28:39.416 --> 00:28:40.916
This episode is sponsored by Depot:

965
00:28:40.916 --> 00:28:42.208
the build acceleration platform

966
00:28:42.208 --> 00:28:43.083
that's on a mission to

967
00:28:43.083 --> 00:28:44.666
make all builds near instant.

968
00:28:44.916 --> 00:28:46.125
If you're tired of watching your builds

969
00:28:46.125 --> 00:28:47.041
and GitHub actions crawl

970
00:28:47.041 --> 00:28:47.750
like the modern day

971
00:28:47.750 --> 00:28:48.916
equivalent of paint drying,

972
00:28:49.250 --> 00:28:50.125
give Depot's GitHub

973
00:28:50.125 --> 00:28:51.291
Actions runners a try.

974
00:28:51.666 --> 00:28:52.833
They're up to 10X faster

975
00:28:52.833 --> 00:28:54.166
with unlimited concurrency,

976
00:28:54.166 --> 00:28:55.583
faster caching, support for

977
00:28:55.583 --> 00:28:56.958
Linux, macOS, and Windows,

978
00:28:56.958 --> 00:28:57.833
and they plug right into

979
00:28:57.833 --> 00:28:58.750
other Depot optimizations

980
00:28:59.041 --> 00:29:00.625
like accelerated container image builds

981
00:29:00.625 --> 00:29:02.041
and remote caching for Bazel,

982
00:29:02.333 --> 00:29:04.125
Turborepo, Gradle, and more.

983
00:29:04.500 --> 00:29:05.458
Depot was built by developers

984
00:29:05.458 --> 00:29:06.625
who were tired of wasting time

985
00:29:06.625 --> 00:29:07.916
waiting on builds instead of shipping.

986
00:29:08.208 --> 00:29:09.041
It's made for teams

987
00:29:09.041 --> 00:29:09.958
that wanna move faster

988
00:29:09.958 --> 00:29:10.958
and stay focused on

989
00:29:10.958 --> 00:29:12.000
what actually matters.

990
00:29:12.291 --> 00:29:13.625
That's why companies like PostHog

991
00:29:13.625 --> 00:29:14.625
use Depot to cut build

992
00:29:14.625 --> 00:29:15.958
times from over three hours

993
00:29:15.958 --> 00:29:17.166
to just three minutes,

994
00:29:17.166 --> 00:29:18.125
saving tens of thousands

995
00:29:18.125 --> 00:29:19.375
of build hours every week.

996
00:29:19.666 --> 00:29:20.625
Start your free 7

997
00:29:20.625 --> 00:29:21.750
day trial at depot.dev

998
00:29:21.750 --> 00:29:22.833
and let them know we sent you.
