WEBVTT

1
00:00:05.599 --> 00:00:08.759
<v Speaker 1>Hey, everybody, and welcome to another episode of the Ruby

2
00:00:08.839 --> 00:00:09.640
<v Speaker 1>Rops podcast.

3
00:00:09.839 --> 00:00:12.640
<v Speaker 2>This week, on our panel we have John Eperson.

4
00:00:12.839 --> 00:00:15.839
<v Speaker 3>Hello, everybody up stutters Hey.

5
00:00:16.000 --> 00:00:19.519
<v Speaker 1>I'm Charles Maxwood from devchat dot TV working on stuff

6
00:00:19.519 --> 00:00:21.399
<v Speaker 1>over at Most Valuable dot dev.

7
00:00:21.440 --> 00:00:23.719
<v Speaker 2>So go check that out. We have a special guest

8
00:00:23.760 --> 00:00:28.199
<v Speaker 2>this week, and that is Chelsea Troy. Chelsea, how's it going.

9
00:00:28.480 --> 00:00:30.440
<v Speaker 4>Hey, it's going well. How about you?

10
00:00:30.719 --> 00:00:32.880
<v Speaker 3>We're doing great. You want to introduce yourself real quick?

11
00:00:33.359 --> 00:00:36.399
<v Speaker 4>Sure? Yeah, my name is Chelsea Troy. I am a

12
00:00:36.439 --> 00:00:40.520
<v Speaker 4>software engineer. By day. I work on a couple of

13
00:00:40.520 --> 00:00:43.880
<v Speaker 4>different projects that focus on projects that are saving the

14
00:00:43.920 --> 00:00:48.960
<v Speaker 4>planet or advancing basic scientific research, or providing resources to

15
00:00:49.359 --> 00:00:53.520
<v Speaker 4>underserved communities. And then in the evenings, I teach a

16
00:00:53.520 --> 00:00:57.079
<v Speaker 4>class called Mobile Software Development at the University of Chicago

17
00:00:57.159 --> 00:01:01.359
<v Speaker 4>in their master's programming Computer Science, and or, I don't know,

18
00:01:01.479 --> 00:01:03.920
<v Speaker 4>organize a couple of conferences here in Chicago when we're

19
00:01:04.079 --> 00:01:08.280
<v Speaker 4>allowed to have conferences, which is, you know, not not

20
00:01:08.519 --> 00:01:10.879
<v Speaker 4>right now. So I spend a lot of time lately

21
00:01:11.280 --> 00:01:13.840
<v Speaker 4>taking walks and going on bike rides because we only

22
00:01:13.879 --> 00:01:16.959
<v Speaker 4>get one hundred nice days in the city of Chicago.

23
00:01:17.200 --> 00:01:19.599
<v Speaker 1>So nice have you had a heat wave out there

24
00:01:19.680 --> 00:01:20.640
<v Speaker 1>like we've had out here.

25
00:01:21.159 --> 00:01:24.959
<v Speaker 4>So it's funny you ask. Last week was relatively warm,

26
00:01:25.000 --> 00:01:27.879
<v Speaker 4>but this week it has been it's not going to

27
00:01:27.879 --> 00:01:30.120
<v Speaker 4>get back to seventy degrees until the weekend. It's been

28
00:01:30.120 --> 00:01:33.480
<v Speaker 4>in the sixties, which is really nice for being outside,

29
00:01:33.560 --> 00:01:35.439
<v Speaker 4>with the exception of the fact that it's been raining

30
00:01:35.480 --> 00:01:38.079
<v Speaker 4>cats and dogs for a lot of that. And so

31
00:01:39.120 --> 00:01:43.879
<v Speaker 4>I mean people, the people enjoy the temperate weather so

32
00:01:43.959 --> 00:01:45.799
<v Speaker 4>much that they just go out in it any way

33
00:01:45.799 --> 00:01:49.519
<v Speaker 4>with their umbrellas and raincoats. But I like a cloudy

34
00:01:49.599 --> 00:01:53.359
<v Speaker 4>day without the rain when I can get it nice. Yeah.

35
00:01:53.400 --> 00:01:57.560
<v Speaker 1>Well, the topic that I have on our on our

36
00:01:57.599 --> 00:02:02.120
<v Speaker 1>calendar is practical debugg and it looks like you've given

37
00:02:02.159 --> 00:02:04.959
<v Speaker 1>some talks on this. I found a blog post about

38
00:02:04.959 --> 00:02:08.560
<v Speaker 1>it on chelseatroy dot com. I'm a little curious as

39
00:02:08.599 --> 00:02:13.759
<v Speaker 1>we get going, what is your approach to debugging, because

40
00:02:14.240 --> 00:02:15.919
<v Speaker 1>it seems like a lot of people just kind of

41
00:02:16.000 --> 00:02:18.840
<v Speaker 1>go and tweak the code until it works.

42
00:02:19.479 --> 00:02:19.719
<v Speaker 5>Well.

43
00:02:20.759 --> 00:02:25.759
<v Speaker 4>Yeah, so I guess the way that debug really does

44
00:02:25.800 --> 00:02:29.159
<v Speaker 4>depend on the situation. But one of the things that

45
00:02:29.240 --> 00:02:31.199
<v Speaker 4>I have noticed in the way that we teach people

46
00:02:31.199 --> 00:02:35.039
<v Speaker 4>to program is that we leave out certain skills when

47
00:02:35.240 --> 00:02:38.199
<v Speaker 4>we are educating folks, and that is in part by

48
00:02:38.240 --> 00:02:40.800
<v Speaker 4>danta of the resources that we make available and in

49
00:02:40.840 --> 00:02:43.199
<v Speaker 4>part by dint of what we think of as programming

50
00:02:43.680 --> 00:02:46.560
<v Speaker 4>as opposed to what I find that it really is,

51
00:02:46.560 --> 00:02:49.319
<v Speaker 4>at least in my case. So the vast majority of

52
00:02:49.319 --> 00:02:51.960
<v Speaker 4>the tutorials online and even the majority of the courses

53
00:02:51.960 --> 00:02:55.560
<v Speaker 4>that you'll see undergraduate graduate institutions, Udacity, you name it,

54
00:02:55.919 --> 00:02:57.840
<v Speaker 4>they're focused on teaching people how to do things. And

55
00:02:57.879 --> 00:03:00.360
<v Speaker 4>the vast majority of the tutorials that are available are

56
00:03:01.000 --> 00:03:04.120
<v Speaker 4>developer has already practiced how to do this several times,

57
00:03:04.159 --> 00:03:06.800
<v Speaker 4>so they get it right on the tutorial, and then

58
00:03:06.840 --> 00:03:09.400
<v Speaker 4>they go through the tutorial getting it right. They don't

59
00:03:09.479 --> 00:03:11.400
<v Speaker 4>run into issues, or they don't run into a lot

60
00:03:11.479 --> 00:03:13.599
<v Speaker 4>of issues. They certainly don't run into the number of

61
00:03:13.639 --> 00:03:17.240
<v Speaker 4>issues that you would actually run into implementing something for

62
00:03:17.280 --> 00:03:19.520
<v Speaker 4>the first time. And that's for a number of reasons.

63
00:03:19.520 --> 00:03:22.080
<v Speaker 4>They want the tutorial to focus on how to do something.

64
00:03:22.520 --> 00:03:26.240
<v Speaker 4>They want the tutorial to be a relatively smooth experience

65
00:03:26.319 --> 00:03:29.280
<v Speaker 4>for people, which is good and it absolutely has its place.

66
00:03:30.120 --> 00:03:32.400
<v Speaker 4>One of the things that I think that we undervalue

67
00:03:32.960 --> 00:03:38.280
<v Speaker 4>in our programming education is all of the skills around

68
00:03:38.360 --> 00:03:40.439
<v Speaker 4>that that we end up picking up over time. So

69
00:03:40.680 --> 00:03:45.280
<v Speaker 4>relatively experienced developer might have an easier time debugging than

70
00:03:45.319 --> 00:03:48.199
<v Speaker 4>a relatively new one. But right now, the way that

71
00:03:48.240 --> 00:03:51.199
<v Speaker 4>we have it set up, the vast majority of people's

72
00:03:51.199 --> 00:03:55.520
<v Speaker 4>intuition and skill around debugging has to come from essentially

73
00:03:55.560 --> 00:03:59.680
<v Speaker 4>inductive reasoning from all of the situations that they personally

74
00:04:00.120 --> 00:04:02.919
<v Speaker 4>have encountered in their career. Because we don't have a

75
00:04:02.960 --> 00:04:06.159
<v Speaker 4>pedagogy around debugging, We don't have a praxis around debugging.

76
00:04:06.400 --> 00:04:08.400
<v Speaker 4>We just sort of like figure it out from all

77
00:04:08.400 --> 00:04:12.199
<v Speaker 4>of our individual experiences. Now, for that same reason, we

78
00:04:12.280 --> 00:04:15.759
<v Speaker 4>don't see particularly good translation between debugging on one stack

79
00:04:15.800 --> 00:04:19.360
<v Speaker 4>and debugging on another stack. Take an extremely experienced Rubius

80
00:04:19.560 --> 00:04:23.439
<v Speaker 4>or extremely experienced Rails developer and they'll be absolutely excellent

81
00:04:23.560 --> 00:04:26.360
<v Speaker 4>debugging in Rails. Put them on a mobile stack and

82
00:04:26.399 --> 00:04:27.920
<v Speaker 4>they're going to have a lot more trouble than you

83
00:04:27.920 --> 00:04:29.959
<v Speaker 4>would expect based on the amount of experience that they

84
00:04:29.959 --> 00:04:34.199
<v Speaker 4>have in Rails, because there isn't a generalized practice for debugging,

85
00:04:34.279 --> 00:04:37.920
<v Speaker 4>and so a lot of people's quote unquote debugging skill

86
00:04:38.160 --> 00:04:42.000
<v Speaker 4>comes from I have seen literally this exact bug before,

87
00:04:42.319 --> 00:04:45.720
<v Speaker 4>as opposed to I have seen bugs like this before,

88
00:04:45.839 --> 00:04:48.079
<v Speaker 4>and I know what might be causing it, or I

89
00:04:48.120 --> 00:04:50.680
<v Speaker 4>have some intuition about how to narrow down what might

90
00:04:50.680 --> 00:04:53.079
<v Speaker 4>be causing it, and so we end up with these

91
00:04:53.759 --> 00:05:01.160
<v Speaker 4>extremely specific, extremely personal, experienced based debug ugging strategies like

92
00:05:01.199 --> 00:05:03.279
<v Speaker 4>you're talking about, where people just kind of mess around

93
00:05:03.319 --> 00:05:05.879
<v Speaker 4>with things until it works, and the more experienced they

94
00:05:05.879 --> 00:05:08.399
<v Speaker 4>have with a particular stack, the more they'll be able

95
00:05:08.399 --> 00:05:10.560
<v Speaker 4>to hone in on what to mess around with. But

96
00:05:10.560 --> 00:05:12.759
<v Speaker 4>then when they switch stacks, they lose a lot of that.

97
00:05:12.839 --> 00:05:14.199
<v Speaker 4>And I think that a lot of that can be

98
00:05:14.319 --> 00:05:19.160
<v Speaker 4>solved by taking a more deliberate approach to the way

99
00:05:19.160 --> 00:05:22.360
<v Speaker 4>that we debug and the way that we teach debugging,

100
00:05:22.519 --> 00:05:26.079
<v Speaker 4>because the vast majority of the time that we spend

101
00:05:26.079 --> 00:05:30.560
<v Speaker 4>as programmers isn't usually on cranking through solutions where we

102
00:05:30.639 --> 00:05:33.000
<v Speaker 4>already know what we're going to end up with at

103
00:05:33.000 --> 00:05:35.680
<v Speaker 4>the end, and in the situations where we are doing that,

104
00:05:35.720 --> 00:05:37.720
<v Speaker 4>where we're cranking a whole bunch of code, we know

105
00:05:37.800 --> 00:05:40.040
<v Speaker 4>exactly how it's going to work, a lot of times

106
00:05:40.040 --> 00:05:42.920
<v Speaker 4>developers think of that as rote they don't really like it.

107
00:05:43.160 --> 00:05:45.000
<v Speaker 4>What they want to do is they want to approach

108
00:05:45.079 --> 00:05:48.199
<v Speaker 4>new challenges and when we're approaching new challenges, we're spending

109
00:05:48.240 --> 00:05:51.040
<v Speaker 4>more than half of our development time looking at something

110
00:05:51.079 --> 00:05:53.079
<v Speaker 4>that's not working the way that we were expecting it

111
00:05:53.120 --> 00:05:56.680
<v Speaker 4>to work, and needing to figure out why it's not

112
00:05:56.759 --> 00:05:59.279
<v Speaker 4>working the way we expect it to work and how

113
00:05:59.360 --> 00:06:01.959
<v Speaker 4>to get it to work. And because we don't model that,

114
00:06:02.399 --> 00:06:07.040
<v Speaker 4>because we don't teach that, folks assume that a quote

115
00:06:07.120 --> 00:06:10.079
<v Speaker 4>unquote good developer spends less time doing that than they

116
00:06:10.079 --> 00:06:14.519
<v Speaker 4>actually do because we don't see it modeled anywhere, and they,

117
00:06:14.879 --> 00:06:18.240
<v Speaker 4>in addition, spend more time doing that then they might

118
00:06:18.360 --> 00:06:20.920
<v Speaker 4>need to if they had a strategy for going in

119
00:06:20.959 --> 00:06:23.720
<v Speaker 4>and debugging something in a general sense, Does that make sense?

120
00:06:24.040 --> 00:06:25.000
<v Speaker 2>Yeah, that makes sense to me.

121
00:06:25.319 --> 00:06:28.040
<v Speaker 1>I'm one of the people that, Yeah, I just want

122
00:06:28.079 --> 00:06:31.759
<v Speaker 1>to make it work right, and so if I can

123
00:06:31.800 --> 00:06:36.160
<v Speaker 1>shortcut even a well reasoned approach, I'm gonna try it.

124
00:06:37.040 --> 00:06:40.959
<v Speaker 4>Yeah. It's it's it's a tough it's a tough intuition

125
00:06:41.079 --> 00:06:43.920
<v Speaker 4>to fight, and I think that there's a reason for that.

126
00:06:44.639 --> 00:06:48.360
<v Speaker 4>I think that we think about programming as being single

127
00:06:48.439 --> 00:06:50.720
<v Speaker 4>modal when there's actually two modes to it. So the

128
00:06:50.720 --> 00:06:53.800
<v Speaker 4>first one we might think of as like building mode

129
00:06:53.879 --> 00:06:57.079
<v Speaker 4>or productivity mode. This is mostly what we see modeled,

130
00:06:57.399 --> 00:06:59.519
<v Speaker 4>This is mostly what we see in tutorials, and this

131
00:06:59.600 --> 00:07:02.199
<v Speaker 4>is most what we're striving for. This is also what

132
00:07:02.199 --> 00:07:05.079
<v Speaker 4>we reward software engineers for. If we see them spending

133
00:07:05.120 --> 00:07:07.920
<v Speaker 4>a lot of time in this like cranking building mode,

134
00:07:07.959 --> 00:07:10.680
<v Speaker 4>we think of them as a good software engineer. And

135
00:07:10.839 --> 00:07:14.839
<v Speaker 4>in that mode, we're focused on getting something working fast.

136
00:07:15.000 --> 00:07:19.079
<v Speaker 4>Our focus is on creating something that wasn't there before,

137
00:07:19.600 --> 00:07:23.240
<v Speaker 4>and speed is of the essence in this mode. So

138
00:07:23.279 --> 00:07:26.959
<v Speaker 4>the problem comes in that that mode is most effective

139
00:07:27.199 --> 00:07:31.120
<v Speaker 4>when we understand what our code is doing. In a case,

140
00:07:31.160 --> 00:07:32.800
<v Speaker 4>we're we're facing a bug, or in a case we'

141
00:07:32.800 --> 00:07:36.199
<v Speaker 4>we're facing an issue in our code. By definition, we

142
00:07:36.240 --> 00:07:39.040
<v Speaker 4>don't quite understand what our code is doing, because if

143
00:07:39.040 --> 00:07:41.160
<v Speaker 4>we did understand what our code was doing, it wouldn't

144
00:07:41.160 --> 00:07:42.920
<v Speaker 4>be doing the thing that we don't want it to do.

145
00:07:43.600 --> 00:07:46.920
<v Speaker 4>So the base assumption that makes the building mode work

146
00:07:47.040 --> 00:07:50.000
<v Speaker 4>is no longer true. But we continue to try this

147
00:07:50.079 --> 00:07:52.759
<v Speaker 4>building mode. We continue to move as if speed is

148
00:07:52.759 --> 00:07:55.040
<v Speaker 4>of the essence. Is if the focus is on getting

149
00:07:55.079 --> 00:07:58.639
<v Speaker 4>something to happen, and it doesn't end up working particularly well,

150
00:07:58.639 --> 00:08:01.240
<v Speaker 4>and it works worse and worse, Yes, the less we

151
00:08:01.399 --> 00:08:05.519
<v Speaker 4>understand exactly what our code is doing. Because speed relies

152
00:08:05.759 --> 00:08:10.000
<v Speaker 4>on making quick judgments. Speed relies on heuristics that relies

153
00:08:10.040 --> 00:08:13.800
<v Speaker 4>on assumptions, and when our assumptions are correct, then we

154
00:08:13.839 --> 00:08:15.800
<v Speaker 4>can move faster. But if we don't understand what our

155
00:08:15.839 --> 00:08:20.079
<v Speaker 4>code is doing, there's some assumption that we're making that's incorrect,

156
00:08:20.120 --> 00:08:22.000
<v Speaker 4>and the faster we try to move, the more likely

157
00:08:22.079 --> 00:08:25.240
<v Speaker 4>it is that we gloss over that assumption that we

158
00:08:25.319 --> 00:08:27.839
<v Speaker 4>don't take the time to re examine that assumption. So

159
00:08:27.920 --> 00:08:30.720
<v Speaker 4>the faster we try to move, the lower the likelihood

160
00:08:30.720 --> 00:08:32.159
<v Speaker 4>that we're going to be able to end up catching

161
00:08:32.200 --> 00:08:34.879
<v Speaker 4>it insidious bug because we're not re examining those assumptions

162
00:08:34.879 --> 00:08:37.919
<v Speaker 4>that we're making. So there's really a second mode that

163
00:08:37.960 --> 00:08:39.720
<v Speaker 4>we need to be aware of in programming, and it's

164
00:08:39.720 --> 00:08:41.840
<v Speaker 4>something that we need to switch into when we don't

165
00:08:41.919 --> 00:08:44.159
<v Speaker 4>understand what our code is doing. We need to be

166
00:08:44.200 --> 00:08:47.799
<v Speaker 4>able to switch from that building mode into an investigative

167
00:08:47.840 --> 00:08:50.440
<v Speaker 4>mode where we're no longer focused on creating something that

168
00:08:50.480 --> 00:08:54.240
<v Speaker 4>once upon a time wasn't and now instead we're focused

169
00:08:54.360 --> 00:08:58.639
<v Speaker 4>on understanding exactly what our code is doing, but maybe

170
00:08:58.679 --> 00:09:02.840
<v Speaker 4>more importantly, understand our assumptions about what our code is

171
00:09:02.879 --> 00:09:06.799
<v Speaker 4>doing because somewhere in those assumptions something isn't matching up.

172
00:09:07.320 --> 00:09:11.840
<v Speaker 4>That's our opportunity to slow down, to compare what our

173
00:09:11.879 --> 00:09:13.919
<v Speaker 4>code is doing to what it is that we think

174
00:09:14.000 --> 00:09:17.720
<v Speaker 4>our code should be doing, and narrow down the location

175
00:09:18.000 --> 00:09:21.600
<v Speaker 4>in the code where the difference is happening so that

176
00:09:21.639 --> 00:09:24.200
<v Speaker 4>we can then fix it and bring our assumptions and

177
00:09:24.240 --> 00:09:27.200
<v Speaker 4>the codes function back into line to resolve the issue.

178
00:09:27.559 --> 00:09:31.559
<v Speaker 3>So slow down, huh, go ahead? Yeah, So you you

179
00:09:32.240 --> 00:09:32.600
<v Speaker 3>all right?

180
00:09:32.879 --> 00:09:35.759
<v Speaker 6>So talking about these modes since since we got here,

181
00:09:35.799 --> 00:09:39.679
<v Speaker 6>because I think this is super interesting and it's it

182
00:09:39.759 --> 00:09:41.919
<v Speaker 6>appears that you have thought quite a bit about this,

183
00:09:42.000 --> 00:09:43.919
<v Speaker 6>because you're super eloquent at talking about it.

184
00:09:44.159 --> 00:09:44.840
<v Speaker 4>Huh, thank you.

185
00:09:44.879 --> 00:09:46.799
<v Speaker 3>I appreciate that there's a lot.

186
00:09:46.960 --> 00:09:48.679
<v Speaker 6>So there's a lot of language here, and I think

187
00:09:48.720 --> 00:09:51.120
<v Speaker 6>I think I vaguely understand what's going on. Hopefully I

188
00:09:51.200 --> 00:09:53.360
<v Speaker 6>understand it's slightly better than that. How do you teach

189
00:09:53.399 --> 00:09:57.440
<v Speaker 6>this to somebody? Because as I was sitting here listening

190
00:09:57.480 --> 00:10:01.639
<v Speaker 6>to you talking like, okay, yes, I recognize eyes where over.

191
00:10:01.720 --> 00:10:04.519
<v Speaker 6>I mean, I've been doing this for almost fifteen years,

192
00:10:04.559 --> 00:10:07.080
<v Speaker 6>so at some point, hopefully I've gotten sort of good

193
00:10:07.080 --> 00:10:10.600
<v Speaker 6>at this, right, and I feel like I have stumbled

194
00:10:10.639 --> 00:10:13.720
<v Speaker 6>my way through sort of having these two modes, right,

195
00:10:14.080 --> 00:10:17.320
<v Speaker 6>or at least I can look back on my past

196
00:10:17.440 --> 00:10:19.360
<v Speaker 6>and like kind of feel like I recognize that.

197
00:10:20.159 --> 00:10:21.639
<v Speaker 3>And as I.

198
00:10:21.600 --> 00:10:24.440
<v Speaker 6>Think about like people that I'm mentoring, this is this

199
00:10:24.519 --> 00:10:26.559
<v Speaker 6>is kind of the frame that I'm thinking about right now.

200
00:10:27.159 --> 00:10:31.200
<v Speaker 6>This is definitely a stumbling block, right. So, for example,

201
00:10:31.360 --> 00:10:34.840
<v Speaker 6>I have one person that I'm mentor right now that

202
00:10:35.240 --> 00:10:39.039
<v Speaker 6>they're always in build mode every week, and I'm spending

203
00:10:39.279 --> 00:10:43.200
<v Speaker 6>all all this time and energy trying to get this

204
00:10:43.240 --> 00:10:47.159
<v Speaker 6>person to slow down, right, So, like, are there ways

205
00:10:47.519 --> 00:10:48.399
<v Speaker 6>do you have tips?

206
00:10:48.440 --> 00:10:50.480
<v Speaker 3>Maybe you don't. Maybe you're just like, look.

207
00:10:50.279 --> 00:10:53.080
<v Speaker 6>I'm just talking about what we should do, not necessarily

208
00:10:53.080 --> 00:10:55.159
<v Speaker 6>how we get there, right, And that's fine, But I'm

209
00:10:55.159 --> 00:10:58.000
<v Speaker 6>curious if you have tips, how do you convey this

210
00:10:58.120 --> 00:11:02.279
<v Speaker 6>to somebody? Hey, look like here's the value of slowing down.

211
00:11:02.679 --> 00:11:05.120
<v Speaker 6>Maybe here's a framework for when you choose to slow

212
00:11:05.159 --> 00:11:08.159
<v Speaker 6>down and when you know, flip back to build mode.

213
00:11:08.360 --> 00:11:11.080
<v Speaker 3>I know there's a lot of weird questions in there.

214
00:11:12.159 --> 00:11:13.000
<v Speaker 3>Look what you want up?

215
00:11:13.600 --> 00:11:16.120
<v Speaker 4>Yeah, no, it makes sense to me. I think that

216
00:11:16.879 --> 00:11:20.000
<v Speaker 4>you're right. So one of the things that we need

217
00:11:20.080 --> 00:11:24.639
<v Speaker 4>to be able to identify in practice is when do

218
00:11:24.679 --> 00:11:30.120
<v Speaker 4>we need to shift between these two modes? What signals

219
00:11:30.159 --> 00:11:32.440
<v Speaker 4>can we use to determine that we should be in

220
00:11:32.679 --> 00:11:37.240
<v Speaker 4>a building mode versus an investigative mode. And so one

221
00:11:37.320 --> 00:11:40.440
<v Speaker 4>of the things that I use for this is so

222
00:11:40.480 --> 00:11:42.720
<v Speaker 4>there are a couple of different strategies that we can

223
00:11:42.799 --> 00:11:47.120
<v Speaker 4>use for debugging, right, and there's one in particular that

224
00:11:47.200 --> 00:11:51.399
<v Speaker 4>tends to show up really really commonly when we are

225
00:11:51.480 --> 00:11:55.080
<v Speaker 4>in when we are in build mode, because it is

226
00:11:55.120 --> 00:11:59.399
<v Speaker 4>effective for build mode. So I call it the standard strategy.

227
00:12:00.000 --> 00:12:04.039
<v Speaker 4>And what this is is that when you run into

228
00:12:04.080 --> 00:12:06.840
<v Speaker 4>a bug, you try changing the thing that you think

229
00:12:06.879 --> 00:12:09.960
<v Speaker 4>is most likely to be causing the bug, and you

230
00:12:10.000 --> 00:12:12.919
<v Speaker 4>see if it works or not. If it doesn't work,

231
00:12:13.240 --> 00:12:15.600
<v Speaker 4>you try changing the thing you think is second most

232
00:12:15.720 --> 00:12:18.679
<v Speaker 4>likely to be causing the bug, and hopefully that works.

233
00:12:19.039 --> 00:12:20.840
<v Speaker 4>And if it doesn't work, then you try changing the

234
00:12:20.879 --> 00:12:23.000
<v Speaker 4>thing that you think is the third most likely to

235
00:12:23.039 --> 00:12:27.919
<v Speaker 4>be causing the bug. This is perhaps the fastest kind

236
00:12:27.960 --> 00:12:33.000
<v Speaker 4>of shortcut strategy to get something working when you understand

237
00:12:33.039 --> 00:12:35.799
<v Speaker 4>what's happening in your code, Because when you do understand

238
00:12:35.840 --> 00:12:37.519
<v Speaker 4>what's happening in your code, the thing that you try

239
00:12:37.559 --> 00:12:39.519
<v Speaker 4>first is in fact the most likely thing to be

240
00:12:39.519 --> 00:12:41.799
<v Speaker 4>causing the bug, and you get through it relatively quickly.

241
00:12:42.279 --> 00:12:44.440
<v Speaker 4>That's not going to be the case with insidious bugs.

242
00:12:44.440 --> 00:12:45.840
<v Speaker 4>So that's not going to be the case with a

243
00:12:45.879 --> 00:12:50.000
<v Speaker 4>bug where you're making an assumption that's fundamentally inaccurate to

244
00:12:50.039 --> 00:12:52.440
<v Speaker 4>what it is that the code is doing, because the

245
00:12:52.519 --> 00:12:54.159
<v Speaker 4>things that you think are the most likely to be

246
00:12:54.200 --> 00:12:57.639
<v Speaker 4>causing the bug are like in line with your assumptions

247
00:12:57.639 --> 00:13:01.919
<v Speaker 4>about what the code is doing. So standard strategy great

248
00:13:01.960 --> 00:13:05.080
<v Speaker 4>for build mode. Here's where it falls down is that

249
00:13:05.159 --> 00:13:07.320
<v Speaker 4>if you don't understand what's happening in your code, you

250
00:13:07.320 --> 00:13:09.320
<v Speaker 4>can end up in this kind of vicious cycle with

251
00:13:09.360 --> 00:13:13.360
<v Speaker 4>the standard strategy where, for example, you try changing the

252
00:13:13.399 --> 00:13:15.399
<v Speaker 4>thing you think is most likely to be causing the bug,

253
00:13:15.960 --> 00:13:19.120
<v Speaker 4>and it doesn't work. So you try the changing the

254
00:13:19.159 --> 00:13:21.000
<v Speaker 4>thing you think is second most likely to be causing

255
00:13:21.000 --> 00:13:24.200
<v Speaker 4>the bug, and it still doesn't work. So you run

256
00:13:24.240 --> 00:13:26.919
<v Speaker 4>out of ideas, and then you get pissed and you

257
00:13:26.960 --> 00:13:28.679
<v Speaker 4>go back and you try changing the thing that you

258
00:13:28.759 --> 00:13:30.679
<v Speaker 4>tried the first time to see if it works this

259
00:13:30.799 --> 00:13:33.159
<v Speaker 4>time around, and you get in this kind of like

260
00:13:33.279 --> 00:13:37.399
<v Speaker 4>vicious cycle with it. Right, that's the failure mode for

261
00:13:37.440 --> 00:13:41.639
<v Speaker 4>the standard strategy. That's where build mode fails us when

262
00:13:41.639 --> 00:13:44.799
<v Speaker 4>we don't understand what's going on with our code, And

263
00:13:44.960 --> 00:13:47.480
<v Speaker 4>that I think is a really strong signal when you're

264
00:13:47.519 --> 00:13:51.320
<v Speaker 4>going back and trying the thing again that you already

265
00:13:51.399 --> 00:13:54.399
<v Speaker 4>tried and saw it didn't work. Yeah, sometimes that works.

266
00:13:54.600 --> 00:13:56.559
<v Speaker 4>Maybe that's what it was. There was some configures you

267
00:13:56.720 --> 00:13:59.960
<v Speaker 4>or something like that. If it doesn't work the second

268
00:14:00.080 --> 00:14:03.159
<v Speaker 4>in time, I think that's your like really strong signal

269
00:14:03.200 --> 00:14:05.879
<v Speaker 4>that it's time to switch into investigation mode. Because at

270
00:14:05.919 --> 00:14:09.799
<v Speaker 4>that point, clearly you've made some assumptions. Something somewhere is

271
00:14:09.840 --> 00:14:13.480
<v Speaker 4>not matching up. So then if the standard strategy is

272
00:14:13.480 --> 00:14:15.519
<v Speaker 4>not going to work for us, we have to have

273
00:14:15.559 --> 00:14:18.360
<v Speaker 4>strategies that we could use instead. Right, there's got to

274
00:14:18.399 --> 00:14:21.799
<v Speaker 4>be something other than the standard strategy. Figure out, you know,

275
00:14:22.399 --> 00:14:26.159
<v Speaker 4>instead of focusing on getting the thing working as quickly

276
00:14:26.200 --> 00:14:29.960
<v Speaker 4>as possible, we can instead pick a strategy that focus

277
00:14:30.000 --> 00:14:34.000
<v Speaker 4>is on something else. So the strategies that I use

278
00:14:34.080 --> 00:14:37.919
<v Speaker 4>at that point both focus on there's two, I'll go

279
00:14:38.039 --> 00:14:41.159
<v Speaker 4>over them, but they both they shift the focus from

280
00:14:41.159 --> 00:14:43.519
<v Speaker 4>how do I get this thing working to how do

281
00:14:43.639 --> 00:14:48.799
<v Speaker 4>I identify the place where my assumptions about what's happening do

282
00:14:49.000 --> 00:14:53.000
<v Speaker 4>not match up with the code and what it's doing right.

283
00:14:53.440 --> 00:14:56.600
<v Speaker 4>So there are a couple. One of them I try

284
00:14:56.639 --> 00:14:58.759
<v Speaker 4>to use. One of them is helpful for speed in

285
00:14:58.759 --> 00:15:01.200
<v Speaker 4>some cases, when it's not possible, I use the other one.

286
00:15:01.519 --> 00:15:04.679
<v Speaker 4>So the first one which I can use for speed

287
00:15:05.440 --> 00:15:08.200
<v Speaker 4>is I call it the binary search strategy. And basically

288
00:15:08.200 --> 00:15:10.600
<v Speaker 4>the way that this works is that I identify some

289
00:15:10.759 --> 00:15:15.240
<v Speaker 4>point where the code begins executing right and identify some

290
00:15:15.320 --> 00:15:18.120
<v Speaker 4>point either where the code finishes or at which point

291
00:15:18.159 --> 00:15:20.240
<v Speaker 4>I'm positive the bug has happened. So I have these

292
00:15:20.279 --> 00:15:23.399
<v Speaker 4>beginning and end points right now. I try to pick

293
00:15:23.480 --> 00:15:26.879
<v Speaker 4>some spot in between those two, kind of in the middle,

294
00:15:27.120 --> 00:15:29.759
<v Speaker 4>and at that point I use a breakpoint, or I

295
00:15:29.840 --> 00:15:32.559
<v Speaker 4>use print statements or any of a number of tactics

296
00:15:32.559 --> 00:15:36.039
<v Speaker 4>to get into the code and test that all of

297
00:15:36.080 --> 00:15:40.240
<v Speaker 4>the assumptions that I am making at that point are correct.

298
00:15:40.759 --> 00:15:43.840
<v Speaker 4>So I'm printing out variables determining what the flow of

299
00:15:43.879 --> 00:15:46.559
<v Speaker 4>the execution is. And suppose I test all of my

300
00:15:46.600 --> 00:15:49.120
<v Speaker 4>assumptions at that point in the code and whatever i'm

301
00:15:49.159 --> 00:15:53.960
<v Speaker 4>printing logging breakpoint and everything's working is expected. If everything's

302
00:15:53.960 --> 00:15:57.559
<v Speaker 4>working is expected at that point, then I pick a

303
00:15:57.600 --> 00:16:01.919
<v Speaker 4>point halfway between there and wherever my code finished executing

304
00:16:02.039 --> 00:16:05.000
<v Speaker 4>or the bug happens. And so one of the things

305
00:16:05.039 --> 00:16:09.919
<v Speaker 4>that we know from executing binary executing binary search in

306
00:16:10.440 --> 00:16:14.200
<v Speaker 4>computer programs is that it's pretty fast. You can narrow

307
00:16:14.320 --> 00:16:19.000
<v Speaker 4>down in relatively few steps from a really wide range

308
00:16:19.000 --> 00:16:21.679
<v Speaker 4>of options what could be going on, even if you've

309
00:16:21.720 --> 00:16:23.600
<v Speaker 4>got tons and tons of code in the middle. We're

310
00:16:23.600 --> 00:16:27.639
<v Speaker 4>talking about in a really complicated system using binary search

311
00:16:27.679 --> 00:16:33.120
<v Speaker 4>strategy five six steps maybe, which is sounds like a

312
00:16:33.159 --> 00:16:37.919
<v Speaker 4>lot until you consider that you might try like fourteen fifteen, sixteen,

313
00:16:38.000 --> 00:16:41.399
<v Speaker 4>twenty twenty five different things in a really complex system

314
00:16:41.440 --> 00:16:43.720
<v Speaker 4>if you're just trying to move straight to getting the

315
00:16:43.759 --> 00:16:44.200
<v Speaker 4>thing working.

316
00:16:45.480 --> 00:16:48.159
<v Speaker 1>So I just want to point out, with your standard strategy,

317
00:16:48.279 --> 00:16:50.320
<v Speaker 1>I'm a little bit weirded out.

318
00:16:50.159 --> 00:16:52.080
<v Speaker 2>That you've been watching me code all these years.

319
00:16:54.879 --> 00:16:56.879
<v Speaker 4>You know what the problem is. I've been watching me

320
00:16:57.039 --> 00:17:02.519
<v Speaker 4>code all these years, and I do that constant, you know,

321
00:17:02.720 --> 00:17:04.599
<v Speaker 4>the like maybe there was a ghost in the system

322
00:17:04.640 --> 00:17:06.160
<v Speaker 4>the first time. Let me try it a second time.

323
00:17:06.160 --> 00:17:08.200
<v Speaker 4>See if the ghost is gone. I've definitely done it.

324
00:17:08.240 --> 00:17:09.519
<v Speaker 4>I think everybody's done it, you know.

325
00:17:10.359 --> 00:17:13.519
<v Speaker 1>Yeah, but what you're saying makes sense as far as

326
00:17:13.559 --> 00:17:16.720
<v Speaker 1>the binary search strategy, it's the same idea as a

327
00:17:16.759 --> 00:17:19.359
<v Speaker 1>binary search tree. And I'm assuming that you got the

328
00:17:19.400 --> 00:17:23.839
<v Speaker 1>idea from some structure like that. But yeah, you know,

329
00:17:24.039 --> 00:17:26.279
<v Speaker 1>I mean we talk about big O and everybody makes

330
00:17:26.279 --> 00:17:28.160
<v Speaker 1>a big deal out of it as an interview question.

331
00:17:28.279 --> 00:17:33.480
<v Speaker 1>But I mean, yeah, you here, it actually is a

332
00:17:33.519 --> 00:17:37.519
<v Speaker 1>measure of speed, right, because it's log of then you know,

333
00:17:37.680 --> 00:17:40.480
<v Speaker 1>number of lines in the area you've identified as where

334
00:17:40.519 --> 00:17:44.440
<v Speaker 1>the bug may be occurring, so you know, And and

335
00:17:44.480 --> 00:17:47.039
<v Speaker 1>the fact that you can pick chunks of the code

336
00:17:47.160 --> 00:17:51.480
<v Speaker 1>instead of you know, specific locations within the code allows

337
00:17:51.519 --> 00:17:53.400
<v Speaker 1>you to narrow down well, it's either this chunk or

338
00:17:53.400 --> 00:17:57.599
<v Speaker 1>that chunk, and so you know, you might have to

339
00:17:57.839 --> 00:18:01.960
<v Speaker 1>log in, yeah, you know, to narrow it down. Yeah,

340
00:18:02.039 --> 00:18:07.119
<v Speaker 1>instead of you know, essentially you're just doing a random selection. Yeah,

341
00:18:07.240 --> 00:18:09.920
<v Speaker 1>you know, it's an informed random selection, but it's still

342
00:18:10.039 --> 00:18:13.240
<v Speaker 1>random ish and hoping that you hit the right thing,

343
00:18:13.279 --> 00:18:15.640
<v Speaker 1>because it's not just that you change it in the

344
00:18:15.720 --> 00:18:16.359
<v Speaker 1>right place.

345
00:18:16.119 --> 00:18:17.839
<v Speaker 2>But you have to change it the right way too.

346
00:18:18.319 --> 00:18:22.519
<v Speaker 4>Right, Yeah, it's absolutely the case. So yeah, I love

347
00:18:22.599 --> 00:18:25.400
<v Speaker 4>using the binary search strategy for that. I think I

348
00:18:25.480 --> 00:18:29.799
<v Speaker 4>started using it for that after I was using get bisect,

349
00:18:30.440 --> 00:18:34.319
<v Speaker 4>which essentially allows you to similarly use a binary search

350
00:18:34.359 --> 00:18:37.200
<v Speaker 4>strategy to narrow down what commits something went wrong in

351
00:18:37.839 --> 00:18:40.279
<v Speaker 4>and what I you know, I sort of like knew

352
00:18:40.319 --> 00:18:45.720
<v Speaker 4>this cerebrally from having studied computer science, but using get bisect,

353
00:18:45.759 --> 00:18:50.240
<v Speaker 4>I realized, like, it takes me, you know, a lot

354
00:18:50.440 --> 00:18:54.359
<v Speaker 4>fewer steps, let's say, six ish steps to figure out

355
00:18:54.359 --> 00:18:58.119
<v Speaker 4>what's going wrong, like which commit out of a hundred

356
00:18:58.279 --> 00:19:03.079
<v Speaker 4>commits something wrong. One hundred commit sounds daunting at first,

357
00:19:03.079 --> 00:19:06.200
<v Speaker 4>but seven steps doesn't sound nearly as daunting, and so

358
00:19:06.720 --> 00:19:10.039
<v Speaker 4>this strategy could also be applied there. Now the downfall

359
00:19:10.119 --> 00:19:14.160
<v Speaker 4>of this strategy it's graver speed, but it's sort of assumed.

360
00:19:14.200 --> 00:19:16.640
<v Speaker 4>It works best when you're talking about like a single

361
00:19:16.759 --> 00:19:20.640
<v Speaker 4>threaded application or a situation where you don't have multiple

362
00:19:20.640 --> 00:19:24.200
<v Speaker 4>processes where things can break off, where the order is deterministic,

363
00:19:24.640 --> 00:19:27.079
<v Speaker 4>and so when you're dealing with multiple threads or some

364
00:19:27.160 --> 00:19:31.200
<v Speaker 4>other kind of nondeterministic order type of situation, the binary

365
00:19:31.279 --> 00:19:33.559
<v Speaker 4>search strategy can be tough to use because you don't

366
00:19:33.559 --> 00:19:36.480
<v Speaker 4>necessarily know from beginning to end of execution, like what

367
00:19:36.559 --> 00:19:39.119
<v Speaker 4>the order is to do that. What you do know

368
00:19:39.759 --> 00:19:42.759
<v Speaker 4>is that you start somewhere, and then at some point

369
00:19:42.759 --> 00:19:44.920
<v Speaker 4>at the end something went wrong, and all this stuff

370
00:19:44.920 --> 00:19:47.799
<v Speaker 4>that happened in here, whatever order it happened in, something

371
00:19:47.839 --> 00:19:51.279
<v Speaker 4>went wrong. So in those cases I have to back

372
00:19:51.359 --> 00:19:56.160
<v Speaker 4>up and use potentially a slower, less flashy, less cool strategy,

373
00:19:56.400 --> 00:19:58.640
<v Speaker 4>which is essentially to start at the beginning of execution

374
00:19:59.559 --> 00:20:02.839
<v Speaker 4>and and like at the very beginning of execution, do

375
00:20:02.920 --> 00:20:06.960
<v Speaker 4>the same thing, print, log, breakpoint, test my assumptions and

376
00:20:07.279 --> 00:20:11.680
<v Speaker 4>if they're wrong, then maybe that's where my issue is

377
00:20:11.680 --> 00:20:14.359
<v Speaker 4>getting cost and if not, then move a little later

378
00:20:14.400 --> 00:20:18.400
<v Speaker 4>in the execute basically follow the code path through, which

379
00:20:18.559 --> 00:20:23.000
<v Speaker 4>feels really slow because especially if we do it like

380
00:20:23.039 --> 00:20:25.240
<v Speaker 4>we start at the very beginning, all our assumptions are right.

381
00:20:25.720 --> 00:20:28.400
<v Speaker 4>We start one step down, all of our assumptions are right.

382
00:20:28.759 --> 00:20:31.240
<v Speaker 4>We go to two steps down, all of our assumptions

383
00:20:31.279 --> 00:20:33.720
<v Speaker 4>are right. Okay, this is getting boring. When do I

384
00:20:33.759 --> 00:20:36.000
<v Speaker 4>get to skip ahead and then we get to step three?

385
00:20:37.000 --> 00:20:39.480
<v Speaker 4>Oh wait a minute, I was assuming I was just

386
00:20:39.519 --> 00:20:43.319
<v Speaker 4>skipping to step eight and all of this time, and

387
00:20:43.359 --> 00:20:47.039
<v Speaker 4>the problem was in step three. So suppose that there

388
00:20:47.039 --> 00:20:50.440
<v Speaker 4>are like fifteen steps there. That sounds like a lot.

389
00:20:50.480 --> 00:20:52.400
<v Speaker 4>But if your problem is in step three or step

390
00:20:52.440 --> 00:20:54.720
<v Speaker 4>four or step five, you only have to try as

391
00:20:54.720 --> 00:20:57.000
<v Speaker 4>many until you figure out what the actual problem is,

392
00:20:57.039 --> 00:20:59.440
<v Speaker 4>which at most is going to be fifteen, Whereas if

393
00:20:59.440 --> 00:21:02.440
<v Speaker 4>you're trying the same thing a million times at step eight,

394
00:21:02.559 --> 00:21:05.039
<v Speaker 4>that ends up still being more steps. Even though this

395
00:21:05.160 --> 00:21:09.960
<v Speaker 4>process feels really slow because kind of again by definition,

396
00:21:10.079 --> 00:21:13.640
<v Speaker 4>like we don't know what's wrong, so it makes sense

397
00:21:13.720 --> 00:21:18.079
<v Speaker 4>to figure out. It makes sense to systematically figure out

398
00:21:18.119 --> 00:21:21.759
<v Speaker 4>what's wrong. The other really nice thing about that strategy,

399
00:21:21.839 --> 00:21:26.640
<v Speaker 4>or both strategies, really is that we can feel like

400
00:21:26.680 --> 00:21:29.160
<v Speaker 4>we're making progress on a bug even if we haven't

401
00:21:29.200 --> 00:21:32.759
<v Speaker 4>fixed it yet, because psychologically the way it feels, well,

402
00:21:32.759 --> 00:21:34.920
<v Speaker 4>I'm interested in y'all's thoughts on this, actually, but my

403
00:21:35.079 --> 00:21:37.200
<v Speaker 4>feeling when I'm fixing a bug using something like the

404
00:21:37.200 --> 00:21:41.200
<v Speaker 4>standard strategy is my first assumption didn't work. I've gotten nowhere.

405
00:21:41.480 --> 00:21:43.880
<v Speaker 4>My second assumption didn't work. I've gotten nowhere. I feel

406
00:21:43.920 --> 00:21:48.000
<v Speaker 4>like I've made no progress until I have finished fixing

407
00:21:48.559 --> 00:21:51.559
<v Speaker 4>the bug, which really sucks right up until the moment

408
00:21:51.599 --> 00:21:54.720
<v Speaker 4>where I've finished fixing the bug. Whereas if I have

409
00:21:54.799 --> 00:21:58.599
<v Speaker 4>a systematic strategy, I could say, all right, well, I

410
00:21:58.640 --> 00:22:01.119
<v Speaker 4>haven't fixed the bug yet, but I have narrowed down

411
00:22:01.319 --> 00:22:03.519
<v Speaker 4>like half of the possibilities for where it could be.

412
00:22:03.839 --> 00:22:05.880
<v Speaker 4>And I know that I've narrowed down half of the

413
00:22:05.920 --> 00:22:10.480
<v Speaker 4>possibilities because I've quantified the possibilities and I'm moving through

414
00:22:10.519 --> 00:22:15.920
<v Speaker 4>them with some kind of like plan as opposed to guessing.

415
00:22:16.319 --> 00:22:18.039
<v Speaker 4>And if my guess is wrong, I don't really know

416
00:22:18.079 --> 00:22:19.680
<v Speaker 4>how much longer I'm going to be doing this.

417
00:22:20.240 --> 00:22:25.519
<v Speaker 6>You know, there's another downside to that Wold standard strategy too,

418
00:22:25.759 --> 00:22:30.720
<v Speaker 6>which is if you continue the standard strategy right through

419
00:22:30.920 --> 00:22:33.119
<v Speaker 6>the time, you're at the point when you don't know

420
00:22:33.160 --> 00:22:36.359
<v Speaker 6>what's wrong now right, but you continue just playing guests

421
00:22:36.359 --> 00:22:39.119
<v Speaker 6>and check. Now, all of a sudden, you probably didn't

422
00:22:39.160 --> 00:22:42.640
<v Speaker 6>take good notes as you're doing this, and when you

423
00:22:42.680 --> 00:22:45.799
<v Speaker 6>do finally affix it, you don't know why it now works,

424
00:22:46.039 --> 00:22:48.759
<v Speaker 6>and so this just becomes a boogeyman that you're just

425
00:22:48.839 --> 00:22:51.640
<v Speaker 6>like scared to go back and touch again because you're

426
00:22:51.680 --> 00:22:53.200
<v Speaker 6>just like, well, I can't touch any of that stuff.

427
00:22:53.200 --> 00:22:55.319
<v Speaker 3>I literally have no idea why it's working now.

428
00:22:56.599 --> 00:22:59.440
<v Speaker 6>I mean, I have done this and I can't I

429
00:22:59.480 --> 00:23:02.640
<v Speaker 6>can't even like tell how many times like I realized

430
00:23:02.640 --> 00:23:05.079
<v Speaker 6>somebody else was doing this because they're like, shoot, I

431
00:23:05.079 --> 00:23:06.319
<v Speaker 6>don't know why it's working, you.

432
00:23:06.279 --> 00:23:12.599
<v Speaker 4>Know, yeah, we uh. I think it's really funny when

433
00:23:12.599 --> 00:23:15.240
<v Speaker 4>people talk about how programmers, you know, oh, you know,

434
00:23:15.480 --> 00:23:19.480
<v Speaker 4>software engineers or engineers, they're like, they're not they're not

435
00:23:19.880 --> 00:23:23.640
<v Speaker 4>superstitious or any of that stuff. Everything's evidence based to them.

436
00:23:23.720 --> 00:23:29.400
<v Speaker 4>And I'm like, no, definitely, no, that's not how this is. Like,

437
00:23:29.440 --> 00:23:32.640
<v Speaker 4>the longer you work with software, the less you trust software.

438
00:23:32.720 --> 00:23:37.359
<v Speaker 4>There's a reason for that, and it's not. Yeah, I

439
00:23:37.400 --> 00:23:39.720
<v Speaker 4>think you know it's coming out.

440
00:23:39.640 --> 00:23:42.359
<v Speaker 5>The other side. Personally, I feel like I feel like

441
00:23:42.559 --> 00:23:45.519
<v Speaker 5>my code is my friend now now other people's code

442
00:23:45.599 --> 00:23:50.200
<v Speaker 5>is the enemy. My code code I've written and no

443
00:23:50.200 --> 00:23:53.720
<v Speaker 5>one else has touched is like a lovely, warm Blanket's

444
00:23:53.759 --> 00:23:57.839
<v Speaker 5>like something to come home to. Uh huh. So so yeah,

445
00:23:58.440 --> 00:24:01.200
<v Speaker 5>I do feel like there's a big difference between debugging

446
00:24:02.200 --> 00:24:07.640
<v Speaker 5>my code and debugging other people's code.

447
00:24:07.839 --> 00:24:13.119
<v Speaker 1>Oh absolutely, is that like other people's kids, So obviously

448
00:24:13.839 --> 00:24:15.400
<v Speaker 1>I tell you what I feel like.

449
00:24:15.440 --> 00:24:18.559
<v Speaker 5>The difference is is that when I'm writing something, I

450
00:24:18.839 --> 00:24:23.680
<v Speaker 5>tend to find the bugs at the time. Yeah, so

451
00:24:24.960 --> 00:24:27.279
<v Speaker 5>this probably isn't true, but it feels like it. I

452
00:24:27.279 --> 00:24:30.160
<v Speaker 5>feel like I'm finding the bugs when I'm writing it.

453
00:24:30.400 --> 00:24:33.440
<v Speaker 5>But when you've meen it happened. The other day, I

454
00:24:33.440 --> 00:24:35.119
<v Speaker 5>was asked to come and look at the roilse five

455
00:24:35.240 --> 00:24:39.799
<v Speaker 5>side and work out why it was being a naughty website.

456
00:24:40.680 --> 00:24:46.119
<v Speaker 5>And if someone else's code, you know, and you've just

457
00:24:46.160 --> 00:24:48.400
<v Speaker 5>got no no idea what's going on at all, and

458
00:24:48.440 --> 00:24:51.720
<v Speaker 5>it just feels like a much more difficult process. And

459
00:24:51.799 --> 00:24:55.079
<v Speaker 5>I also get a lot angrier when I'm debugging other

460
00:24:55.119 --> 00:24:57.960
<v Speaker 5>people's code. I'm a lot more forgiving of my own code.

461
00:24:58.799 --> 00:25:01.920
<v Speaker 5>Is there like an management approach to ducking?

462
00:25:02.319 --> 00:25:05.359
<v Speaker 4>Oh man? So it's funny that you mentioned this because

463
00:25:05.960 --> 00:25:10.160
<v Speaker 4>so I'm working on an implementation right now if the

464
00:25:10.279 --> 00:25:13.519
<v Speaker 4>Raft distributed Consensus algorithm, and I'm the only person who

465
00:25:13.559 --> 00:25:15.759
<v Speaker 4>has worked on this code, which means I got to

466
00:25:15.799 --> 00:25:19.880
<v Speaker 4>make all my own stylistic choices about it and every

467
00:25:20.119 --> 00:25:23.240
<v Speaker 4>you know, all the messages are like QT definitely not

468
00:25:23.319 --> 00:25:25.720
<v Speaker 4>what the original Raft team would have had their servers do.

469
00:25:26.759 --> 00:25:29.559
<v Speaker 4>And they're they're very nice to each other. They say

470
00:25:29.599 --> 00:25:31.519
<v Speaker 4>please and thank you and all that stuff. It's very

471
00:25:31.519 --> 00:25:39.519
<v Speaker 4>Canadian of them. But I I find that I like

472
00:25:39.640 --> 00:25:43.359
<v Speaker 4>the problems in that code. The idiosyncrasies in that code

473
00:25:43.799 --> 00:25:47.880
<v Speaker 4>are endearing to me because it's mine, you know, the

474
00:25:47.920 --> 00:25:52.599
<v Speaker 4>same way that my frenziosyncrasies are like endearing. Whereas like

475
00:25:52.640 --> 00:25:54.680
<v Speaker 4>if somebody else were to try to run this code,

476
00:25:54.640 --> 00:25:56.839
<v Speaker 4>they would probably be like, this is ridiculous, Like why

477
00:25:56.880 --> 00:25:59.160
<v Speaker 4>does it this is no, I don't like this at all,

478
00:25:59.440 --> 00:26:04.440
<v Speaker 4>but it's fun to me. And they did this. I'm

479
00:26:04.440 --> 00:26:06.559
<v Speaker 4>not gonna saye this correctly. I'll go back and find

480
00:26:06.599 --> 00:26:08.119
<v Speaker 4>it and we can put it in the show notes.

481
00:26:08.160 --> 00:26:11.599
<v Speaker 4>But they did this study about people's opinions of their

482
00:26:11.640 --> 00:26:15.839
<v Speaker 4>own origami. Are you all familiar with this study? So

483
00:26:16.720 --> 00:26:20.759
<v Speaker 4>essentially they taught some people how to do origami, people

484
00:26:20.759 --> 00:26:25.000
<v Speaker 4>who were not particularly skilled at origami to begin with.

485
00:26:25.480 --> 00:26:28.799
<v Speaker 4>And what they found was this really interesting effect where

486
00:26:29.400 --> 00:26:34.559
<v Speaker 4>the objectively worse the finished product was, the more the

487
00:26:34.680 --> 00:26:39.480
<v Speaker 4>creator loved it because it was an indication of how

488
00:26:39.599 --> 00:26:42.720
<v Speaker 4>much they had struggled with the origami and then they

489
00:26:42.759 --> 00:26:47.759
<v Speaker 4>finally got something sort of working, and that struggle was

490
00:26:47.920 --> 00:26:52.319
<v Speaker 4>like that struggle played a role in their fondness for

491
00:26:52.400 --> 00:26:56.000
<v Speaker 4>the finished product more than the objective judgment of the

492
00:26:56.000 --> 00:26:59.119
<v Speaker 4>finished product. And I think that probably happens with Code two.

493
00:26:59.400 --> 00:27:04.359
<v Speaker 5>Is say, look, what's the way this is going.

494
00:27:06.079 --> 00:27:10.000
<v Speaker 4>Well, it's that you have context on like all of

495
00:27:10.119 --> 00:27:13.960
<v Speaker 4>the problems that you've already solved in that code, right,

496
00:27:14.319 --> 00:27:16.559
<v Speaker 4>And other people they don't have that. They just come

497
00:27:16.640 --> 00:27:19.640
<v Speaker 4>in and they just assume everything that's working was always working,

498
00:27:20.000 --> 00:27:25.440
<v Speaker 4>and they focus on the things that that don't And

499
00:27:25.559 --> 00:27:27.799
<v Speaker 4>I think, you know, we struggle with that, and it's

500
00:27:28.359 --> 00:27:30.279
<v Speaker 4>of course, it's when you're when you're debugging your own

501
00:27:30.319 --> 00:27:33.400
<v Speaker 4>code to you have a little bit more intuition for

502
00:27:33.519 --> 00:27:36.279
<v Speaker 4>what was happening, and you don't have to back translate

503
00:27:36.359 --> 00:27:38.559
<v Speaker 4>from the code to the original intuition the way that

504
00:27:38.640 --> 00:27:40.960
<v Speaker 4>you would with somebody else's code. And when we go

505
00:27:41.039 --> 00:27:43.839
<v Speaker 4>in and we maintain somebody else's code. I do this

506
00:27:44.000 --> 00:27:45.880
<v Speaker 4>a lot in my job. I find that many of

507
00:27:45.960 --> 00:27:51.680
<v Speaker 4>the projects that I take on are relatively complex, relatively undocumented,

508
00:27:51.960 --> 00:27:55.680
<v Speaker 4>relatively untested code basis where I'm going in and I'm

509
00:27:55.720 --> 00:27:59.039
<v Speaker 4>adding documentation, I'm adding tests. In some cases, I'm going

510
00:27:59.079 --> 00:28:01.880
<v Speaker 4>in and the dial developer is gone and nobody knows

511
00:28:01.920 --> 00:28:03.400
<v Speaker 4>how it works, and I have to figure it out.

512
00:28:04.079 --> 00:28:06.200
<v Speaker 4>And in that case, we're not just talking about debugging.

513
00:28:06.240 --> 00:28:09.079
<v Speaker 4>We're not even at debugging yet. We're starting at like

514
00:28:09.759 --> 00:28:13.559
<v Speaker 4>forensic software analysis. Effectively, we have to be able to

515
00:28:13.640 --> 00:28:18.039
<v Speaker 4>go in and like CSI this code and figure out

516
00:28:18.240 --> 00:28:23.799
<v Speaker 4>from clues like what's what's going on? What's going on

517
00:28:24.000 --> 00:28:27.000
<v Speaker 4>in there, and figure out you know, based on like

518
00:28:27.240 --> 00:28:30.359
<v Speaker 4>these indicators in the code. I think originally this piece

519
00:28:30.400 --> 00:28:31.759
<v Speaker 4>of it was supposed to do this, And that's a

520
00:28:31.799 --> 00:28:35.119
<v Speaker 4>whole separate skill set from debugging, which is also you know,

521
00:28:35.240 --> 00:28:37.680
<v Speaker 4>forensic software analysis is a fun thing to get good

522
00:28:37.720 --> 00:28:42.559
<v Speaker 4>at too. But once again, like debugging, if we're not

523
00:28:43.240 --> 00:28:46.079
<v Speaker 4>if we're not promoting that to a first class skill set,

524
00:28:46.279 --> 00:28:48.559
<v Speaker 4>if we're not recognizing it and teaching it as a

525
00:28:48.680 --> 00:28:52.319
<v Speaker 4>first class skill set, it just feels to people like

526
00:28:52.440 --> 00:28:56.000
<v Speaker 4>either wasted time or like an indication that they're not

527
00:28:56.079 --> 00:28:57.920
<v Speaker 4>good at their jobs. And it's not that they're not

528
00:28:58.039 --> 00:29:01.000
<v Speaker 4>good at their jobs. It's that this is a skill

529
00:29:01.319 --> 00:29:03.880
<v Speaker 4>that takes time, and the fact that you need to

530
00:29:03.960 --> 00:29:06.680
<v Speaker 4>take time to do this thing doesn't mean you're bad.

531
00:29:06.960 --> 00:29:09.400
<v Speaker 4>It means that this is one of the things we

532
00:29:09.519 --> 00:29:13.319
<v Speaker 4>have to take time to do when we're doing this job.

533
00:29:13.559 --> 00:29:15.680
<v Speaker 4>The same way that a cowboy, you know, it's not

534
00:29:15.839 --> 00:29:17.519
<v Speaker 4>just about riding. You also have to be able to

535
00:29:17.599 --> 00:29:19.119
<v Speaker 4>saddle up your horse. You have to be able to

536
00:29:19.200 --> 00:29:22.440
<v Speaker 4>feed your horse. You have to have cattle sense or

537
00:29:22.480 --> 00:29:24.079
<v Speaker 4>whatever it is they have. You have to be able

538
00:29:24.160 --> 00:29:27.359
<v Speaker 4>to cook your beans and a can on the fire.

539
00:29:27.440 --> 00:29:29.160
<v Speaker 4>You know, you've got to be able to do all

540
00:29:29.240 --> 00:29:33.000
<v Speaker 4>this stuff that's not just riding your horse, right, and

541
00:29:33.119 --> 00:29:35.599
<v Speaker 4>it's not wasted time to do all those things. It's

542
00:29:35.680 --> 00:29:39.160
<v Speaker 4>stuff you gotta do to be, you know, a cattle person.

543
00:29:39.880 --> 00:29:43.480
<v Speaker 4>And I think it's the same with debugging, forensic software analysis.

544
00:29:43.519 --> 00:29:45.920
<v Speaker 4>We've got these skills that we need that we don't

545
00:29:46.000 --> 00:29:49.039
<v Speaker 4>factor into our mental model of what it means to

546
00:29:49.079 --> 00:29:51.319
<v Speaker 4>be a good programmer, and we really should.

547
00:29:52.039 --> 00:29:54.440
<v Speaker 5>Can I ask you about reproduction?

548
00:29:55.559 --> 00:29:55.839
<v Speaker 4>Sure?

549
00:29:56.920 --> 00:29:58.319
<v Speaker 3>Because what's your question?

550
00:29:58.920 --> 00:30:00.680
<v Speaker 4>So when a man in a one and love each

551
00:30:00.680 --> 00:30:02.000
<v Speaker 4>other very much, I'm so.

552
00:30:02.079 --> 00:30:08.119
<v Speaker 5>Glad you picked that up. The hardest bit I have is,

553
00:30:08.400 --> 00:30:11.440
<v Speaker 5>especially in Rudy because there's so much rails floating around,

554
00:30:12.519 --> 00:30:19.079
<v Speaker 5>is reproducing the expletive expletive bug. Because a lot of

555
00:30:19.119 --> 00:30:21.000
<v Speaker 5>the stuff I do is kind of an e commerce

556
00:30:21.079 --> 00:30:23.799
<v Speaker 5>site and you get the people with phoning up and

557
00:30:23.880 --> 00:30:26.359
<v Speaker 5>they said, your website had just done that, and then

558
00:30:26.400 --> 00:30:28.559
<v Speaker 5>the client phones me up and I said, like they say,

559
00:30:29.039 --> 00:30:33.960
<v Speaker 5>once or twice a day, the website does this right,

560
00:30:34.519 --> 00:30:39.119
<v Speaker 5>And for most people it's fine, but it's those edge

561
00:30:39.240 --> 00:30:44.119
<v Speaker 5>cases where you're hitting a bug which can't be easily reproduced,

562
00:30:44.680 --> 00:30:48.200
<v Speaker 5>and often once you have reproduction on that bug, solving

563
00:30:48.240 --> 00:30:51.039
<v Speaker 5>it's just like the easiest thing ever, it's just getting

564
00:30:51.119 --> 00:30:53.880
<v Speaker 5>it to do it again. Is there any tips for

565
00:30:54.039 --> 00:30:55.440
<v Speaker 5>getting it to do it again?

566
00:30:56.240 --> 00:30:58.400
<v Speaker 4>Ah, that's a good question, because that can be a

567
00:30:58.480 --> 00:31:01.039
<v Speaker 4>really tough one. You know, it be hard to replicate

568
00:31:01.200 --> 00:31:07.279
<v Speaker 4>the exact environment that it happened, in the exact state

569
00:31:07.359 --> 00:31:11.680
<v Speaker 4>of the database, that it happened in the exact like

570
00:31:12.559 --> 00:31:17.119
<v Speaker 4>whatever the configuration is it's going on. We know with

571
00:31:17.279 --> 00:31:20.079
<v Speaker 4>bugs that are tough to reproduce that if we're not

572
00:31:20.279 --> 00:31:25.319
<v Speaker 4>able to get it to reproduce, there's some aspect of

573
00:31:25.440 --> 00:31:29.720
<v Speaker 4>the configuration that is outside of the environment that we're

574
00:31:29.759 --> 00:31:35.039
<v Speaker 4>currently modeling that is different from what the person who

575
00:31:35.200 --> 00:31:39.400
<v Speaker 4>saw the bug originally provided. And I think there's kind

576
00:31:39.440 --> 00:31:42.799
<v Speaker 4>of two parts to this. The first one is recognizing

577
00:31:43.440 --> 00:31:49.640
<v Speaker 4>which aspects of the environment are missing from our understanding,

578
00:31:50.680 --> 00:31:52.720
<v Speaker 4>And this one is tough, but it's the one between

579
00:31:52.759 --> 00:31:56.119
<v Speaker 4>the two that I think software engineers have a little

580
00:31:56.160 --> 00:31:59.160
<v Speaker 4>more success with than the other one because the other one,

581
00:31:59.200 --> 00:32:02.400
<v Speaker 4>and this is an ongoing struggle is figuring out how

582
00:32:02.480 --> 00:32:05.799
<v Speaker 4>to get the details of the entire environment to be

583
00:32:05.960 --> 00:32:09.960
<v Speaker 4>able to replicate it one hundred percent, Because when somebody

584
00:32:10.039 --> 00:32:12.559
<v Speaker 4>phones in and they say, like, my app just did this,

585
00:32:13.519 --> 00:32:17.519
<v Speaker 4>it's not necessarily it's not necessarily true that that person

586
00:32:18.680 --> 00:32:21.960
<v Speaker 4>has access to the details of the entire environment where

587
00:32:22.000 --> 00:32:25.480
<v Speaker 4>the problem is cropping up, or that they're even like

588
00:32:25.839 --> 00:32:28.519
<v Speaker 4>aware of all of the environmental variables it might be

589
00:32:28.640 --> 00:32:31.839
<v Speaker 4>causing the issue. And so in those cases it can

590
00:32:31.920 --> 00:32:36.039
<v Speaker 4>be really really tough, and sometimes the solution ends up

591
00:32:36.079 --> 00:32:38.160
<v Speaker 4>being all right. So it happens once or twice a day.

592
00:32:38.799 --> 00:32:41.880
<v Speaker 4>We take all of the issues of this type and

593
00:32:42.039 --> 00:32:45.279
<v Speaker 4>we put them in a bucket and suppose that it happens.

594
00:32:45.319 --> 00:32:47.039
<v Speaker 4>So we get two of them one day, two of

595
00:32:47.079 --> 00:32:48.880
<v Speaker 4>them the next day, and two of them the next day.

596
00:32:49.240 --> 00:32:52.119
<v Speaker 4>So at what point does this bucket have enough data

597
00:32:52.200 --> 00:32:55.240
<v Speaker 4>points in it that we can go through and systematically

598
00:32:55.359 --> 00:32:58.039
<v Speaker 4>compare it to all of the times when this works

599
00:32:58.079 --> 00:33:02.000
<v Speaker 4>correctly that aren't in this bucket? What environment variables do

600
00:33:02.119 --> 00:33:08.480
<v Speaker 4>we think could be different between those two situations? And so, unfortunately,

601
00:33:08.559 --> 00:33:12.400
<v Speaker 4>I think sometimes we got to like wait and figure

602
00:33:12.440 --> 00:33:16.920
<v Speaker 4>out from this collection of individual instances what might be

603
00:33:17.000 --> 00:33:21.200
<v Speaker 4>different about the individual instances from the way that like

604
00:33:22.160 --> 00:33:25.480
<v Speaker 4>normal circumstances operate, we see some so there are there

605
00:33:25.599 --> 00:33:30.240
<v Speaker 4>may be some valuable transfer here between techniques that medical

606
00:33:30.359 --> 00:33:34.799
<v Speaker 4>researchers use for diagnosing and understanding rare conditions. Is that

607
00:33:35.960 --> 00:33:38.680
<v Speaker 4>you just don't have that many people who have it happen.

608
00:33:39.000 --> 00:33:43.720
<v Speaker 4>But in order to get solid research on a condition,

609
00:33:44.400 --> 00:33:46.839
<v Speaker 4>you have to sort of have a minimum sample size,

610
00:33:47.200 --> 00:33:49.160
<v Speaker 4>And so what they'll do is they'll try to create

611
00:33:49.240 --> 00:33:53.119
<v Speaker 4>a record of everybody who has this condition and hopefully

612
00:33:53.160 --> 00:33:55.720
<v Speaker 4>get the sample size up to you know, twenty fifty

613
00:33:55.799 --> 00:33:59.920
<v Speaker 4>one hundred something where they can start using some aggregate

614
00:34:00.000 --> 00:34:02.799
<v Speaker 4>and analysis techniques to figure out what the difference might be.

615
00:34:03.200 --> 00:34:08.280
<v Speaker 4>But I think sometimes with rare bugs, we, like I said,

616
00:34:08.320 --> 00:34:10.280
<v Speaker 4>it's tough, and if it's not happening all the time,

617
00:34:10.360 --> 00:34:15.159
<v Speaker 4>it can be difficult. But sometimes we're not where it's

618
00:34:15.239 --> 00:34:17.599
<v Speaker 4>tough in the first place, and we're making it tougher

619
00:34:17.679 --> 00:34:20.920
<v Speaker 4>on ourselves by not taking that systematic step. Either. We

620
00:34:21.000 --> 00:34:23.159
<v Speaker 4>don't have a record of all the times this rare

621
00:34:23.239 --> 00:34:25.480
<v Speaker 4>bug happens so that we can start to implement some

622
00:34:25.559 --> 00:34:29.519
<v Speaker 4>aggregate analysis when it's happened twenty times fifty times, one

623
00:34:29.559 --> 00:34:32.360
<v Speaker 4>hundred times, and we can tell customers in the meantime, like,

624
00:34:32.440 --> 00:34:35.159
<v Speaker 4>you know, we know this is a really thorny issue.

625
00:34:35.239 --> 00:34:37.639
<v Speaker 4>We're not really sure why it's happening. We're in the

626
00:34:37.760 --> 00:34:40.280
<v Speaker 4>process of data collection right now to see if we

627
00:34:40.360 --> 00:34:42.840
<v Speaker 4>can figure out why it's happening, and on the back

628
00:34:42.960 --> 00:34:46.280
<v Speaker 4>end be collecting that somewhere so that we know when

629
00:34:46.320 --> 00:34:50.199
<v Speaker 4>we get to some certain number that we think like

630
00:34:50.679 --> 00:34:52.639
<v Speaker 4>we can try again and try to do some aggregate

631
00:34:52.679 --> 00:34:56.159
<v Speaker 4>analysis on this. Then we'll set aside time we'll put

632
00:34:56.239 --> 00:34:59.360
<v Speaker 4>in we'll put a ticket in the system for when

633
00:35:00.079 --> 00:35:02.400
<v Speaker 4>we get twenty examples of this, we'll go back and

634
00:35:02.440 --> 00:35:04.280
<v Speaker 4>take a look at this in the aggregate as opposed

635
00:35:04.320 --> 00:35:09.280
<v Speaker 4>to each individual time it's happening, attempt to like debugget

636
00:35:09.360 --> 00:35:11.920
<v Speaker 4>based on that single instance without looking at any of

637
00:35:11.960 --> 00:35:15.440
<v Speaker 4>the instances in the past we have. This is a

638
00:35:15.480 --> 00:35:17.880
<v Speaker 4>little bit unrelated, so I promise we'll come back to

639
00:35:17.920 --> 00:35:21.280
<v Speaker 4>the actual subject of debugging. But we see a similar

640
00:35:21.400 --> 00:35:25.119
<v Speaker 4>tendency in organizational dynamics and teams on software teams, where

641
00:35:25.239 --> 00:35:28.960
<v Speaker 4>like if somebody's demonstrating a pattern of behavior of like

642
00:35:29.599 --> 00:35:33.280
<v Speaker 4>mild microaggressions or like one little bitty thing that's like

643
00:35:33.400 --> 00:35:38.119
<v Speaker 4>not really worth addressing on its own. Sometimes those situations

644
00:35:38.159 --> 00:35:41.480
<v Speaker 4>can be insidious because in any given situation, it's like

645
00:35:41.559 --> 00:35:45.519
<v Speaker 4>not worth bringing up. But over time, this person demonstrates

646
00:35:45.559 --> 00:35:49.239
<v Speaker 4>a pattern of doing this, and we don't you we

647
00:35:49.280 --> 00:35:51.760
<v Speaker 4>don't have any like aggregate strategies for saying, you know,

648
00:35:52.199 --> 00:35:55.239
<v Speaker 4>there's this teeny little thing. There are these teeny microaggressions

649
00:35:55.280 --> 00:35:57.159
<v Speaker 4>and any given one of them might be a mistake,

650
00:35:57.519 --> 00:35:59.840
<v Speaker 4>but it's happening like regularly over the course of you,

651
00:36:00.320 --> 00:36:02.239
<v Speaker 4>and so it's a pattern that we need to address.

652
00:36:02.559 --> 00:36:05.000
<v Speaker 4>I found that it can be really helpful in organizations

653
00:36:05.079 --> 00:36:09.760
<v Speaker 4>as well too. Somehow, even if we're not addressing those

654
00:36:09.840 --> 00:36:12.480
<v Speaker 4>things when they happen, keep some kind of record of them,

655
00:36:12.559 --> 00:36:14.679
<v Speaker 4>and then address the pattern when it's clear that it's

656
00:36:14.719 --> 00:36:18.480
<v Speaker 4>a pattern, because at that point it's no longer about

657
00:36:18.639 --> 00:36:21.400
<v Speaker 4>like whatever the latest incident is, which wasn't that big

658
00:36:21.440 --> 00:36:24.840
<v Speaker 4>a deal. It's about the fact that the individual incidents,

659
00:36:24.920 --> 00:36:28.639
<v Speaker 4>though not a big deal, individually aggregate to form a

660
00:36:28.760 --> 00:36:32.360
<v Speaker 4>pattern that is, you know, ever so slightly dragging on

661
00:36:32.480 --> 00:36:36.840
<v Speaker 4>our team, ever so slightly increasing our turnover, our churn

662
00:36:37.159 --> 00:36:42.039
<v Speaker 4>on who leaves the company, and it's it's a cost

663
00:36:42.719 --> 00:36:45.119
<v Speaker 4>that over time we can't afford, but it's tough to

664
00:36:45.239 --> 00:36:48.559
<v Speaker 4>address at individual instances. So I think there is there

665
00:36:48.679 --> 00:36:50.800
<v Speaker 4>is a parallel there. But I know we're not talking

666
00:36:50.800 --> 00:36:53.599
<v Speaker 4>about organizational dynamics. We're talking about bugs. So I'm happy

667
00:36:53.679 --> 00:36:55.519
<v Speaker 4>to come back to the code side of people.

668
00:36:55.360 --> 00:36:58.280
<v Speaker 5>Have bugs in their personality and they need to be fixed.

669
00:36:58.679 --> 00:37:02.639
<v Speaker 5>Oh yeah, absolutely one place where we have a solution

670
00:37:02.800 --> 00:37:02.960
<v Speaker 5>for this.

671
00:37:03.119 --> 00:37:06.119
<v Speaker 6>Right, So a clock, Your clock gets off by a

672
00:37:06.199 --> 00:37:10.239
<v Speaker 6>little bit like every moment, right, But you don't go

673
00:37:10.360 --> 00:37:13.480
<v Speaker 6>to your clock every two minutes to go fix it

674
00:37:13.639 --> 00:37:17.480
<v Speaker 6>by like the tiny milliseconds that it's off. You do

675
00:37:17.599 --> 00:37:20.320
<v Speaker 6>it like once or twice a year maybe or something

676
00:37:20.440 --> 00:37:23.039
<v Speaker 6>like that. Right, So we sort of this is the

677
00:37:23.119 --> 00:37:23.599
<v Speaker 6>same thing.

678
00:37:23.880 --> 00:37:26.920
<v Speaker 3>Right. You set up a system that.

679
00:37:27.119 --> 00:37:30.719
<v Speaker 6>You can check in or whatever it is, right like,

680
00:37:30.960 --> 00:37:33.000
<v Speaker 6>but you have to design a system around it. Like

681
00:37:33.079 --> 00:37:35.880
<v Speaker 6>it's not something that you can You can't let it

682
00:37:35.960 --> 00:37:38.920
<v Speaker 6>go because otherwise your clock doesn't work anymore.

683
00:37:39.360 --> 00:37:41.440
<v Speaker 3>But you also can't check it every moment. You have

684
00:37:41.559 --> 00:37:43.199
<v Speaker 3>to come up with some system that works for you.

685
00:37:43.960 --> 00:37:45.880
<v Speaker 3>I feel like it's kind of like the time boxing thing.

686
00:37:46.039 --> 00:37:48.760
<v Speaker 6>Like everybody that I mentor I like teach to timebox

687
00:37:49.360 --> 00:37:51.400
<v Speaker 6>and they're like, well, how long do I timebox for?

688
00:37:51.519 --> 00:37:54.519
<v Speaker 3>And I'm just like, that's actually a personal thing. You

689
00:37:54.719 --> 00:37:57.079
<v Speaker 3>just kind of say you just kind of figure it

690
00:37:57.159 --> 00:37:59.400
<v Speaker 3>out for you. Like I have my own time boxes

691
00:37:59.440 --> 00:37:59.920
<v Speaker 3>that work for me.

692
00:38:00.480 --> 00:38:02.760
<v Speaker 6>I tend to break my days down into like half

693
00:38:02.880 --> 00:38:05.440
<v Speaker 6>days more or less, just because that works really well

694
00:38:05.559 --> 00:38:08.039
<v Speaker 6>for me. Like, you know, I eat lunch, there's like

695
00:38:08.079 --> 00:38:12.239
<v Speaker 6>a natural break, and because I'm like ADHD and I'll

696
00:38:12.320 --> 00:38:16.159
<v Speaker 6>like get super hyper focused on something like that, I

697
00:38:16.280 --> 00:38:18.199
<v Speaker 6>always come up for air to half day, so I

698
00:38:18.280 --> 00:38:20.519
<v Speaker 6>can guarantee that I can at least time box for that.

699
00:38:20.760 --> 00:38:24.000
<v Speaker 3>You know, it's all sort of the same thing.

700
00:38:24.039 --> 00:38:25.800
<v Speaker 6>But my point is like you have to design the

701
00:38:25.880 --> 00:38:28.840
<v Speaker 6>system getting back to the subject or whatever, and I

702
00:38:30.199 --> 00:38:32.280
<v Speaker 6>don't feel like you're saying something different. I feel like

703
00:38:32.320 --> 00:38:34.639
<v Speaker 6>it's going to be a personal thing kind of thing here.

704
00:38:35.159 --> 00:38:38.599
<v Speaker 4>Yeah, I would say so. I think. So this conversation

705
00:38:38.840 --> 00:38:41.800
<v Speaker 4>is making me wonder whether Century and similar error logging

706
00:38:41.920 --> 00:38:45.760
<v Speaker 4>platforms have a way for you to like automatically put

707
00:38:45.840 --> 00:38:50.400
<v Speaker 4>certain types of bugs in buckets and then like alert

708
00:38:50.519 --> 00:38:52.920
<v Speaker 4>you when the bucket has a certain number of issues

709
00:38:53.000 --> 00:38:53.760
<v Speaker 4>in it or something.

710
00:38:54.480 --> 00:38:56.800
<v Speaker 3>I know that some of them let you bucket.

711
00:38:57.360 --> 00:39:01.719
<v Speaker 6>Right, So if I have like the same kind kind

712
00:39:01.760 --> 00:39:04.559
<v Speaker 6>of book, happen again, it like buckets it together. It says, hey,

713
00:39:04.599 --> 00:39:06.719
<v Speaker 6>here's an instance, here's you know, here's a list of

714
00:39:06.800 --> 00:39:08.159
<v Speaker 6>ten instances that have happened.

715
00:39:08.719 --> 00:39:09.119
<v Speaker 3>I don't know.

716
00:39:09.639 --> 00:39:11.679
<v Speaker 6>I don't know if there's an alert. I mean I

717
00:39:11.719 --> 00:39:14.199
<v Speaker 6>can make it. I've used like three or four of them,

718
00:39:14.280 --> 00:39:16.800
<v Speaker 6>and I can. I mean, they usually give you an

719
00:39:16.800 --> 00:39:19.679
<v Speaker 6>option to like give you a daily briefing or something

720
00:39:19.800 --> 00:39:19.960
<v Speaker 6>like that.

721
00:39:20.159 --> 00:39:23.519
<v Speaker 4>But right, like I know that Sentry has a button

722
00:39:23.599 --> 00:39:26.400
<v Speaker 4>that allows you to just mass ignore a certain type

723
00:39:26.400 --> 00:39:29.360
<v Speaker 4>of error. So I wonder if there's the opposite, you know, like,

724
00:39:29.480 --> 00:39:31.440
<v Speaker 4>if there are enough of these, tell me.

725
00:39:32.920 --> 00:39:35.840
<v Speaker 6>Should we should discuss mass ignoring errors? Because that's a

726
00:39:36.079 --> 00:39:40.679
<v Speaker 6>that's a ignore. Like leaving the beeping signal on all

727
00:39:40.719 --> 00:39:42.320
<v Speaker 6>the time is also a problem.

728
00:39:42.960 --> 00:39:45.920
<v Speaker 3>Right, so you just put.

729
00:39:45.840 --> 00:39:48.239
<v Speaker 4>Electrical tape over the check engine light. I don't need

730
00:39:48.280 --> 00:39:48.800
<v Speaker 4>to know about this.

731
00:39:49.679 --> 00:39:51.559
<v Speaker 3>That means when you really do have a problem, you

732
00:39:51.760 --> 00:39:52.639
<v Speaker 3>have no idea.

733
00:39:55.480 --> 00:39:58.280
<v Speaker 4>That's absolutely true. So this is something that I've run

734
00:39:58.320 --> 00:40:00.239
<v Speaker 4>into a fair amount with end to end to SUN

735
00:40:00.320 --> 00:40:03.800
<v Speaker 4>mobile applications, is like, and part of this is that

736
00:40:03.920 --> 00:40:06.199
<v Speaker 4>sometimes the end to end frameworks are like a little

737
00:40:06.280 --> 00:40:09.039
<v Speaker 4>flaky at their core. I get yet, that's absolutely true,

738
00:40:09.519 --> 00:40:12.880
<v Speaker 4>but the signal to noise ratio is like low enough

739
00:40:12.920 --> 00:40:15.719
<v Speaker 4>that sometimes developers start completely ignoring their end to end

740
00:40:15.760 --> 00:40:17.199
<v Speaker 4>test to the point that they don't even look at

741
00:40:17.239 --> 00:40:21.320
<v Speaker 4>why it's failing. And at some point the reason it's

742
00:40:21.400 --> 00:40:24.800
<v Speaker 4>failing like sneakily changes, but people don't notice because they

743
00:40:24.880 --> 00:40:26.559
<v Speaker 4>just see it fail and they're like, oh, that test

744
00:40:26.599 --> 00:40:30.280
<v Speaker 4>always fails. And then a few months later something was

745
00:40:30.360 --> 00:40:34.679
<v Speaker 4>wrong in the app for months. Oh, we didn't realize

746
00:40:34.719 --> 00:40:36.559
<v Speaker 4>this was wrong. Why didn't we realize it was wrong?

747
00:40:36.760 --> 00:40:38.960
<v Speaker 4>Or in the best case, somebody goes in and they

748
00:40:39.000 --> 00:40:40.519
<v Speaker 4>actually take a look at the end to end test

749
00:40:40.559 --> 00:40:42.920
<v Speaker 4>and they're like, wait a second, wait a second, it's

750
00:40:42.960 --> 00:40:46.039
<v Speaker 4>actually pointing out an issue. This isn't just flakiness, it's

751
00:40:46.079 --> 00:40:47.360
<v Speaker 4>like actually a problem.

752
00:40:48.760 --> 00:40:49.280
<v Speaker 3>Oh my gosh.

753
00:40:49.360 --> 00:40:52.039
<v Speaker 6>So Andrew Mason, who actually used to be on the show,

754
00:40:52.639 --> 00:40:56.679
<v Speaker 6>so I chat with him every week, and he was

755
00:40:56.760 --> 00:41:01.119
<v Speaker 6>just discussing this exact similar to the problem last week,

756
00:41:01.239 --> 00:41:04.440
<v Speaker 6>right like, and he was he was trying to deal

757
00:41:04.480 --> 00:41:07.400
<v Speaker 6>with the code base, where like it was just failing. Sorry,

758
00:41:07.519 --> 00:41:09.599
<v Speaker 6>I'm totally about to say an opinion here, so it

759
00:41:09.719 --> 00:41:12.559
<v Speaker 6>could be controversial. But he was like, well, you know

760
00:41:12.679 --> 00:41:14.800
<v Speaker 6>which test do I delete? And I was like, dude,

761
00:41:15.360 --> 00:41:17.840
<v Speaker 6>I was like, if your test suite is failing, it's

762
00:41:17.920 --> 00:41:19.559
<v Speaker 6>providing zero value right now.

763
00:41:20.159 --> 00:41:21.599
<v Speaker 3>I was like, start.

764
00:41:21.440 --> 00:41:25.519
<v Speaker 6>Commenting stuff out until it's green, because a test week

765
00:41:25.559 --> 00:41:28.320
<v Speaker 6>provides zero value until it's green. And you were talking

766
00:41:28.360 --> 00:41:30.800
<v Speaker 6>about like, I mean, I've been at places before where

767
00:41:30.840 --> 00:41:33.719
<v Speaker 6>they let let these tests go like all the time,

768
00:41:33.719 --> 00:41:36.159
<v Speaker 6>where they just rerun their test feet like four times

769
00:41:36.239 --> 00:41:39.159
<v Speaker 6>till it passes, right, But that flaky test is telling

770
00:41:39.239 --> 00:41:41.719
<v Speaker 6>you something sometimes anyway.

771
00:41:41.880 --> 00:41:43.679
<v Speaker 3>So my point is like I'm a.

772
00:41:43.679 --> 00:41:48.079
<v Speaker 6>Big believer in deleting and deleting like broken flashy lights.

773
00:41:48.639 --> 00:41:49.440
<v Speaker 3>All right, I'm done.

774
00:41:49.840 --> 00:41:54.360
<v Speaker 4>How do you feel about coming back to flaky test

775
00:41:54.440 --> 00:41:57.119
<v Speaker 4>on some kind of regular interval, similar to like coming

776
00:41:57.199 --> 00:42:00.920
<v Speaker 4>back to rare bugs on a regular interval and try

777
00:42:01.199 --> 00:42:04.599
<v Speaker 4>like time boxing, attempting to fix it.

778
00:42:05.199 --> 00:42:06.960
<v Speaker 3>I think that's the same thing.

779
00:42:07.440 --> 00:42:10.920
<v Speaker 6>But I'm not really a big believer in Okay, So

780
00:42:11.559 --> 00:42:14.400
<v Speaker 6>I worked pretty hard and self discipline for myself, right,

781
00:42:14.639 --> 00:42:18.199
<v Speaker 6>and you know I have friends and I trust their

782
00:42:18.280 --> 00:42:19.440
<v Speaker 6>self discipline to a point.

783
00:42:19.480 --> 00:42:21.280
<v Speaker 3>But as far as like trusting like a.

784
00:42:21.440 --> 00:42:25.519
<v Speaker 6>General random developer that I don't know to like come

785
00:42:25.679 --> 00:42:28.000
<v Speaker 6>back to a thing at a regular interval.

786
00:42:28.400 --> 00:42:29.880
<v Speaker 3>I have almost zero trust for that.

787
00:42:30.480 --> 00:42:33.960
<v Speaker 6>So so my answer is I just deleted instead, because

788
00:42:34.400 --> 00:42:37.320
<v Speaker 6>because I don't trust the other guy. I guess kind

789
00:42:37.320 --> 00:42:40.079
<v Speaker 6>of like kind of like lou Katese the other guy's code.

790
00:42:40.920 --> 00:42:43.360
<v Speaker 5>Oh man, it happens more as you get older.

791
00:42:44.159 --> 00:42:46.440
<v Speaker 4>Oh really, the trust goes down.

792
00:42:46.880 --> 00:42:49.840
<v Speaker 5>I used to believe in other people's code. Then I

793
00:42:49.920 --> 00:42:51.280
<v Speaker 5>started working on Brailles.

794
00:42:52.519 --> 00:42:55.679
<v Speaker 4>Oh Man. So a friend of mine, hill O Wayne.

795
00:42:56.199 --> 00:43:00.480
<v Speaker 4>He also keeps a software engineering blog, and in one

796
00:43:00.559 --> 00:43:05.639
<v Speaker 4>of his posts, he's talking about Uncle Bob and Uncle

797
00:43:05.719 --> 00:43:16.440
<v Speaker 4>Bob's approach to software resilience, and he in talking about

798
00:43:16.480 --> 00:43:20.519
<v Speaker 4>that approach, he points out that parts of the approach

799
00:43:21.119 --> 00:43:27.559
<v Speaker 4>rely almost entirely on telling developers to be more disciplined,

800
00:43:28.320 --> 00:43:33.719
<v Speaker 4>and that you can't that doesn't like discipline as the

801
00:43:33.840 --> 00:43:37.440
<v Speaker 4>solution for making something not happen is never going to

802
00:43:37.480 --> 00:43:40.599
<v Speaker 4>make that thing not happen because you can't just get

803
00:43:40.840 --> 00:43:44.719
<v Speaker 4>an entire population to all exercise discipline to the threshold

804
00:43:44.760 --> 00:43:47.559
<v Speaker 4>that you would like them to coach. Your bugs, guys,

805
00:43:48.760 --> 00:43:50.760
<v Speaker 4>the better programmers, what is your problem?

806
00:43:50.880 --> 00:43:51.880
<v Speaker 3>Then you don't have to do bug.

807
00:43:53.320 --> 00:43:55.880
<v Speaker 5>So Uncle Bob was saying we should be more disciplined,

808
00:43:56.039 --> 00:43:57.519
<v Speaker 5>and you're saying that's not possible.

809
00:43:58.039 --> 00:44:02.400
<v Speaker 4>Well, what I'm saying is that you're uh, not that

810
00:44:02.519 --> 00:44:07.960
<v Speaker 4>it's not possible to be more disciplined, but rather that

811
00:44:08.199 --> 00:44:13.199
<v Speaker 4>it's not possible to command a bunch of people to

812
00:44:13.280 --> 00:44:16.559
<v Speaker 4>be disciplined and then guarantee that that's going to work.

813
00:44:17.360 --> 00:44:20.159
<v Speaker 3>Right. Can't use it to validate your personal problems.

814
00:44:20.639 --> 00:44:24.360
<v Speaker 5>Unfortunately, that sounds that sounds like do you want to share?

815
00:44:24.519 --> 00:44:24.719
<v Speaker 3>John?

816
00:44:25.039 --> 00:44:25.079
<v Speaker 4>No.

817
00:44:25.320 --> 00:44:28.440
<v Speaker 3>I actually was just saying that, like, you can't.

818
00:44:28.519 --> 00:44:30.679
<v Speaker 6>You can't use the excuse of like, oh I can't

819
00:44:30.719 --> 00:44:33.239
<v Speaker 6>be more disciplined because they said it on review Rooks.

820
00:44:35.400 --> 00:44:39.239
<v Speaker 4>Oh man? Oh if people always take everything that we

821
00:44:39.360 --> 00:44:41.519
<v Speaker 4>say on here as ironclad advice, And there are a

822
00:44:41.519 --> 00:44:43.719
<v Speaker 4>few statements from earlier that I need to protect.

823
00:44:44.719 --> 00:44:48.159
<v Speaker 5>But that's a sign of a good podcast that you

824
00:44:48.199 --> 00:44:49.119
<v Speaker 5>wish you'd never done it?

825
00:44:49.639 --> 00:44:50.239
<v Speaker 4>Oh man?

826
00:44:50.440 --> 00:44:50.599
<v Speaker 3>Is it?

827
00:44:52.840 --> 00:44:55.559
<v Speaker 4>I will say that for myself. Part of the reason

828
00:44:55.639 --> 00:44:58.320
<v Speaker 4>I use automated testing is precisely because I do not

829
00:44:58.480 --> 00:45:01.280
<v Speaker 4>trust my own discipline, because you know, there are certain

830
00:45:01.320 --> 00:45:04.320
<v Speaker 4>circumstances where now, let me go ahead and say that

831
00:45:04.599 --> 00:45:08.320
<v Speaker 4>I think unit TDD is very valuable in certain circumstances.

832
00:45:08.599 --> 00:45:11.719
<v Speaker 4>I also don't see UNIT TDD as a panacea for

833
00:45:11.800 --> 00:45:14.760
<v Speaker 4>software verification. I think there are other methods that we

834
00:45:14.840 --> 00:45:17.079
<v Speaker 4>can use in addition, and I happen to also think

835
00:45:17.400 --> 00:45:19.719
<v Speaker 4>some of those other methods are better suited to certain

836
00:45:19.760 --> 00:45:25.480
<v Speaker 4>problems that UNIT TDD doesn't address. However, However, one nice

837
00:45:25.559 --> 00:45:28.159
<v Speaker 4>thing about unit test driven development is that if I

838
00:45:28.239 --> 00:45:31.440
<v Speaker 4>write the test first, then I code for the API

839
00:45:31.679 --> 00:45:34.320
<v Speaker 4>that I want as a reader of the code, which

840
00:45:34.400 --> 00:45:37.039
<v Speaker 4>is good because code gets read many multiples of the

841
00:45:37.119 --> 00:45:39.679
<v Speaker 4>number of times it gets written, and so I can

842
00:45:39.760 --> 00:45:42.880
<v Speaker 4>be lazy at the point where I'm writing the test

843
00:45:43.000 --> 00:45:46.320
<v Speaker 4>and write for the API that I want. Then when

844
00:45:46.360 --> 00:45:49.400
<v Speaker 4>I'm writing the actual code, I'm held accountable for an

845
00:45:49.400 --> 00:45:53.039
<v Speaker 4>API that's relatively easy to read, as opposed to starting

846
00:45:53.119 --> 00:45:56.039
<v Speaker 4>with an API that's relatively easy to write, which ends

847
00:45:56.079 --> 00:45:59.119
<v Speaker 4>up being harder to read, which causes more strife over

848
00:45:59.199 --> 00:46:01.480
<v Speaker 4>the course of the life of the code base. And

849
00:46:01.800 --> 00:46:06.320
<v Speaker 4>that works precisely because I do not trust myself to

850
00:46:06.440 --> 00:46:08.400
<v Speaker 4>go the extra mile and make the easy to read

851
00:46:08.480 --> 00:46:11.519
<v Speaker 4>API without the accountability step of the test in the front,

852
00:46:11.960 --> 00:46:13.920
<v Speaker 4>and I imagine that my code would be harder to

853
00:46:14.000 --> 00:46:17.159
<v Speaker 4>read if I weren't using that where I can to

854
00:46:17.360 --> 00:46:20.679
<v Speaker 4>make and to hold myself accountable to that API. So

855
00:46:21.880 --> 00:46:25.199
<v Speaker 4>it's a perfect example of using a system precisely because

856
00:46:26.639 --> 00:46:30.639
<v Speaker 4>I don't trust my own discipline. I can't. I cannot

857
00:46:30.719 --> 00:46:34.599
<v Speaker 4>rely on discipline, even in the one person system of myself,

858
00:46:35.159 --> 00:46:37.480
<v Speaker 4>to make things work the way that I ultimately, like

859
00:46:37.679 --> 00:46:40.320
<v Speaker 4>theoretically want them to work, because in the short term

860
00:46:40.400 --> 00:46:41.280
<v Speaker 4>it's harder for me.

861
00:46:42.320 --> 00:46:42.519
<v Speaker 3>Yeah.

862
00:46:42.599 --> 00:46:44.679
<v Speaker 1>Well, the other reason that I do a lot of

863
00:46:44.760 --> 00:46:46.800
<v Speaker 1>that is just that, I mean, going back to the

864
00:46:46.880 --> 00:46:49.920
<v Speaker 1>assumptions on how things work, I'm not going to remember

865
00:46:49.960 --> 00:46:52.599
<v Speaker 1>that next week. I mean honestly, people are like, well

866
00:46:52.599 --> 00:46:54.039
<v Speaker 1>if I come back to it in six months, I'm like,

867
00:46:54.079 --> 00:46:56.400
<v Speaker 1>if I come back to it in six days, right,

868
00:46:57.119 --> 00:46:59.840
<v Speaker 1>And so, you know, by having some of these disciplines

869
00:47:00.639 --> 00:47:08.360
<v Speaker 1>it you know, just speaking to the larger idea here, right, Yeah,

870
00:47:08.719 --> 00:47:11.400
<v Speaker 1>if I can encode my assumptions, if I can make

871
00:47:11.480 --> 00:47:13.519
<v Speaker 1>sure that the things that I care about are things

872
00:47:13.559 --> 00:47:18.000
<v Speaker 1>that I am checking on, that's where it makes sense.

873
00:47:18.719 --> 00:47:19.119
<v Speaker 2>Mmm.

874
00:47:19.639 --> 00:47:21.719
<v Speaker 4>What's the adage? The more you cuss about a line

875
00:47:21.760 --> 00:47:23.960
<v Speaker 4>of code and how inscrutable it is, the more likely

876
00:47:24.039 --> 00:47:25.239
<v Speaker 4>it becomes that you wrote it.

877
00:47:25.920 --> 00:47:32.199
<v Speaker 2>That is so true, get blamed. Ah crap, yep, yep.

878
00:47:34.719 --> 00:47:37.079
<v Speaker 1>And then the other half of the time it's well,

879
00:47:37.400 --> 00:47:39.639
<v Speaker 1>look John did it. And then you go and you

880
00:47:39.760 --> 00:47:43.199
<v Speaker 1>look at that commit and he ran the Linter and

881
00:47:43.320 --> 00:47:45.719
<v Speaker 1>it changed the indentation. I actually put the code on

882
00:47:45.800 --> 00:47:46.199
<v Speaker 1>that line.

883
00:47:46.320 --> 00:47:51.920
<v Speaker 5>Anyway, I've got a theory that Linter's and making thugs

884
00:47:52.039 --> 00:47:55.800
<v Speaker 5>harder to find. Oh, because back in the day it

885
00:47:55.920 --> 00:47:58.679
<v Speaker 5>used to be able to side channel do a side

886
00:47:58.760 --> 00:48:01.800
<v Speaker 5>channel attack on nice cote basis where if you found

887
00:48:01.960 --> 00:48:05.559
<v Speaker 5>like different indentation and non standard formatting and stuff. I

888
00:48:05.719 --> 00:48:07.639
<v Speaker 5>just kind of zero into that. You go, ah, this

889
00:48:07.760 --> 00:48:09.719
<v Speaker 5>person can't be bothered to put a space before the

890
00:48:09.880 --> 00:48:13.559
<v Speaker 5>curly brakes, so the chances are they're a total loser.

891
00:48:14.239 --> 00:48:17.000
<v Speaker 5>But now, and this is where the bug is, I'm like,

892
00:48:17.039 --> 00:48:18.599
<v Speaker 5>you know, if it looks if it looks all over

893
00:48:18.639 --> 00:48:21.039
<v Speaker 5>the place, then I'm like, ah, there'll be bugs here.

894
00:48:21.320 --> 00:48:23.760
<v Speaker 5>And I just found this was really helpful for assessing

895
00:48:23.840 --> 00:48:27.920
<v Speaker 5>code qualities. Can they can be bothered to indent properly,

896
00:48:28.480 --> 00:48:31.079
<v Speaker 5>But now with Linter's and the Rubo cop and everything,

897
00:48:31.480 --> 00:48:34.920
<v Speaker 5>then everyone's code looks the same, so you don't have

898
00:48:35.199 --> 00:48:38.960
<v Speaker 5>that kind of that meta attack, that side channel attack

899
00:48:39.440 --> 00:48:42.239
<v Speaker 5>to spot the dodgy bits of a new code base.

900
00:48:42.639 --> 00:48:44.880
<v Speaker 5>Am I am I am I am? I off on

901
00:48:44.960 --> 00:48:45.360
<v Speaker 5>one there?

902
00:48:45.519 --> 00:48:47.519
<v Speaker 3>Or is this a real thing? Now? You have to

903
00:48:47.639 --> 00:48:50.000
<v Speaker 3>read the code during code reviews of what you're saying.

904
00:48:51.960 --> 00:48:54.960
<v Speaker 4>So your linter is eliminating some of your priors for

905
00:48:55.039 --> 00:48:56.800
<v Speaker 4>where your issues and the code might be.

906
00:48:57.519 --> 00:49:01.719
<v Speaker 5>I think I think the LINTA is solving the easy bugs,

907
00:49:02.079 --> 00:49:05.440
<v Speaker 5>like you've misspelled faarable name and yeah, you know you've

908
00:49:05.480 --> 00:49:08.039
<v Speaker 5>got kind of riva cops picking stuff up, like this

909
00:49:08.280 --> 00:49:11.199
<v Speaker 5>variable ward is never ever used and that's it. But

910
00:49:11.400 --> 00:49:15.039
<v Speaker 5>by removing those low hanging bugs, what you have instead

911
00:49:15.239 --> 00:49:19.719
<v Speaker 5>is a kind of faceless wall of perfectly statically analyzed code,

912
00:49:20.159 --> 00:49:22.039
<v Speaker 5>and the kind of it just seems like bugs are

913
00:49:22.039 --> 00:49:22.599
<v Speaker 5>getting harder.

914
00:49:23.119 --> 00:49:23.360
<v Speaker 2>That's it.

915
00:49:23.519 --> 00:49:25.519
<v Speaker 5>Bugs are getting harder, and lintus of the blame.

916
00:49:26.119 --> 00:49:27.800
<v Speaker 3>That's exactly what we wanted it to do.

917
00:49:28.280 --> 00:49:30.519
<v Speaker 6>That we wanted it to take away all the easy

918
00:49:30.559 --> 00:49:32.920
<v Speaker 6>bugs that we can work on the hard one. Now

919
00:49:33.000 --> 00:49:35.480
<v Speaker 6>you're complaining that they're all hard. There's no easy ones

920
00:49:35.519 --> 00:49:40.199
<v Speaker 6>for you to point out. Some people just can't be satisfied. Okay,

921
00:49:40.360 --> 00:49:43.719
<v Speaker 6>So getting back on topic. I actually wanted to revisit

922
00:49:43.800 --> 00:49:46.719
<v Speaker 6>a thing, and I'm not I swear I'm not trying

923
00:49:46.760 --> 00:49:47.760
<v Speaker 6>to set you up for failure.

924
00:49:48.280 --> 00:49:50.599
<v Speaker 3>I just felt like we should probably address this. But

925
00:49:50.719 --> 00:49:53.760
<v Speaker 3>you talked. You talked about your three strategies earlier.

926
00:49:54.079 --> 00:49:56.599
<v Speaker 6>And how the sort of default one for us is

927
00:49:56.679 --> 00:49:59.679
<v Speaker 6>this standard strategy, try out the place that I think

928
00:50:00.119 --> 00:50:02.320
<v Speaker 6>the bug think, go to the next most likely place,

929
00:50:02.400 --> 00:50:04.199
<v Speaker 6>and so on, right until I eventually find it.

930
00:50:04.800 --> 00:50:06.320
<v Speaker 3>At some point you sort of have.

931
00:50:06.440 --> 00:50:09.079
<v Speaker 6>To like bail out of that and be like, I'm

932
00:50:09.119 --> 00:50:12.320
<v Speaker 6>not getting anywhere, I should try a different strategy. Do

933
00:50:12.440 --> 00:50:15.599
<v Speaker 6>you have a sort of rule of thumb, even if

934
00:50:15.599 --> 00:50:18.239
<v Speaker 6>it's not perfect for like when you start to bail out,

935
00:50:18.480 --> 00:50:20.119
<v Speaker 6>I don't think that we actually called that out.

936
00:50:20.559 --> 00:50:24.840
<v Speaker 4>Yeah, totally. When I am trying the same thing multiple

937
00:50:24.960 --> 00:50:27.880
<v Speaker 4>times even though I already saw it didn't work, is

938
00:50:28.039 --> 00:50:30.920
<v Speaker 4>usually when I like, if I haven't done it by then,

939
00:50:31.039 --> 00:50:31.840
<v Speaker 4>that's the time.

940
00:50:32.440 --> 00:50:34.519
<v Speaker 3>She wait until that point of anger for.

941
00:50:34.639 --> 00:50:39.519
<v Speaker 4>Me, exactly when you've got like the orange face emoji

942
00:50:39.679 --> 00:50:40.719
<v Speaker 4>is your actual face?

943
00:50:43.800 --> 00:50:44.239
<v Speaker 3>That's fair?

944
00:50:46.559 --> 00:50:48.400
<v Speaker 4>When do you usually bail out? How do you know

945
00:50:48.440 --> 00:50:49.199
<v Speaker 4>when to bail out?

946
00:50:49.960 --> 00:50:54.000
<v Speaker 3>I don't, but I'm I'm big into timeboxing.

947
00:50:54.159 --> 00:50:57.920
<v Speaker 6>So I'm usually like, you know, all right, well I'll

948
00:50:58.000 --> 00:51:00.480
<v Speaker 6>let myself If it's something that I start out in

949
00:51:00.559 --> 00:51:04.760
<v Speaker 6>the first place saying I literally have no sense of

950
00:51:04.800 --> 00:51:07.360
<v Speaker 6>where this thing is, right, then I'm just like, well,

951
00:51:07.360 --> 00:51:12.039
<v Speaker 6>I'll give myself like thirty minutes maybe to like Sometimes

952
00:51:12.079 --> 00:51:13.840
<v Speaker 6>I'll be like, I'll give myself like five or ten

953
00:51:13.920 --> 00:51:15.800
<v Speaker 6>minutes right to like play guests and check, and then

954
00:51:15.800 --> 00:51:19.679
<v Speaker 6>I like jump into like something else. But if it's

955
00:51:19.719 --> 00:51:23.440
<v Speaker 6>something that like I feel like usually that process happens

956
00:51:23.480 --> 00:51:25.960
<v Speaker 6>for me when I think I know where something is

957
00:51:26.679 --> 00:51:29.480
<v Speaker 6>and then I start down the rabbit hole like with

958
00:51:29.880 --> 00:51:32.679
<v Speaker 6>high confidence that I know exactly where this problem is,

959
00:51:32.840 --> 00:51:34.960
<v Speaker 6>and then I just keep discovering that I don't know

960
00:51:34.960 --> 00:51:35.840
<v Speaker 6>where this problem is.

961
00:51:36.360 --> 00:51:37.719
<v Speaker 3>In that case, it usually.

962
00:51:37.519 --> 00:51:41.280
<v Speaker 6>Happens that, you know, I either need to like get

963
00:51:41.400 --> 00:51:43.559
<v Speaker 6>up for a bio break or like to go eat

964
00:51:43.679 --> 00:51:45.639
<v Speaker 6>or something, and then I'm like, huh, I've been doing

965
00:51:45.679 --> 00:51:46.400
<v Speaker 6>this for a long time.

966
00:51:46.440 --> 00:51:49.880
<v Speaker 3>I should probably like stop. That's yep.

967
00:51:50.000 --> 00:51:52.760
<v Speaker 4>Yeah, I run into similar And another thing that tends

968
00:51:52.840 --> 00:51:57.039
<v Speaker 4>to happen to me is that I will be just

969
00:51:57.199 --> 00:52:01.159
<v Speaker 4>banging my head against a problem with no luck for

970
00:52:01.679 --> 00:52:06.719
<v Speaker 4>some extended period of time. And then convince myself somehow

971
00:52:06.920 --> 00:52:09.800
<v Speaker 4>to put it down and walk away. And in the

972
00:52:09.880 --> 00:52:13.400
<v Speaker 4>time when I've walked away, it's like I guess on

973
00:52:13.519 --> 00:52:16.440
<v Speaker 4>a background process somewhere, and then it occurs to me, Oh,

974
00:52:16.480 --> 00:52:19.360
<v Speaker 4>I haven't tried whatever this other thing. Maybe I should

975
00:52:19.400 --> 00:52:22.679
<v Speaker 4>do that instead. And it happens so frequently that now

976
00:52:22.760 --> 00:52:24.960
<v Speaker 4>I get into these mental battles with myself where I

977
00:52:25.000 --> 00:52:27.000
<v Speaker 4>can't figure something out and I want to keep working

978
00:52:27.079 --> 00:52:30.239
<v Speaker 4>on it because like, the more it doesn't work, the

979
00:52:30.320 --> 00:52:33.199
<v Speaker 4>stronger my resolve grows to get it to work. And

980
00:52:33.320 --> 00:52:36.840
<v Speaker 4>then I have to convince myself to walk away because

981
00:52:37.239 --> 00:52:41.039
<v Speaker 4>for some reason, the more things don't work, the more

982
00:52:41.880 --> 00:52:44.519
<v Speaker 4>determined I become that the next thing is going to work,

983
00:52:44.920 --> 00:52:48.639
<v Speaker 4>which doesn't match up with the data at all. But

984
00:52:48.800 --> 00:52:50.480
<v Speaker 4>I've gotten better about it. But it used to be

985
00:52:50.559 --> 00:52:51.199
<v Speaker 4>a real problem.

986
00:52:51.440 --> 00:52:53.119
<v Speaker 5>What about caffeine and alcohol?

987
00:52:53.639 --> 00:52:58.119
<v Speaker 4>Oh man, So I do like my coffee in the mornings.

988
00:52:58.480 --> 00:53:00.599
<v Speaker 4>I don't know if it makes me a better programmer.

989
00:53:01.559 --> 00:53:05.440
<v Speaker 4>I do. I have noticed that if I if I

990
00:53:05.719 --> 00:53:09.119
<v Speaker 4>try to like mess with the system after about five

991
00:53:09.320 --> 00:53:12.960
<v Speaker 4>thirty PM, I'm probably just gonna end up breaking it

992
00:53:13.079 --> 00:53:15.039
<v Speaker 4>in some kind of way where I have to come

993
00:53:15.119 --> 00:53:18.360
<v Speaker 4>back in the morning and start from like behind where

994
00:53:18.360 --> 00:53:20.559
<v Speaker 4>I would have started if I just stopped at five thirty,

995
00:53:20.920 --> 00:53:23.599
<v Speaker 4>because I have to fix whatever I broke after five thirty.

996
00:53:24.039 --> 00:53:25.800
<v Speaker 4>Like the best thing that's going to happen if I

997
00:53:25.880 --> 00:53:28.679
<v Speaker 4>commit after five thirty is I'm going to have the

998
00:53:28.760 --> 00:53:32.199
<v Speaker 4>system back at where it was when I started working,

999
00:53:32.679 --> 00:53:33.199
<v Speaker 4>which is an.

1000
00:53:33.159 --> 00:53:38.280
<v Speaker 5>Issue I find. I sometimes I need both caffeine and alcohol.

1001
00:53:38.719 --> 00:53:38.880
<v Speaker 1>MM.

1002
00:53:40.400 --> 00:53:42.920
<v Speaker 5>The caffeine to motivate you to find a bug, because

1003
00:53:42.920 --> 00:53:45.000
<v Speaker 5>it's always, like, you know, the big ones, always the

1004
00:53:45.039 --> 00:53:47.639
<v Speaker 5>ones you don't want to look at right. So you

1005
00:53:47.719 --> 00:53:49.920
<v Speaker 5>get the caffeine to breave you up, and then eventually

1006
00:53:50.000 --> 00:53:53.480
<v Speaker 5>you reach the point of failure where you can't find

1007
00:53:53.519 --> 00:53:56.880
<v Speaker 5>the bug, and then the alcohol lowers your inhibitions and

1008
00:53:57.000 --> 00:53:58.920
<v Speaker 5>you start just trying crazier stuff.

1009
00:54:02.159 --> 00:54:05.519
<v Speaker 4>I like that idea as an inhibition inhibitor.

1010
00:54:05.679 --> 00:54:07.039
<v Speaker 2>I mean interesting.

1011
00:54:07.599 --> 00:54:10.639
<v Speaker 4>I wonder that's how it gets depicted in pop culture

1012
00:54:10.679 --> 00:54:11.159
<v Speaker 4>a lot too.

1013
00:54:11.400 --> 00:54:15.480
<v Speaker 5>Right, I was reading about these brain studies where people

1014
00:54:15.639 --> 00:54:18.559
<v Speaker 5>can't see stuff and they can spot spelling errors easier

1015
00:54:18.599 --> 00:54:21.840
<v Speaker 5>when they're tired or they kind of impinge their brain

1016
00:54:21.960 --> 00:54:24.440
<v Speaker 5>and suddenly they can kind of spot like the word

1017
00:54:24.559 --> 00:54:27.639
<v Speaker 5>the appearing twice in the sentence more easier. You had

1018
00:54:27.760 --> 00:54:28.480
<v Speaker 5>that kind of stuff.

1019
00:54:28.920 --> 00:54:31.159
<v Speaker 4>I haven't heard about it, but I believe you this

1020
00:54:31.360 --> 00:54:32.320
<v Speaker 4>is a okay.

1021
00:54:32.760 --> 00:54:35.199
<v Speaker 5>I'm sure this isn't something I've made up, But they

1022
00:54:35.320 --> 00:54:37.480
<v Speaker 5>kind of do something people's brains, either they make them

1023
00:54:37.559 --> 00:54:41.599
<v Speaker 5>very tired or they give them something, and then spotting

1024
00:54:42.400 --> 00:54:46.760
<v Speaker 5>spotting single characters spelling mistakes is easier because their brain

1025
00:54:46.920 --> 00:54:50.199
<v Speaker 5>is no longer functioning on that higher level a kind

1026
00:54:50.239 --> 00:54:52.800
<v Speaker 5>of reading. It's no longer kind of speed ring. It's

1027
00:54:52.840 --> 00:54:54.239
<v Speaker 5>kind of doing one step at a time, and then

1028
00:54:54.480 --> 00:54:58.480
<v Speaker 5>certain activities become easier. So this is an idea. I

1029
00:54:58.599 --> 00:55:00.400
<v Speaker 5>really take the heart in my foll where I am

1030
00:55:00.840 --> 00:55:03.880
<v Speaker 5>banging the head against a bull Doug hunting binges.

1031
00:55:06.280 --> 00:55:08.280
<v Speaker 4>I wonder if that speaks as well. In part of

1032
00:55:08.320 --> 00:55:10.400
<v Speaker 4>why pair programming works is that you can have one

1033
00:55:10.440 --> 00:55:14.320
<v Speaker 4>person focused on the overall strategy and code flow, and

1034
00:55:14.400 --> 00:55:17.039
<v Speaker 4>then the other person's focused on like, is this word

1035
00:55:17.119 --> 00:55:19.920
<v Speaker 4>in there twice? Does this match the API as it

1036
00:55:19.960 --> 00:55:23.280
<v Speaker 4>currently is? Are we using this variable? You could sort

1037
00:55:23.280 --> 00:55:27.159
<v Speaker 4>of employ two different levels of thought at the same time.

1038
00:55:27.239 --> 00:55:29.480
<v Speaker 6>That way, I don't I don't have an answer one

1039
00:55:29.480 --> 00:55:30.960
<v Speaker 6>way or the other. I was just going to say

1040
00:55:31.000 --> 00:55:33.280
<v Speaker 6>the way that I always thought that code programming just

1041
00:55:33.400 --> 00:55:36.840
<v Speaker 6>worked is you had somebody writing and then somebody reading it,

1042
00:55:37.400 --> 00:55:39.519
<v Speaker 6>and the person that reading it was like, what the

1043
00:55:39.599 --> 00:55:43.000
<v Speaker 6>heck is am I reading? And I always felt like

1044
00:55:43.079 --> 00:55:45.239
<v Speaker 6>that that sort of was how I saw it working.

1045
00:55:45.360 --> 00:55:47.320
<v Speaker 6>But I'm sure there's many things at play.

1046
00:55:48.199 --> 00:55:51.079
<v Speaker 3>It just works. I just trust it. So I did

1047
00:55:51.159 --> 00:55:51.679
<v Speaker 3>have a question.

1048
00:55:52.360 --> 00:55:54.360
<v Speaker 6>I think this is probably my last one for the day,

1049
00:55:54.920 --> 00:55:58.519
<v Speaker 6>but so this is kind of you've kind of touched

1050
00:55:58.559 --> 00:56:01.760
<v Speaker 6>on this before. You said that you're sort of interested

1051
00:56:02.039 --> 00:56:06.880
<v Speaker 6>in creating a language around debugging pedagogy, as you said earlier,

1052
00:56:07.480 --> 00:56:10.679
<v Speaker 6>things like that, it seems like you're sort of interested

1053
00:56:10.760 --> 00:56:15.159
<v Speaker 6>in this space there, I think. I mean, I take

1054
00:56:15.199 --> 00:56:17.400
<v Speaker 6>your point, like I get it, Like you're right, Like

1055
00:56:17.679 --> 00:56:20.880
<v Speaker 6>I literally have no words to describe my process, Like

1056
00:56:21.360 --> 00:56:24.519
<v Speaker 6>today I have some new words and some new systems,

1057
00:56:24.599 --> 00:56:27.719
<v Speaker 6>and that's really cool. Are there things that are like

1058
00:56:27.880 --> 00:56:30.559
<v Speaker 6>missing from here? Like are there things that we need

1059
00:56:30.679 --> 00:56:33.159
<v Speaker 6>to do to make this work? I was thinking as

1060
00:56:33.199 --> 00:56:35.480
<v Speaker 6>you went along that this seems like a societal shift

1061
00:56:35.559 --> 00:56:39.119
<v Speaker 6>you mentioned earlier. Actually I might be answering my first

1062
00:56:39.199 --> 00:56:40.360
<v Speaker 6>question and opening a new one.

1063
00:56:40.880 --> 00:56:41.880
<v Speaker 3>So you said earlier.

1064
00:56:42.239 --> 00:56:47.760
<v Speaker 6>Hey, we actually like basically reward people that don't debug well,

1065
00:56:48.360 --> 00:56:52.280
<v Speaker 6>and we're like not rewarding people that are basically by

1066
00:56:53.039 --> 00:56:55.199
<v Speaker 6>just rewarding people that are in bill mode all the time.

1067
00:56:55.719 --> 00:56:59.159
<v Speaker 6>So are there like problems across the board that we

1068
00:56:59.199 --> 00:57:02.000
<v Speaker 6>should be addressed saying how do we get to a

1069
00:57:02.079 --> 00:57:02.679
<v Speaker 6>better place?

1070
00:57:03.400 --> 00:57:04.599
<v Speaker 3>Is this is a good question?

1071
00:57:05.440 --> 00:57:09.039
<v Speaker 4>It is a good question. I think that there are

1072
00:57:09.039 --> 00:57:11.880
<v Speaker 4>a couple of different pieces to it, and one of

1073
00:57:11.920 --> 00:57:14.559
<v Speaker 4>them might be about the incentive structure that we use

1074
00:57:14.679 --> 00:57:19.199
<v Speaker 4>for measuring our I don't know, I value is the word.

1075
00:57:19.400 --> 00:57:23.599
<v Speaker 4>Are measuring our work as programmers or maybe as anyone

1076
00:57:24.400 --> 00:57:27.760
<v Speaker 4>and finding ways to model that so that it doesn't

1077
00:57:27.840 --> 00:57:30.480
<v Speaker 4>necessarily feel like a waste of time. And there's a

1078
00:57:30.480 --> 00:57:34.039
<v Speaker 4>psychological component to that, and there's an actual organizational incentive

1079
00:57:34.079 --> 00:57:36.719
<v Speaker 4>component to that. And then the other part would be

1080
00:57:37.480 --> 00:57:41.280
<v Speaker 4>learning more about bugs. So I'll address both of those,

1081
00:57:41.360 --> 00:57:44.480
<v Speaker 4>the first one being the organizational incentive part. How do

1082
00:57:44.559 --> 00:57:50.639
<v Speaker 4>we go about, you know, providing accolades and career oriented

1083
00:57:50.760 --> 00:57:54.920
<v Speaker 4>rewards to someone who is able to figure out and

1084
00:57:55.079 --> 00:57:59.559
<v Speaker 4>resolve this like thorny issue that nobody else has managed

1085
00:57:59.559 --> 00:58:01.800
<v Speaker 4>to figure or that has existed for a long time.

1086
00:58:02.280 --> 00:58:06.239
<v Speaker 4>How do we promote that to the level of like

1087
00:58:06.599 --> 00:58:11.440
<v Speaker 4>getting this feature out on time, because in essence they

1088
00:58:11.599 --> 00:58:17.079
<v Speaker 4>both they they do the same thing. The for the

1089
00:58:17.239 --> 00:58:19.760
<v Speaker 4>goals of the software, we want working software, which means

1090
00:58:19.800 --> 00:58:22.199
<v Speaker 4>the feature has to be there. But it also means

1091
00:58:22.199 --> 00:58:25.760
<v Speaker 4>that the feature has to be working, and we want

1092
00:58:25.840 --> 00:58:29.920
<v Speaker 4>to make sure that we are recognizing and rewarding both

1093
00:58:29.960 --> 00:58:34.199
<v Speaker 4>of those things. And maybe that's at the organizational incentive level.

1094
00:58:34.239 --> 00:58:37.119
<v Speaker 4>It's something for engineering managers and directors of engineering to

1095
00:58:37.159 --> 00:58:41.320
<v Speaker 4>think about on the psychological level. So I'm a big

1096
00:58:41.480 --> 00:58:45.559
<v Speaker 4>fan of and this is my mom. Growing up. My

1097
00:58:45.679 --> 00:58:48.559
<v Speaker 4>mom really loved mystery books and she kind of passed

1098
00:58:48.599 --> 00:58:50.920
<v Speaker 4>that on to me. She even wrote some mystery novels.

1099
00:58:50.960 --> 00:58:54.400
<v Speaker 4>She's very, very into the mystery. And I had various

1100
00:58:54.480 --> 00:58:56.199
<v Speaker 4>plans for what I wanted to be when I grew up,

1101
00:58:56.239 --> 00:58:59.079
<v Speaker 4>A detective, a spy, various types of things like that.

1102
00:59:00.280 --> 00:59:03.360
<v Speaker 4>Those I really did. It's a whole story. I'm not

1103
00:59:03.559 --> 00:59:06.360
<v Speaker 4>a spy. I already know somebody was about to ask

1104
00:59:06.440 --> 00:59:08.159
<v Speaker 4>me that, So no, I'm not.

1105
00:59:08.360 --> 00:59:08.800
<v Speaker 3>Things like that.

1106
00:59:09.000 --> 00:59:10.639
<v Speaker 2>That's exactly what a spy would say.

1107
00:59:11.239 --> 00:59:13.800
<v Speaker 4>That, That's immediately what people say when I tell them

1108
00:59:13.800 --> 00:59:17.199
<v Speaker 4>I'm not a spy. I'll let you come to your

1109
00:59:17.199 --> 00:59:20.079
<v Speaker 4>own conclusions about whether I'm a spy or not. But

1110
00:59:21.480 --> 00:59:25.079
<v Speaker 4>yeah so. But but one of the things that has

1111
00:59:25.159 --> 00:59:30.440
<v Speaker 4>kind of helped me psychologically make peace with long and

1112
00:59:30.559 --> 00:59:33.960
<v Speaker 4>onerous debugging processes is to imagine that I'm a detective

1113
00:59:34.400 --> 00:59:38.320
<v Speaker 4>in those scenarios, and this is a case, and you

1114
00:59:38.440 --> 00:59:42.039
<v Speaker 4>know which which cases to Detectives get rewarded for solving

1115
00:59:42.360 --> 00:59:45.800
<v Speaker 4>the really hard to crack cases. So regardless of whether

1116
00:59:45.880 --> 00:59:48.559
<v Speaker 4>or not there's any actual organizational incentive for me to

1117
00:59:48.679 --> 00:59:51.159
<v Speaker 4>go after this bug, I get to depict I get

1118
00:59:51.239 --> 00:59:54.239
<v Speaker 4>to picture myself as like detective Chloe Decker or whoever,

1119
00:59:55.239 --> 00:59:59.840
<v Speaker 4>and think of this as solving a case, which is

1120
01:00:00.000 --> 01:00:03.480
<v Speaker 4>this is helpful for me as an analogy that makes

1121
01:00:03.559 --> 01:00:07.000
<v Speaker 4>me feel like, you know, I'm getting something valuable done,

1122
01:00:07.039 --> 01:00:11.039
<v Speaker 4>I'm getting something cool done. It's not this isn't this

1123
01:00:11.239 --> 01:00:14.639
<v Speaker 4>isn't like a yak shaving type of task where I,

1124
01:00:14.920 --> 01:00:16.679
<v Speaker 4>you know, it just has to get done and that's

1125
01:00:16.719 --> 01:00:18.840
<v Speaker 4>the only reason that we're doing it. There's something for

1126
01:00:18.960 --> 01:00:22.400
<v Speaker 4>me to learn here, there's something there's a skill for

1127
01:00:22.519 --> 01:00:24.199
<v Speaker 4>me to develop here. I'm going to be a better

1128
01:00:24.320 --> 01:00:27.559
<v Speaker 4>programmer at the end. Of this because I've resolved this bug.

1129
01:00:27.719 --> 01:00:31.280
<v Speaker 4>So that's the organizational incentive and psychological side of it,

1130
01:00:32.000 --> 01:00:36.719
<v Speaker 4>and then there's coming up with better ways to understand

1131
01:00:36.840 --> 01:00:41.559
<v Speaker 4>and categorize bugs. So, because bugs are something that we

1132
01:00:41.760 --> 01:00:44.960
<v Speaker 4>largely have approached by an individual guest and check method,

1133
01:00:45.320 --> 01:00:48.639
<v Speaker 4>there's not a lot of good systematic research on bugs,

1134
01:00:48.679 --> 01:00:51.039
<v Speaker 4>where they come from, how they happen, what they look

1135
01:00:51.199 --> 01:00:55.599
<v Speaker 4>like we do see. So there are papers about like,

1136
01:00:56.119 --> 01:00:59.639
<v Speaker 4>does static type checking reduced bugs? Does this reduce bugs?

1137
01:00:59.679 --> 01:01:03.920
<v Speaker 4>Does that reduce bugs? But the so so I'll go

1138
01:01:03.960 --> 01:01:06.599
<v Speaker 4>ahead and say the denuma of that is that a

1139
01:01:06.719 --> 01:01:09.519
<v Speaker 4>lot of that research indicates that the two things that

1140
01:01:09.599 --> 01:01:12.679
<v Speaker 4>quote unquote reduced bugs are code review and developers getting

1141
01:01:12.679 --> 01:01:16.719
<v Speaker 4>adequate sleep, which is an interesting result. But the thing

1142
01:01:16.920 --> 01:01:19.719
<v Speaker 4>is that as you look into these studies, I'll just

1143
01:01:19.800 --> 01:01:22.719
<v Speaker 4>say this, looking into computer science studies can sometimes be

1144
01:01:22.960 --> 01:01:27.000
<v Speaker 4>a depressing endeavor because as we look into them, we

1145
01:01:27.119 --> 01:01:30.840
<v Speaker 4>realize that, like, the sample size isn't anywhere big enough

1146
01:01:30.920 --> 01:01:33.519
<v Speaker 4>to indicate a statistically significant difference a lot of the

1147
01:01:33.559 --> 01:01:38.079
<v Speaker 4>times or our there are multiple comparisons going on here,

1148
01:01:38.119 --> 01:01:40.840
<v Speaker 4>the statistical rigord doesn't tend to be very good, and

1149
01:01:41.000 --> 01:01:45.199
<v Speaker 4>in particular, in the case of debugging studies or studies

1150
01:01:45.239 --> 01:01:48.760
<v Speaker 4>of bugs, we don't have a good handle on what

1151
01:01:48.920 --> 01:01:51.719
<v Speaker 4>constitutes a bug, and so what happens researchers come up

1152
01:01:51.719 --> 01:01:54.760
<v Speaker 4>with proxies. They try to come up with these proxies

1153
01:01:54.840 --> 01:01:57.679
<v Speaker 4>to indicate what a bug is in a code base.

1154
01:01:58.360 --> 01:02:00.800
<v Speaker 4>And it'll be things like this isn't a fake example,

1155
01:02:00.880 --> 01:02:02.599
<v Speaker 4>and I understand why they did it. I don't think

1156
01:02:02.639 --> 01:02:06.119
<v Speaker 4>this is a you know, I get that it's really

1157
01:02:06.239 --> 01:02:08.480
<v Speaker 4>hard to figure out a way to say what is

1158
01:02:08.519 --> 01:02:12.559
<v Speaker 4>a bug and so, and you need, once again, a

1159
01:02:12.719 --> 01:02:15.000
<v Speaker 4>lot of samples to be able to do any research.

1160
01:02:15.039 --> 01:02:16.400
<v Speaker 4>So how do you find a lot of samples in

1161
01:02:16.480 --> 01:02:18.280
<v Speaker 4>a case where you're not really sure what a sample is?

1162
01:02:18.719 --> 01:02:21.199
<v Speaker 4>You try to come up with something that represents a sample.

1163
01:02:21.559 --> 01:02:24.400
<v Speaker 4>And so they'll say, we looked at these five code bases,

1164
01:02:24.920 --> 01:02:28.320
<v Speaker 4>and we decided that any commit that changes two lines

1165
01:02:28.639 --> 01:02:32.559
<v Speaker 4>represents a commit where there was a bug. Like, what

1166
01:02:32.760 --> 01:02:34.800
<v Speaker 4>kind of proxy is that? I don't think that's a

1167
01:02:34.920 --> 01:02:38.440
<v Speaker 4>particularly accurate proxy. Necessarily, there might be bugs where you

1168
01:02:38.480 --> 01:02:40.320
<v Speaker 4>have to change a whole ton of lines of code,

1169
01:02:40.719 --> 01:02:43.920
<v Speaker 4>or there might be a situation where like, I don't know,

1170
01:02:44.400 --> 01:02:49.840
<v Speaker 4>we changed deployment hosting providers and that's one line and

1171
01:02:49.920 --> 01:02:52.480
<v Speaker 4>it wasn't a bug. We just like changed, you know,

1172
01:02:52.920 --> 01:02:56.559
<v Speaker 4>we don't we make it's an assumption, it's an embedded assumption.

1173
01:02:56.679 --> 01:02:59.519
<v Speaker 4>We're assuming that a two line change equals a bug. Okay,

1174
01:02:59.559 --> 01:03:01.320
<v Speaker 4>what's the app curacy of that assumption? What are the

1175
01:03:01.360 --> 01:03:03.480
<v Speaker 4>false positives on that? What are the false negatives on that?

1176
01:03:03.920 --> 01:03:08.840
<v Speaker 4>So we really just don't have solid research on bugs

1177
01:03:08.880 --> 01:03:11.360
<v Speaker 4>in that way because in order to do that, it's

1178
01:03:11.679 --> 01:03:15.599
<v Speaker 4>really really tough to go back and retroactively figure out

1179
01:03:15.639 --> 01:03:18.960
<v Speaker 4>where the bugs were. You have to, in my opinion,

1180
01:03:19.519 --> 01:03:22.519
<v Speaker 4>have folks or in my perspective, at the moment. To

1181
01:03:22.599 --> 01:03:24.480
<v Speaker 4>get a good read on bugs, you have to have

1182
01:03:24.639 --> 01:03:30.159
<v Speaker 4>developers logging at the time of resolving bugs. What is

1183
01:03:30.280 --> 01:03:32.519
<v Speaker 4>the bug, how much time did you spend on this bug,

1184
01:03:32.840 --> 01:03:34.880
<v Speaker 4>what did the problem end up being? What are all

1185
01:03:34.960 --> 01:03:37.960
<v Speaker 4>of the things that you tried in the process. I

1186
01:03:38.119 --> 01:03:43.800
<v Speaker 4>think that a really solid, really insightful, illuminative study on

1187
01:03:44.000 --> 01:03:47.480
<v Speaker 4>bugs would require that kind of data collection, and that's

1188
01:03:47.519 --> 01:03:50.480
<v Speaker 4>a really really tough thing to do, but I mean,

1189
01:03:50.519 --> 01:03:52.039
<v Speaker 4>I love to do that. At some point. I would

1190
01:03:52.079 --> 01:03:54.159
<v Speaker 4>like to get a cadre of developers together who are

1191
01:03:54.199 --> 01:03:57.800
<v Speaker 4>committed to logging our bugs and how we resolve them

1192
01:03:57.840 --> 01:03:59.800
<v Speaker 4>and figuring out what patterns we can find in that.

1193
01:04:00.239 --> 01:04:02.119
<v Speaker 4>What took a really long time, what didn't take a

1194
01:04:02.159 --> 01:04:05.519
<v Speaker 4>really long time, What prior experience really helped me out here?

1195
01:04:05.960 --> 01:04:08.920
<v Speaker 4>Where am I translating skills from one code base to

1196
01:04:09.000 --> 01:04:11.920
<v Speaker 4>another codebase and stuff like that? And the data collection

1197
01:04:12.079 --> 01:04:15.599
<v Speaker 4>process would be super intensive, but I think it's something

1198
01:04:15.639 --> 01:04:17.480
<v Speaker 4>that hasn't been done and something that I would love

1199
01:04:17.559 --> 01:04:20.039
<v Speaker 4>to do and or see done. But I think that's

1200
01:04:20.039 --> 01:04:22.159
<v Speaker 4>where additional terminology would come from. Yeah.

1201
01:04:22.440 --> 01:04:23.400
<v Speaker 3>Cool, Well, I've got.

1202
01:04:23.400 --> 01:04:25.440
<v Speaker 1>To push this toward picks because I've got a hard

1203
01:04:25.440 --> 01:04:26.679
<v Speaker 1>stop in about fifteen minutes.

1204
01:04:26.960 --> 01:04:28.199
<v Speaker 2>This has been really enlightening.

1205
01:04:28.320 --> 01:04:32.840
<v Speaker 1>And yeah, if people want to participate in the conversation

1206
01:04:32.960 --> 01:04:34.800
<v Speaker 1>going forward, how do they get a hold of you?

1207
01:04:35.360 --> 01:04:38.320
<v Speaker 4>Oh? Man, So my name is Chelsea Troy. My site

1208
01:04:38.400 --> 01:04:41.880
<v Speaker 4>is Chelseatroy dot com. My email is Chelsea at chelseatroy

1209
01:04:41.920 --> 01:04:44.440
<v Speaker 4>dot com. My Twitter is Hey Chelsea Troy. I keep

1210
01:04:44.480 --> 01:04:48.320
<v Speaker 4>it consistent on the name as much as I can.

1211
01:04:48.920 --> 01:04:51.239
<v Speaker 4>But yeah, I mean I'd love to chat with people.

1212
01:04:51.280 --> 01:04:53.480
<v Speaker 4>Those are probably the places where you would find the most.

1213
01:04:53.599 --> 01:04:57.039
<v Speaker 4>I do have some blog posts about debugging already on

1214
01:04:57.119 --> 01:04:58.880
<v Speaker 4>the site. I'm happy to provide a link to the

1215
01:04:58.960 --> 01:05:01.599
<v Speaker 4>category or what have you for the show notes if

1216
01:05:01.639 --> 01:05:03.840
<v Speaker 4>that's helpful. But yeah, I'd love to talk to people

1217
01:05:03.880 --> 01:05:05.800
<v Speaker 4>about this kind of thing. I'm on a bunch of

1218
01:05:05.880 --> 01:05:08.880
<v Speaker 4>slacks too. It's possible if I'm on a slack that

1219
01:05:09.000 --> 01:05:11.840
<v Speaker 4>you're in. My handle is Chelsea Troy because that's what

1220
01:05:12.000 --> 01:05:13.480
<v Speaker 4>it is on all slacks.

1221
01:05:13.920 --> 01:05:15.800
<v Speaker 2>So yeah, awesome.

1222
01:05:15.960 --> 01:05:17.400
<v Speaker 1>Yeah, if we can get links to those in the

1223
01:05:17.760 --> 01:05:19.880
<v Speaker 1>chat that we'll put them in the show notes. All right, well,

1224
01:05:19.920 --> 01:05:21.920
<v Speaker 1>let's go ahead and do some pics. Luke, do you

1225
01:05:21.960 --> 01:05:23.119
<v Speaker 1>want to start us off with picks?

1226
01:05:24.079 --> 01:05:26.039
<v Speaker 5>I got to pick, I gotta pick. I've been working

1227
01:05:26.079 --> 01:05:29.800
<v Speaker 5>on a giant CCTV system that backs up about one

1228
01:05:29.880 --> 01:05:33.199
<v Speaker 5>hundred and forty gigabytes of video data day, which is

1229
01:05:33.480 --> 01:05:37.400
<v Speaker 5>quite a lot. And it's all based up a Mongo database,

1230
01:05:37.480 --> 01:05:39.679
<v Speaker 5>and the Morgo database likes to corrupt itself in the

1231
01:05:39.719 --> 01:05:43.280
<v Speaker 5>regular basis. We found that that bug. But we want

1232
01:05:43.320 --> 01:05:46.559
<v Speaker 5>to move some data off the server onto a kind

1233
01:05:46.599 --> 01:05:49.119
<v Speaker 5>of off site backup. We had the idea of sticking

1234
01:05:49.199 --> 01:05:52.440
<v Speaker 5>it in an NS three or a or a Google

1235
01:05:52.519 --> 01:05:57.360
<v Speaker 5>Cloud object story, and my colleague used our Clone, which

1236
01:05:57.440 --> 01:05:59.840
<v Speaker 5>I had not really heard of, but it was so

1237
01:06:00.000 --> 01:06:05.320
<v Speaker 5>both fantastically easy to get a database blob.

1238
01:06:05.199 --> 01:06:05.800
<v Speaker 3>Don't kind of.

1239
01:06:05.880 --> 01:06:08.239
<v Speaker 5>This was only one hundred meg but any any science works.

1240
01:06:08.280 --> 01:06:13.280
<v Speaker 5>It's quite a bust to get data into a Google

1241
01:06:13.360 --> 01:06:16.280
<v Speaker 5>Cloud drive or sports all kinds of different things. It

1242
01:06:16.480 --> 01:06:18.679
<v Speaker 5>was so easy to use and set up. My pick

1243
01:06:18.760 --> 01:06:22.360
<v Speaker 5>for this week is our clonearclone dot org. If you

1244
01:06:22.400 --> 01:06:25.719
<v Speaker 5>want to get data into the cloud from development an

1245
01:06:25.840 --> 01:06:31.119
<v Speaker 5>environment server, that is really really good. It's fantastically easy.

1246
01:06:31.599 --> 01:06:33.960
<v Speaker 2>Awesome, John, Do you have some picks for us?

1247
01:06:34.239 --> 01:06:35.440
<v Speaker 3>I have too this week.

1248
01:06:36.400 --> 01:06:41.719
<v Speaker 6>So I think this is probably more well known in

1249
01:06:41.880 --> 01:06:44.519
<v Speaker 6>the gamer community or whatever, but because I think that

1250
01:06:44.679 --> 01:06:46.960
<v Speaker 6>most of us in the developer community are using laptops,

1251
01:06:47.000 --> 01:06:49.159
<v Speaker 6>but I have I have to have my laptop and

1252
01:06:49.199 --> 01:06:51.519
<v Speaker 6>then also have dsktop machines, so I use a mouse,

1253
01:06:52.199 --> 01:06:56.320
<v Speaker 6>and I got one of these gigantic mouse pads that

1254
01:06:56.519 --> 01:06:58.719
<v Speaker 6>like goes under your mouth and like under your keyboard

1255
01:06:58.920 --> 01:07:02.480
<v Speaker 6>just like takes up every thing or whatever. And it's

1256
01:07:02.760 --> 01:07:05.519
<v Speaker 6>like I don't even know how to describe, like how

1257
01:07:05.639 --> 01:07:08.440
<v Speaker 6>much better it is than having a little like you know,

1258
01:07:08.480 --> 01:07:11.079
<v Speaker 6>a few inches by a few inches wide square for

1259
01:07:11.119 --> 01:07:15.199
<v Speaker 6>a mouse. It's just completely different experience, Like I don't

1260
01:07:15.760 --> 01:07:19.039
<v Speaker 6>run my mouse off the edge of my mousepad constantly

1261
01:07:19.519 --> 01:07:19.960
<v Speaker 6>kind of thing.

1262
01:07:20.159 --> 01:07:20.639
<v Speaker 3>It's great.

1263
01:07:21.000 --> 01:07:23.679
<v Speaker 6>I highly recommend that you can get them for fairly

1264
01:07:23.760 --> 01:07:27.599
<v Speaker 6>inexpensive too. I mean, they have plenty of expensive ones,

1265
01:07:27.800 --> 01:07:30.400
<v Speaker 6>but you can get inexpensive ones as well. I got

1266
01:07:30.440 --> 01:07:35.000
<v Speaker 6>a Razor one, and then I have like this cours

1267
01:07:35.039 --> 01:07:37.679
<v Speaker 6>Air one that I got for like five bucks actually

1268
01:07:37.760 --> 01:07:40.079
<v Speaker 6>because it was like on sale, Like you can get

1269
01:07:40.119 --> 01:07:44.920
<v Speaker 6>them for fairly inexpensive. So but yeah, I totally totally

1270
01:07:44.960 --> 01:07:47.480
<v Speaker 6>recommend getting like a gigantic freaking mouse pad.

1271
01:07:47.519 --> 01:07:48.000
<v Speaker 3>They're awesome.

1272
01:07:48.519 --> 01:07:50.639
<v Speaker 5>I second that I've got a massive one, and it's

1273
01:07:50.679 --> 01:07:53.119
<v Speaker 5>also wonderfully absorbent of anything you spill.

1274
01:07:55.079 --> 01:07:58.840
<v Speaker 3>All right, So there's that.

1275
01:07:59.079 --> 01:08:00.800
<v Speaker 6>And then the other thing that I was thinking about

1276
01:08:00.840 --> 01:08:03.400
<v Speaker 6>this week, I was just reminded because I got drag bank.

1277
01:08:03.480 --> 01:08:06.000
<v Speaker 3>So I've been a member of this Discord server for

1278
01:08:06.079 --> 01:08:07.159
<v Speaker 3>a really long time.

1279
01:08:07.800 --> 01:08:10.880
<v Speaker 6>It's apparently become popular, but it's like, so I'm really

1280
01:08:10.960 --> 01:08:15.239
<v Speaker 6>into mentoring and stuff, and and some friend like was like, hey,

1281
01:08:15.280 --> 01:08:18.399
<v Speaker 6>you should come join the server. Like, uh, it's just

1282
01:08:18.479 --> 01:08:22.000
<v Speaker 6>people like learning how to code, like answer their questions

1283
01:08:22.039 --> 01:08:25.680
<v Speaker 6>occasionally blah, blah blah, that'd be really cool. So I've

1284
01:08:25.960 --> 01:08:28.239
<v Speaker 6>been in the server for like, I don't know a

1285
01:08:28.319 --> 01:08:31.000
<v Speaker 6>few years at this point. But it's called the Coding Den.

1286
01:08:31.600 --> 01:08:34.119
<v Speaker 6>It appears to me on the surface to be like

1287
01:08:34.239 --> 01:08:37.159
<v Speaker 6>filled with mostly probably like college kids and stuff.

1288
01:08:37.600 --> 01:08:40.439
<v Speaker 3>But if you like ore into mentoring, you know, they

1289
01:08:40.479 --> 01:08:42.640
<v Speaker 3>could probably use some more mature people to do some

1290
01:08:42.760 --> 01:08:42.920
<v Speaker 3>of that.

1291
01:08:43.560 --> 01:08:45.439
<v Speaker 6>There are some of those people there, so if you're

1292
01:08:45.560 --> 01:08:47.760
<v Speaker 6>like into that, I'm just throwing this out there.

1293
01:08:47.840 --> 01:08:51.640
<v Speaker 3>It's the thing. So that's out there. It's apparently I

1294
01:08:52.039 --> 01:08:52.960
<v Speaker 3>found it the other day.

1295
01:08:53.000 --> 01:08:55.399
<v Speaker 6>It's like apparently one of like the most populous Discord

1296
01:08:55.479 --> 01:08:59.199
<v Speaker 6>servers on Discord too, so for whatever reason. But yeah,

1297
01:08:59.279 --> 01:09:03.560
<v Speaker 6>there's a whole bunch of people on there, asking questions

1298
01:09:03.720 --> 01:09:04.760
<v Speaker 6>and helping other people.

1299
01:09:05.119 --> 01:09:05.880
<v Speaker 3>So I got nice.

1300
01:09:06.600 --> 01:09:10.600
<v Speaker 1>I don't know if I'm more mature, I'm more seasoned. Anyway,

1301
01:09:13.319 --> 01:09:16.479
<v Speaker 1>There we go, right, I like spicy, Yeah, there we go.

1302
01:09:17.239 --> 01:09:19.079
<v Speaker 1>I've got a few picks and I'm going to push

1303
01:09:19.159 --> 01:09:22.720
<v Speaker 1>out there. Lately, I have been listening to the Wheel

1304
01:09:22.760 --> 01:09:26.239
<v Speaker 1>of Time books on Audible and they're terrific. And I

1305
01:09:26.279 --> 01:09:29.079
<v Speaker 1>don't remember who the narrator is, but he's also pretty terrific.

1306
01:09:29.960 --> 01:09:32.159
<v Speaker 1>There are two of them, There's a man and a woman,

1307
01:09:32.279 --> 01:09:34.800
<v Speaker 1>and they kind of depending on which point of view

1308
01:09:34.920 --> 01:09:37.920
<v Speaker 1>you're getting the story from, Right, if you're getting it

1309
01:09:38.000 --> 01:09:41.960
<v Speaker 1>from a male character, then it's the male narrator, and

1310
01:09:42.039 --> 01:09:45.079
<v Speaker 1>if it's a female character, from the female narrator. But

1311
01:09:45.279 --> 01:09:48.680
<v Speaker 1>they're they're really well done. I really really enjoy those,

1312
01:09:48.760 --> 01:09:53.119
<v Speaker 1>so I'm going to pick those on Audible. And then yeah,

1313
01:09:53.159 --> 01:09:56.680
<v Speaker 1>I've been onboarding with a company. I'm not going to

1314
01:09:57.359 --> 01:10:01.039
<v Speaker 1>announce where I'm working, but things kind of slowed down

1315
01:10:01.039 --> 01:10:03.159
<v Speaker 1>with the podcast network to the point where I in

1316
01:10:03.319 --> 01:10:05.399
<v Speaker 1>order to pay the bills, you know, I had to

1317
01:10:05.439 --> 01:10:09.720
<v Speaker 1>go find some other work. So anyway, the onboarding process

1318
01:10:09.840 --> 01:10:14.880
<v Speaker 1>has been excruciating. But they did send like a box

1319
01:10:14.960 --> 01:10:18.039
<v Speaker 1>full of hardware right with the laptop and stuff, and

1320
01:10:19.119 --> 01:10:23.640
<v Speaker 1>they had like this really inexpensive Logitech wireless.

1321
01:10:23.199 --> 01:10:26.079
<v Speaker 2>Mouse, and I really like it, so I'm going to

1322
01:10:26.119 --> 01:10:26.359
<v Speaker 2>pick that.

1323
01:10:26.479 --> 01:10:28.000
<v Speaker 1>I'll find it on Amazon and put a link in

1324
01:10:28.039 --> 01:10:31.960
<v Speaker 1>the show notes, and yeah, those are my picks. And

1325
01:10:32.079 --> 01:10:35.359
<v Speaker 1>then also, of course most Valuable Dot Dev We're going

1326
01:10:35.439 --> 01:10:38.800
<v Speaker 1>to be doing monthly Q and A calls, probably get

1327
01:10:38.880 --> 01:10:41.199
<v Speaker 1>an expert or one of my co hosts from one

1328
01:10:41.239 --> 01:10:44.359
<v Speaker 1>of the shows on to talk about stuff and teach

1329
01:10:44.439 --> 01:10:47.199
<v Speaker 1>us stuff. And then I'm putting together a summit in

1330
01:10:47.279 --> 01:10:49.640
<v Speaker 1>December and I'm going to have a whole bunch of

1331
01:10:49.680 --> 01:10:50.920
<v Speaker 1>experts essentially get on.

1332
01:10:51.159 --> 01:10:54.039
<v Speaker 2>And the idea is is, you know, if you were

1333
01:10:54.359 --> 01:10:54.960
<v Speaker 2>if you woke.

1334
01:10:54.880 --> 01:10:58.439
<v Speaker 1>Up tomorrow where nobody knew who you were, you were

1335
01:10:58.520 --> 01:11:01.600
<v Speaker 1>kind of a mid level developer who was competent at

1336
01:11:01.640 --> 01:11:03.800
<v Speaker 1>their job and didn't really know what to learn next,

1337
01:11:04.239 --> 01:11:06.159
<v Speaker 1>you know, what would you do to become the most

1338
01:11:06.239 --> 01:11:10.119
<v Speaker 1>valuable the most valuable developer on your team. So it's

1339
01:11:10.159 --> 01:11:11.640
<v Speaker 1>just going to be an it's going to a series

1340
01:11:11.680 --> 01:11:14.079
<v Speaker 1>of interviews. But that's that's what I'm looking at doing

1341
01:11:14.159 --> 01:11:17.159
<v Speaker 1>for that that summit. And if you want to just

1342
01:11:17.239 --> 01:11:19.399
<v Speaker 1>get the videos as they come out, that'll be free.

1343
01:11:20.000 --> 01:11:22.199
<v Speaker 1>They'll be free for a day or so. And then

1344
01:11:22.319 --> 01:11:25.560
<v Speaker 1>if you want, you know, longer access and access to

1345
01:11:25.600 --> 01:11:28.079
<v Speaker 1>a Slack channel and scheduled q and a's and stuff

1346
01:11:28.119 --> 01:11:30.880
<v Speaker 1>like that with them in Slack, then you know, you

1347
01:11:30.960 --> 01:11:31.680
<v Speaker 1>can buy a ticket.

1348
01:11:31.920 --> 01:11:34.039
<v Speaker 2>So that's that's how I'm looking at doing that.

1349
01:11:34.239 --> 01:11:37.079
<v Speaker 1>That way, the folks who are in areas where they

1350
01:11:38.119 --> 01:11:40.399
<v Speaker 1>can't afford it, or if you're between jobs. I mean,

1351
01:11:40.399 --> 01:11:42.159
<v Speaker 1>you can just get the free ticket and show up

1352
01:11:42.239 --> 01:11:45.279
<v Speaker 1>and participate. So so yeah, so that's what I'm looking

1353
01:11:45.279 --> 01:11:48.239
<v Speaker 1>at doing there, Chelsea. Do you have some things you

1354
01:11:48.279 --> 01:11:49.119
<v Speaker 1>want to shout out about?

1355
01:11:49.479 --> 01:11:53.000
<v Speaker 4>Yeah? Absolutely, I got some picks. So the first one

1356
01:11:53.079 --> 01:11:55.000
<v Speaker 4>is a book that I've been reading recently. It's called

1357
01:11:55.079 --> 01:11:58.960
<v Speaker 4>The New Educations by Kathy and Davidson, and it is

1358
01:11:59.199 --> 01:12:05.840
<v Speaker 4>about the American chiefly higher education system, and where it

1359
01:12:05.960 --> 01:12:08.199
<v Speaker 4>came from, why it is the way it is, and

1360
01:12:08.520 --> 01:12:11.600
<v Speaker 4>what we might potentially change about it. Now, I'll issue

1361
01:12:11.640 --> 01:12:14.279
<v Speaker 4>a reservation on this book, particularly with regard to tech.

1362
01:12:14.359 --> 01:12:16.239
<v Speaker 4>Some of the tech claims that it makes are not

1363
01:12:16.880 --> 01:12:22.439
<v Speaker 4>accurate exactly. But with regard to the teaching portion specifically,

1364
01:12:23.159 --> 01:12:25.640
<v Speaker 4>there are a lot of case studies and examples in

1365
01:12:25.720 --> 01:12:28.199
<v Speaker 4>this book of teachers who've done really interesting things in

1366
01:12:28.279 --> 01:12:31.600
<v Speaker 4>their classroom to help engage the students and help the

1367
01:12:31.680 --> 01:12:37.199
<v Speaker 4>students actually participate in meaningful projects that make positive changes

1368
01:12:37.439 --> 01:12:39.840
<v Speaker 4>in the world in areas where the students care about

1369
01:12:40.279 --> 01:12:43.039
<v Speaker 4>as they're in the class. It's really cool. I took

1370
01:12:43.079 --> 01:12:44.600
<v Speaker 4>a whole bunch of notes from it. I'm going to

1371
01:12:44.640 --> 01:12:48.079
<v Speaker 4>be doing some stuff with the exercises from that book.

1372
01:12:48.600 --> 01:12:52.119
<v Speaker 4>I think as experiments in my mobile software development class

1373
01:12:52.199 --> 01:12:54.520
<v Speaker 4>this fall, So I'm pretty excited about that. It's called

1374
01:12:54.520 --> 01:12:58.319
<v Speaker 4>the New education. And I guess the other thing, maybe

1375
01:12:58.399 --> 01:13:02.880
<v Speaker 4>this is to to cliche for the Ruby Rokes podcast,

1376
01:13:03.000 --> 01:13:07.039
<v Speaker 4>But at Ruby Kanf twenty twenty this year, remote edition,

1377
01:13:07.680 --> 01:13:12.600
<v Speaker 4>I am going to be co leading a workshop about

1378
01:13:13.640 --> 01:13:18.479
<v Speaker 4>software maintenance and risk mitigation mechanisms that are pretty excited about.

1379
01:13:18.880 --> 01:13:22.680
<v Speaker 4>The case study that we're doing is a three device

1380
01:13:22.880 --> 01:13:26.439
<v Speaker 4>system where some software all collaborates together to help a

1381
01:13:26.680 --> 01:13:30.079
<v Speaker 4>parent emergency room keep track of all of its parent patients.

1382
01:13:30.600 --> 01:13:32.560
<v Speaker 4>So parrots lives are going to be on the line,

1383
01:13:33.239 --> 01:13:36.000
<v Speaker 4>and mitigating risks in the software is going to be

1384
01:13:36.159 --> 01:13:39.920
<v Speaker 4>in your hands as participants. I'm really excited about it,

1385
01:13:40.000 --> 01:13:42.079
<v Speaker 4>and I hope that you will join me there in November.

1386
01:13:42.560 --> 01:13:45.359
<v Speaker 2>Awesome, looking forward to it, and thanks for coming, Chelsea.

1387
01:13:45.439 --> 01:13:46.399
<v Speaker 3>This was really fun.

1388
01:13:46.800 --> 01:13:49.119
<v Speaker 4>Yeah, absolutely, I had a great time. Thanks for having me.

1389
01:13:49.560 --> 01:13:51.960
<v Speaker 1>Yeah, thanks for coming. All right, folks, we'll wrap this

1390
01:13:52.039 --> 01:13:53.119
<v Speaker 1>one up until next time.

1391
01:13:53.560 --> 01:13:54.039
<v Speaker 2>Max Out
