WEBVTT

1
00:00:06.040 --> 00:00:09.320
<v Speaker 1>Hello everybody, and welcome to another episode of React Roundup.

2
00:00:09.439 --> 00:00:11.519
<v Speaker 1>My name is TJ. Van Told and with me on

3
00:00:11.560 --> 00:00:15.199
<v Speaker 1>the panel today is Jack Herrington. Hello, and our special

4
00:00:15.199 --> 00:00:19.320
<v Speaker 1>guests today are Mark Story and Priscilla Alivera. Hopefully I

5
00:00:19.320 --> 00:00:24.359
<v Speaker 1>pronounced her name correctly. Yeah, welcome, excellent, welcome to React Roundup.

6
00:00:24.359 --> 00:00:27.039
<v Speaker 1>Why don't you introduce yourself and tell us who are

7
00:00:27.079 --> 00:00:29.480
<v Speaker 1>what you do while you're famous those sorts of things.

8
00:00:30.879 --> 00:00:34.520
<v Speaker 2>I don't think I'm n okay okay 'all, thanks for

9
00:00:34.560 --> 00:00:37.840
<v Speaker 2>having me. My name is Priscilla. I'm a software engineer

10
00:00:37.920 --> 00:00:40.880
<v Speaker 2>based in Vienna, and I'm a grank To employee That's

11
00:00:40.960 --> 00:00:45.039
<v Speaker 2>Sanctuary work on the user interface of our application, so

12
00:00:45.479 --> 00:00:47.560
<v Speaker 2>I'm more like a front end engineer.

13
00:00:48.439 --> 00:00:51.079
<v Speaker 3>I'm Mark Story. I also work at Center It's Prisona.

14
00:00:51.359 --> 00:00:53.240
<v Speaker 3>I work partially on the front time and then also

15
00:00:53.280 --> 00:00:54.960
<v Speaker 3>a lot on the back end on their building system.

16
00:00:55.280 --> 00:00:56.840
<v Speaker 3>And I'm in Toronto, Canada.

17
00:00:57.000 --> 00:00:59.039
<v Speaker 4>All right, So looks at y'all have an article out

18
00:00:59.119 --> 00:01:02.640
<v Speaker 4>on converting from javascripts to typescript for your application and

19
00:01:02.679 --> 00:01:04.879
<v Speaker 4>what the advantages work, and you kind of give us

20
00:01:04.920 --> 00:01:06.560
<v Speaker 4>a bit of a high level synopsis on that.

21
00:01:06.799 --> 00:01:08.879
<v Speaker 3>Yeah, so the high level synopsis is we converted the

22
00:01:08.920 --> 00:01:12.840
<v Speaker 3>application from JavaScript to typescript. To Typescript is a statically

23
00:01:12.920 --> 00:01:15.760
<v Speaker 3>analyzed language that compiles that a JavaScript if you've not

24
00:01:15.920 --> 00:01:17.599
<v Speaker 3>used to it before. And so over the coross of

25
00:01:17.599 --> 00:01:19.920
<v Speaker 3>eighteen months, we converted the whole applicate, the whole front

26
00:01:20.000 --> 00:01:24.920
<v Speaker 3>end application for Century from JavaScript from JavaScript into typescript,

27
00:01:25.280 --> 00:01:27.200
<v Speaker 3>and then we wrote a blog post around how we

28
00:01:27.239 --> 00:01:29.640
<v Speaker 3>did it and some of the challenges we had and

29
00:01:29.840 --> 00:01:31.040
<v Speaker 3>some of the benefits of that.

30
00:01:31.239 --> 00:01:33.680
<v Speaker 4>So, what were some of the challenges you had.

31
00:01:33.879 --> 00:01:37.359
<v Speaker 3>Big code bases take a long time to migrate. I

32
00:01:37.480 --> 00:01:41.400
<v Speaker 3>bet so for scale like Centuries, around ninety thousand lines

33
00:01:41.439 --> 00:01:43.799
<v Speaker 3>of code in JavaScript, and yeah, it just took a

34
00:01:43.799 --> 00:01:46.959
<v Speaker 3>really long time because we weren't allowed to stop delivering features.

35
00:01:47.239 --> 00:01:50.200
<v Speaker 3>So yeah, the process we kind of documented was doing

36
00:01:50.200 --> 00:01:52.480
<v Speaker 3>that without stopping. Because there's kind of like two approaches

37
00:01:52.480 --> 00:01:54.400
<v Speaker 3>you can take with converting a large CUD base. You

38
00:01:54.439 --> 00:01:56.799
<v Speaker 3>can like try and freeze the earth and do everything

39
00:01:56.840 --> 00:01:58.840
<v Speaker 3>at once and then not do any future work. And

40
00:01:58.879 --> 00:02:00.560
<v Speaker 3>the other one is like do a re right, which

41
00:02:00.599 --> 00:02:02.799
<v Speaker 3>is also very dangerous, and the other one is that

42
00:02:02.799 --> 00:02:04.959
<v Speaker 3>we approach we took, which is like you modify the

43
00:02:05.000 --> 00:02:08.120
<v Speaker 3>code in place and then incrementally kind of change things over.

44
00:02:08.400 --> 00:02:11.120
<v Speaker 1>I guess maybe we could start with what precipitated this change,

45
00:02:11.240 --> 00:02:15.039
<v Speaker 1>like where you internally sold and typescript and decided it

46
00:02:15.199 --> 00:02:18.280
<v Speaker 1>was the right move, because obviously putting in that whole effort,

47
00:02:18.280 --> 00:02:20.520
<v Speaker 1>you must have saw some value in doing the work.

48
00:02:20.680 --> 00:02:23.080
<v Speaker 3>Yeah, I can answer that. I guess the impetus was

49
00:02:23.080 --> 00:02:27.159
<v Speaker 3>we were having we had several kind of production incidents happened,

50
00:02:27.280 --> 00:02:30.039
<v Speaker 3>customer facing pression incidents that were caused by front end

51
00:02:30.039 --> 00:02:33.159
<v Speaker 3>problems and the after like in the retro for like

52
00:02:33.280 --> 00:02:35.599
<v Speaker 3>why did we have this incident? A lot of the

53
00:02:36.159 --> 00:02:38.240
<v Speaker 3>like paths forward where you know, if we had better

54
00:02:38.280 --> 00:02:41.400
<v Speaker 3>tooling or static analysis, then we would be able to

55
00:02:41.400 --> 00:02:43.599
<v Speaker 3>prevent these kinds of problems. And so that was kind

56
00:02:43.599 --> 00:02:46.080
<v Speaker 3>of that happened multiple times, and the solution came up

57
00:02:46.159 --> 00:02:48.280
<v Speaker 3>multiple times was to you know, if we had better

58
00:02:48.319 --> 00:02:52.400
<v Speaker 3>linting support or better static analyzation that could come from

59
00:02:52.520 --> 00:02:54.639
<v Speaker 3>a tool like touch script, then we would be able

60
00:02:54.639 --> 00:02:56.639
<v Speaker 3>to prevent these kinds of problems because they would be

61
00:02:56.680 --> 00:02:59.360
<v Speaker 3>compiled tim errors versus runtime aerrors that we catch in production.

62
00:03:00.000 --> 00:03:02.000
<v Speaker 3>So that kind of came through and then a century

63
00:03:02.000 --> 00:03:04.080
<v Speaker 3>overy year has like a hack week, like many companies

64
00:03:04.400 --> 00:03:06.960
<v Speaker 3>and a bunch of engineers took the time to kind

65
00:03:06.960 --> 00:03:10.319
<v Speaker 3>of start the genesis of touch script conversion and make

66
00:03:10.360 --> 00:03:12.919
<v Speaker 3>it possible to incre mentally move the application over as

67
00:03:12.960 --> 00:03:15.000
<v Speaker 3>part of their project, and then so we have kind

68
00:03:15.000 --> 00:03:17.479
<v Speaker 3>of a proof of concept, and then from there we

69
00:03:17.479 --> 00:03:19.919
<v Speaker 3>were able to get buy in on converting the rest

70
00:03:19.919 --> 00:03:20.719
<v Speaker 3>of the application over.

71
00:03:20.960 --> 00:03:24.000
<v Speaker 1>I'm curious the setup because I sort of agree with

72
00:03:24.039 --> 00:03:26.919
<v Speaker 1>your how you laid it out, Like when you're tackling

73
00:03:26.919 --> 00:03:29.759
<v Speaker 1>something big like this, I think very often, at least

74
00:03:29.759 --> 00:03:33.639
<v Speaker 1>in my experience, freezing everything, like for a big rewrite

75
00:03:33.759 --> 00:03:37.840
<v Speaker 1>is almost never an option, just because like, if you

76
00:03:37.840 --> 00:03:40.639
<v Speaker 1>have an app that's that much code, chances are it's

77
00:03:40.680 --> 00:03:44.639
<v Speaker 1>doing something important, and chances are you have to keep

78
00:03:44.759 --> 00:03:48.719
<v Speaker 1>updating and working on it. And also, like business users

79
00:03:48.719 --> 00:03:50.719
<v Speaker 1>don't tend to like things of like, yeah, we're going

80
00:03:50.759 --> 00:03:53.560
<v Speaker 1>to spend two three months on this and you'll notice

81
00:03:53.599 --> 00:03:56.199
<v Speaker 1>no changes. Hopefully you'll notice no changes because we might

82
00:03:56.199 --> 00:03:59.719
<v Speaker 1>break something too, right like those those arguments don't go

83
00:03:59.759 --> 00:04:03.400
<v Speaker 1>over so well. But I am curious, like because I've

84
00:04:03.639 --> 00:04:07.560
<v Speaker 1>absolutely never attempt this with Typescript specifically, I'm very curious

85
00:04:07.560 --> 00:04:10.560
<v Speaker 1>of the architecture you came up with to make this possible,

86
00:04:10.560 --> 00:04:14.319
<v Speaker 1>because I'm assuming like you were pushing out typescript files

87
00:04:14.360 --> 00:04:17.040
<v Speaker 1>like or at least I'm assuming it's a mechanism where

88
00:04:17.040 --> 00:04:20.040
<v Speaker 1>you could like convert one file the typeescript, push it up,

89
00:04:20.079 --> 00:04:22.639
<v Speaker 1>push it to production or whatever, and then just like

90
00:04:22.839 --> 00:04:25.839
<v Speaker 1>keep on working. So I'm curious, like, how like technically

91
00:04:26.079 --> 00:04:28.000
<v Speaker 1>you set that up to work. Is it just like

92
00:04:28.519 --> 00:04:31.480
<v Speaker 1>some fancy webpack canfig or what was going on to

93
00:04:31.480 --> 00:04:32.319
<v Speaker 1>make that possible?

94
00:04:32.639 --> 00:04:38.439
<v Speaker 2>Oh? Yes, So we decided on converting our files incrementally

95
00:04:38.519 --> 00:04:41.959
<v Speaker 2>to type script, and so every day we were pushing

96
00:04:42.040 --> 00:04:45.560
<v Speaker 2>files to production and we used our own.

97
00:04:45.399 --> 00:04:47.399
<v Speaker 5>Application to monitor errors.

98
00:04:47.879 --> 00:04:51.439
<v Speaker 2>Yes, and so we had to use some webpac confix

99
00:04:51.519 --> 00:04:54.439
<v Speaker 2>some configuration to be able to do that. But this

100
00:04:54.600 --> 00:04:57.920
<v Speaker 2>is something nice in type script. You don't need to

101
00:04:57.959 --> 00:05:01.000
<v Speaker 2>convert the whole code base at once. You can do

102
00:05:01.040 --> 00:05:05.000
<v Speaker 2>it incrementally. So this was also one of the reasons

103
00:05:05.000 --> 00:05:07.360
<v Speaker 2>we decided to introduce typescript.

104
00:05:07.680 --> 00:05:10.920
<v Speaker 4>So how many developers are on your team and how

105
00:05:11.000 --> 00:05:15.639
<v Speaker 4>did they fare in terms of learning pypescript And you

106
00:05:15.720 --> 00:05:19.040
<v Speaker 4>mentioned in the articles some educational stuff. How did that work?

107
00:05:19.399 --> 00:05:24.439
<v Speaker 5>So I think we are twelve developers. Some of some

108
00:05:24.519 --> 00:05:25.879
<v Speaker 5>of our colleagues.

109
00:05:25.439 --> 00:05:28.319
<v Speaker 2>They only work on the front end, and some of

110
00:05:28.360 --> 00:05:32.360
<v Speaker 2>our colleagues they are FULLD stech. So the education was

111
00:05:32.399 --> 00:05:37.480
<v Speaker 2>the key in this process because some colleagues they didn't

112
00:05:37.600 --> 00:05:41.519
<v Speaker 2>know much about typescript and we would like to. First

113
00:05:41.959 --> 00:05:46.279
<v Speaker 2>we created a documentation. In terms of documentation, we also

114
00:05:47.160 --> 00:05:51.480
<v Speaker 2>tried to motivate the colleagues to adopt a typescript and

115
00:05:51.600 --> 00:05:56.079
<v Speaker 2>once they saw the benefits, they started to use typescript

116
00:05:56.439 --> 00:05:59.680
<v Speaker 2>by themselves. So we never used the tooling to block

117
00:05:59.759 --> 00:06:03.920
<v Speaker 2>some on of pushing JSX COLDE to our code base.

118
00:06:04.199 --> 00:06:07.560
<v Speaker 5>This was naturally. This happened naturally.

119
00:06:08.040 --> 00:06:11.759
<v Speaker 4>So what were the big like aha, benefits for these

120
00:06:11.800 --> 00:06:15.480
<v Speaker 4>front end developers on like, oh, now, yes, typescript, that's awesome.

121
00:06:15.720 --> 00:06:17.600
<v Speaker 4>You know, it's so much better than JSX. Now I'm

122
00:06:17.600 --> 00:06:18.800
<v Speaker 4>never going to do JSX again.

123
00:06:19.120 --> 00:06:21.959
<v Speaker 5>So auto completion for example.

124
00:06:22.480 --> 00:06:25.600
<v Speaker 3>Yeah, yeah, I would say like autocompletion and compile time

125
00:06:25.800 --> 00:06:30.160
<v Speaker 3>checks were the two big ones. Also, like improved code navigation,

126
00:06:30.319 --> 00:06:32.279
<v Speaker 3>so instead of having to get your editor to go

127
00:06:32.360 --> 00:06:34.600
<v Speaker 3>up and find the symbol ref like most editors, when

128
00:06:34.639 --> 00:06:37.399
<v Speaker 3>you have the language server setup, you can jump to

129
00:06:37.480 --> 00:06:40.920
<v Speaker 3>symbols or like preview symbols in line with like little

130
00:06:40.959 --> 00:06:46.519
<v Speaker 3>floating windows. And so because the editor ecosystem, the touch

131
00:06:46.519 --> 00:06:48.160
<v Speaker 3>script team spent a lot of time making like the

132
00:06:48.199 --> 00:06:51.279
<v Speaker 3>dev experience really well. It was that like improved developer

133
00:06:51.319 --> 00:06:54.279
<v Speaker 3>experience that really kind of like helped convert people over.

134
00:06:54.639 --> 00:06:56.600
<v Speaker 4>Just a quick follow up, so for editor we're talking

135
00:06:56.759 --> 00:06:59.720
<v Speaker 4>vs code, we're talking web the Storm or what.

136
00:07:00.360 --> 00:07:02.879
<v Speaker 3>Yeah, so we have of the twelve to twenty people

137
00:07:02.879 --> 00:07:04.360
<v Speaker 3>that work on the front end, there's a mix of

138
00:07:04.360 --> 00:07:06.720
<v Speaker 3>people in bs CO. There's some Vim users and then

139
00:07:06.759 --> 00:07:09.160
<v Speaker 3>there's some like web Storm or like pie Storm pie

140
00:07:09.240 --> 00:07:13.000
<v Speaker 3>chterm users as well. So getting it to helping people

141
00:07:13.040 --> 00:07:15.399
<v Speaker 3>get set up with vs cod is pretty straightforward. And

142
00:07:15.439 --> 00:07:17.720
<v Speaker 3>then the VIM users have their own like flag channel

143
00:07:17.720 --> 00:07:22.560
<v Speaker 3>where they all share a vimscript and you just hang

144
00:07:22.639 --> 00:07:23.279
<v Speaker 3>out over there.

145
00:07:23.560 --> 00:07:27.199
<v Speaker 1>I don't know what you all are doing, hu, I

146
00:07:27.199 --> 00:07:32.040
<v Speaker 1>imagine you a specially invite to and it's I'm.

147
00:07:31.959 --> 00:07:33.839
<v Speaker 3>One of those Vim people as well. So it was, yeah,

148
00:07:33.879 --> 00:07:36.759
<v Speaker 3>we all work together to get it all working nice.

149
00:07:36.879 --> 00:07:39.120
<v Speaker 3>So yeah, once once everyone had their editors set up,

150
00:07:39.160 --> 00:07:41.759
<v Speaker 3>then the benefits become a lot more visible and a

151
00:07:41.800 --> 00:07:45.079
<v Speaker 3>lot more tangible. And through that and like a code

152
00:07:45.079 --> 00:07:47.920
<v Speaker 3>review like Priscilla was mentioning we're able to kind of

153
00:07:47.959 --> 00:07:50.399
<v Speaker 3>like a guide and educate people forward. And then there

154
00:07:50.480 --> 00:07:52.920
<v Speaker 3>was also some pair programming along the way, like you

155
00:07:52.959 --> 00:07:55.120
<v Speaker 3>should do this in in the persons I don't know,

156
00:07:55.120 --> 00:07:56.439
<v Speaker 3>and then we're like, okay, well we can just sit

157
00:07:56.480 --> 00:07:59.720
<v Speaker 3>with you and help you or like video chat with

158
00:07:59.759 --> 00:08:04.079
<v Speaker 3>you sitting. But yeah, that's the kind of approach we took.

159
00:08:04.079 --> 00:08:06.160
<v Speaker 4>It's impressive that you did it over a pandemic, that's

160
00:08:06.199 --> 00:08:06.600
<v Speaker 4>for sure.

161
00:08:06.959 --> 00:08:11.560
<v Speaker 3>Yeah. That affected the timelines. Yeah. When we started the project,

162
00:08:11.759 --> 00:08:14.120
<v Speaker 3>the timelines were like RMVP was like, well when do

163
00:08:14.160 --> 00:08:16.000
<v Speaker 3>you think you'll be finished? And we gave a timeline

164
00:08:16.079 --> 00:08:20.680
<v Speaker 3>which was complete rubbish. The pandemic came and then the

165
00:08:20.680 --> 00:08:23.079
<v Speaker 3>timelines were very much rubbish, and then we were dealing

166
00:08:23.079 --> 00:08:25.680
<v Speaker 3>with like team burnout. So yeah, just like trying to

167
00:08:25.759 --> 00:08:28.279
<v Speaker 3>keep people motivated was one of the harder parts. I

168
00:08:28.279 --> 00:08:28.800
<v Speaker 3>would say.

169
00:08:28.959 --> 00:08:31.160
<v Speaker 1>One kind of nice thing or fun thing I see

170
00:08:31.160 --> 00:08:34.720
<v Speaker 1>in your article is you have on here that it's

171
00:08:35.039 --> 00:08:37.639
<v Speaker 1>certain points, like certain messier points. You would just leave

172
00:08:37.679 --> 00:08:40.320
<v Speaker 1>in comments that were like to do use like tackle

173
00:08:40.360 --> 00:08:43.879
<v Speaker 1>this later, And personally I kind of like that because

174
00:08:44.360 --> 00:08:47.679
<v Speaker 1>it's like you're talking about like using the typescript like any,

175
00:08:47.799 --> 00:08:51.759
<v Speaker 1>which is like the get out of jail free typescript trick.

176
00:08:52.200 --> 00:08:55.039
<v Speaker 1>But I'm curious about that approach. I think I actually

177
00:08:55.159 --> 00:08:58.000
<v Speaker 1>kind of like it because I'm guessing your point was

178
00:08:58.080 --> 00:09:01.279
<v Speaker 1>you want to get this conversion done right, like addressing

179
00:09:01.320 --> 00:09:06.240
<v Speaker 1>some of the messier type script aspects would potentially break

180
00:09:06.279 --> 00:09:08.960
<v Speaker 1>your code unnecessarily, when really you just wanted to get

181
00:09:08.960 --> 00:09:11.120
<v Speaker 1>things changed and get things out there. Presumably.

182
00:09:11.799 --> 00:09:14.679
<v Speaker 3>Yeah, I would say we tried to use any sparingly.

183
00:09:15.200 --> 00:09:17.840
<v Speaker 3>We tried really hard to do the proper typing, but

184
00:09:17.879 --> 00:09:21.080
<v Speaker 3>there are some places, especially where our type striped interfaces,

185
00:09:21.080 --> 00:09:23.759
<v Speaker 3>where with React, where you can't type it all properly.

186
00:09:24.120 --> 00:09:26.399
<v Speaker 3>I think it's like create ref as the one that

187
00:09:26.559 --> 00:09:29.159
<v Speaker 3>is really annoying, Like you can't put generics through create

188
00:09:29.240 --> 00:09:31.679
<v Speaker 3>create ref it drops them. So we had we had

189
00:09:31.720 --> 00:09:33.120
<v Speaker 3>a few things like that, And we have a lot

190
00:09:33.120 --> 00:09:35.639
<v Speaker 3>of like higher order components because Century is a long

191
00:09:35.679 --> 00:09:38.240
<v Speaker 3>lived REACT applications, so there's many different patterns. There's a

192
00:09:38.240 --> 00:09:40.720
<v Speaker 3>lot of higher artwork components, and we had a lot

193
00:09:40.720 --> 00:09:43.120
<v Speaker 3>of problems with like default props not being able to

194
00:09:43.120 --> 00:09:46.200
<v Speaker 3>tunnel their way through through a higher ardor component. So

195
00:09:46.240 --> 00:09:48.279
<v Speaker 3>those are some of like the Typeescript challenges we kind

196
00:09:48.279 --> 00:09:48.840
<v Speaker 3>of like had.

197
00:09:48.679 --> 00:09:52.360
<v Speaker 2>To hack around, yes, and we used to do so

198
00:09:52.639 --> 00:09:55.559
<v Speaker 2>we can now after the conversion, we are doing that.

199
00:09:55.960 --> 00:09:59.679
<v Speaker 2>Now we are checking those places, those places where we

200
00:09:59.720 --> 00:10:03.200
<v Speaker 2>added to do, and we are trying to find a

201
00:10:03.200 --> 00:10:06.480
<v Speaker 2>better type and yeah and remove to.

202
00:10:06.399 --> 00:10:07.360
<v Speaker 5>Do with the correct tack.

203
00:10:07.799 --> 00:10:09.919
<v Speaker 3>And we were using libraries that had some like not

204
00:10:10.080 --> 00:10:13.559
<v Speaker 3>ideal typing support. So we're using create react class and

205
00:10:13.600 --> 00:10:15.320
<v Speaker 3>some of the types get kind of squidgy when they

206
00:10:15.360 --> 00:10:18.320
<v Speaker 3>go through create react class. So we went back and

207
00:10:18.360 --> 00:10:20.679
<v Speaker 3>like removed all of create react class and like tried

208
00:10:20.679 --> 00:10:23.320
<v Speaker 3>to simplify some of the higher components. And we still

209
00:10:23.320 --> 00:10:25.720
<v Speaker 3>have a budget to Doo's love to do. So while

210
00:10:25.799 --> 00:10:28.759
<v Speaker 3>we're while we're done, we're not like one hundred percent

211
00:10:29.320 --> 00:10:31.039
<v Speaker 3>no any anywhere. There's still some.

212
00:10:31.240 --> 00:10:33.159
<v Speaker 4>So when just typescript it was it was kind of

213
00:10:33.159 --> 00:10:37.480
<v Speaker 4>more generalized. Repass it with the whole system and refactor

214
00:10:37.559 --> 00:10:40.480
<v Speaker 4>some of the old cruft it was stuck around in

215
00:10:40.519 --> 00:10:41.320
<v Speaker 4>there kind of thing.

216
00:10:41.879 --> 00:10:44.519
<v Speaker 3>Yeah, we tried to try to focus, like when you're

217
00:10:44.519 --> 00:10:46.440
<v Speaker 3>converting a file to type script or converting a module

218
00:10:46.440 --> 00:10:49.519
<v Speaker 3>to typescript, like just do the typescript conversions, don't make

219
00:10:49.559 --> 00:10:53.039
<v Speaker 3>too many run time changes unless the typing becomes really

220
00:10:53.039 --> 00:10:56.279
<v Speaker 3>really challenging, because conflating the run time changes with the

221
00:10:56.840 --> 00:10:59.360
<v Speaker 3>with the type changes kind of sets you up for

222
00:10:59.519 --> 00:11:02.919
<v Speaker 3>more problem BOMs than what you you'd want to take

223
00:11:02.960 --> 00:11:04.159
<v Speaker 3>on at this point in time.

224
00:11:04.559 --> 00:11:05.600
<v Speaker 4>Oh loo could go wrong.

225
00:11:08.360 --> 00:11:12.159
<v Speaker 3>Yeah yeah. Another thing that helped us make progress was

226
00:11:12.200 --> 00:11:14.120
<v Speaker 3>to kind of put like a moratorium on any like

227
00:11:14.240 --> 00:11:17.360
<v Speaker 3>other large scale refactoring. So another thing that we've been

228
00:11:17.559 --> 00:11:21.000
<v Speaker 3>battling with is is enzyme is no longer being maintained

229
00:11:21.120 --> 00:11:22.879
<v Speaker 3>as well as we would like to have, and we

230
00:11:22.919 --> 00:11:26.360
<v Speaker 3>want to like be upgraded to REACT seventeen, and enzyme

231
00:11:26.840 --> 00:11:29.320
<v Speaker 3>required some workarounds to make that work. So we also

232
00:11:29.440 --> 00:11:31.919
<v Speaker 3>wanted to shift off of enzyme for testing, but we

233
00:11:31.960 --> 00:11:34.759
<v Speaker 3>didn't want to start that until the typescript was finished

234
00:11:34.799 --> 00:11:37.120
<v Speaker 3>because we'd have too many like inflight projects, and you

235
00:11:37.159 --> 00:11:40.000
<v Speaker 3>get everything half done and then everything is just awful

236
00:11:40.200 --> 00:11:41.600
<v Speaker 3>for a long long period of time.

237
00:11:42.000 --> 00:11:45.679
<v Speaker 5>Yes, we also we agreed that we wouldn't.

238
00:11:45.600 --> 00:11:50.440
<v Speaker 2>Use reacted hooks before the conversion, before the conversion was complete.

239
00:11:50.759 --> 00:11:53.759
<v Speaker 2>So this was one of the things that's motivated MEATS

240
00:11:53.799 --> 00:11:55.360
<v Speaker 2>to convert to even more fires.

241
00:11:55.480 --> 00:11:58.279
<v Speaker 5>I think not only be but to many many other colleagues.

242
00:11:58.759 --> 00:12:02.240
<v Speaker 2>So finally, now after the conversion, we can use react

243
00:12:02.240 --> 00:12:03.519
<v Speaker 2>to hooks.

244
00:12:04.159 --> 00:12:05.440
<v Speaker 5>Yay much better.

245
00:12:06.240 --> 00:12:09.279
<v Speaker 4>Yeah, all right. I mean it's only been a couple

246
00:12:09.320 --> 00:12:12.360
<v Speaker 4>of three years since React Hooks came out. I think

247
00:12:12.440 --> 00:12:15.559
<v Speaker 4>something like that two years. It's been a while. Yeah, yeah,

248
00:12:15.600 --> 00:12:20.960
<v Speaker 4>it's nice. That's a long time. So interesting A question

249
00:12:21.039 --> 00:12:22.759
<v Speaker 4>for you about the educational side of the house. I've

250
00:12:22.759 --> 00:12:25.840
<v Speaker 4>actually done a lot of Typescript education and written, done

251
00:12:25.840 --> 00:12:27.759
<v Speaker 4>a bunch of videos on it and all that, and

252
00:12:27.919 --> 00:12:30.360
<v Speaker 4>a lot of questions that I get are around the

253
00:12:30.399 --> 00:12:33.000
<v Speaker 4>misconception that Typescript has a run time to it, that

254
00:12:33.039 --> 00:12:34.919
<v Speaker 4>it's going to bloat your code because it's going to

255
00:12:35.000 --> 00:12:37.279
<v Speaker 4>do all this type checking and things like that. And

256
00:12:37.759 --> 00:12:39.879
<v Speaker 4>I find it challenging to kind of get through to

257
00:12:39.879 --> 00:12:43.240
<v Speaker 4>folks that Typescript is just at compile time only. There

258
00:12:43.279 --> 00:12:47.320
<v Speaker 4>is no run time version of Typescript. How how much

259
00:12:47.360 --> 00:12:49.080
<v Speaker 4>of a challenge was that for you to get that

260
00:12:49.159 --> 00:12:51.759
<v Speaker 4>across to your team members and what do you say

261
00:12:51.879 --> 00:12:53.480
<v Speaker 4>or do to make you get them to kind of

262
00:12:53.519 --> 00:12:54.000
<v Speaker 4>grock that.

263
00:12:54.320 --> 00:12:57.000
<v Speaker 3>I don't remember that coming up as a big problem.

264
00:12:57.000 --> 00:13:00.039
<v Speaker 3>We're fairly conscious of or bundle signs, so like just

265
00:13:00.080 --> 00:13:04.200
<v Speaker 3>comparing bundle size from the code that webpacker's generating from,

266
00:13:04.240 --> 00:13:06.799
<v Speaker 3>like the down compilation from like Yes six down to

267
00:13:07.080 --> 00:13:10.240
<v Speaker 3>or whatever version we were on, but Yes current down

268
00:13:10.279 --> 00:13:13.440
<v Speaker 3>to Yes five, and then comparing the typescripts compiled down.

269
00:13:13.759 --> 00:13:16.600
<v Speaker 3>We'd be able like it was pretty easy to demonstrate,

270
00:13:16.639 --> 00:13:20.000
<v Speaker 3>like there's no significant runtime cost on bundle size. So

271
00:13:20.480 --> 00:13:22.120
<v Speaker 3>I think that was the way to end that argument,

272
00:13:22.240 --> 00:13:24.639
<v Speaker 3>was like the bundle size is actually the same or smaller,

273
00:13:24.720 --> 00:13:28.440
<v Speaker 3>so it doesn't matter why typrip is doing it right.

274
00:13:28.919 --> 00:13:31.519
<v Speaker 4>Well, I think there's also things like like, for example,

275
00:13:31.639 --> 00:13:34.720
<v Speaker 4>if you put it an interface around where you're saying, okay,

276
00:13:34.720 --> 00:13:36.360
<v Speaker 4>this is what we expect from the server, right, and

277
00:13:36.360 --> 00:13:38.879
<v Speaker 4>then you get a response from the server and it

278
00:13:38.919 --> 00:13:42.000
<v Speaker 4>doesn't match the payload although the type that you have

279
00:13:42.039 --> 00:13:44.480
<v Speaker 4>in the interface, and people kind of expect that. Oh wait,

280
00:13:44.519 --> 00:13:47.039
<v Speaker 4>I thought typeseop was going to validate what was coming

281
00:13:47.039 --> 00:13:49.080
<v Speaker 4>back from the server. And you're like, no, that's not

282
00:13:49.200 --> 00:13:51.519
<v Speaker 4>the way that No, that's not type peop's not going

283
00:13:51.559 --> 00:13:53.679
<v Speaker 4>to do that for you. So is that something That

284
00:13:54.480 --> 00:13:56.879
<v Speaker 4>kind of thing is something that I find challenging.

285
00:13:57.480 --> 00:14:02.320
<v Speaker 2>Yes, yeah, so we are fortunately actually don't we don't

286
00:14:02.360 --> 00:14:05.960
<v Speaker 2>have our payload to type it. So many times we

287
00:14:06.039 --> 00:14:10.080
<v Speaker 2>have to cast it or we already know what data

288
00:14:10.200 --> 00:14:14.080
<v Speaker 2>we are going to get, so we we we add

289
00:14:14.080 --> 00:14:16.559
<v Speaker 2>in the front end the correct type.

290
00:14:17.000 --> 00:14:18.440
<v Speaker 5>But that's that's what we do.

291
00:14:20.279 --> 00:14:22.080
<v Speaker 3>That's what everyone has to do, though, Like there has

292
00:14:22.080 --> 00:14:23.720
<v Speaker 3>to be at the network boundary, you have to be like,

293
00:14:23.759 --> 00:14:25.200
<v Speaker 3>this is what's coming in. I promise.

294
00:14:25.559 --> 00:14:29.399
<v Speaker 4>I think you swear, I promise. That's the thing, right.

295
00:14:29.440 --> 00:14:32.360
<v Speaker 4>I think I think people have this understanding misunderstanding like oh,

296
00:14:32.480 --> 00:14:35.120
<v Speaker 4>type that actually going to be like a joy or

297
00:14:35.120 --> 00:14:37.759
<v Speaker 4>a yup which actually goes through and literally checks to

298
00:14:37.799 --> 00:14:39.600
<v Speaker 4>make sure that like oh there should be an idea

299
00:14:39.639 --> 00:14:42.000
<v Speaker 4>here and there's not that kind of thing. But it's

300
00:14:42.039 --> 00:14:46.639
<v Speaker 4>not gonna do that. Yeah, no, it doesn't do that.

301
00:14:46.639 --> 00:14:47.080
<v Speaker 3>That's her.

302
00:14:47.679 --> 00:14:50.639
<v Speaker 1>Are there any other learning guides you would recommend, like

303
00:14:50.759 --> 00:14:55.600
<v Speaker 1>any like you know, courses or books or anything that

304
00:14:55.919 --> 00:14:58.480
<v Speaker 1>you use for for learning or teaching others that you

305
00:14:58.559 --> 00:15:03.519
<v Speaker 1>might recommend teach typeescript. Yeah, and if not, that's okay too.

306
00:15:03.559 --> 00:15:05.519
<v Speaker 1>It's just so I.

307
00:15:05.480 --> 00:15:07.919
<v Speaker 2>Think in my face. For example, I learned it on

308
00:15:07.960 --> 00:15:10.759
<v Speaker 2>a daily basis. I needed to do something, so I

309
00:15:10.840 --> 00:15:14.279
<v Speaker 2>googled it and then I found a solution. I tested

310
00:15:14.360 --> 00:15:17.679
<v Speaker 2>and tried some things out, and yeah, I think it's

311
00:15:17.720 --> 00:15:23.039
<v Speaker 2>pretty much it. That are a lot of materials on internet. Yeah,

312
00:15:23.080 --> 00:15:24.840
<v Speaker 2>but I don't know one specific.

313
00:15:25.639 --> 00:15:28.320
<v Speaker 3>Yeah, I think we gave people like some links to

314
00:15:28.559 --> 00:15:31.320
<v Speaker 3>like learning typescript guides, Like there's a couple of well

315
00:15:31.320 --> 00:15:34.679
<v Speaker 3>published webbooks that are good. The official docs are really good,

316
00:15:35.039 --> 00:15:36.360
<v Speaker 3>and there's a lot of like if you want to

317
00:15:36.440 --> 00:15:39.320
<v Speaker 3>learn it, just like like message one of us on Slack,

318
00:15:39.360 --> 00:15:41.159
<v Speaker 3>we'll sit with you and talk you through it, or

319
00:15:41.240 --> 00:15:43.000
<v Speaker 3>like work with you on it. And that was a

320
00:15:43.000 --> 00:15:44.799
<v Speaker 3>lot of how we did it. And like I learned

321
00:15:44.799 --> 00:15:47.240
<v Speaker 3>to strip through this commersion. I never used typescript before,

322
00:15:47.879 --> 00:15:50.320
<v Speaker 3>so for me, it was just like learn on the job,

323
00:15:51.759 --> 00:15:54.600
<v Speaker 3>how do I do this? Like, Yeah, a lot of

324
00:15:54.679 --> 00:15:56.519
<v Speaker 3>a lot of that and my reading other people's code

325
00:15:56.639 --> 00:15:57.639
<v Speaker 3>stealing ideas.

326
00:15:57.960 --> 00:16:00.320
<v Speaker 2>When I joined at the Center, the typescript convey ession

327
00:16:00.440 --> 00:16:04.960
<v Speaker 2>was already happening, So I was happy because I had

328
00:16:05.159 --> 00:16:08.679
<v Speaker 2>typescripts and knowledge, and I was glad they could help

329
00:16:08.720 --> 00:16:12.720
<v Speaker 2>the team consequently speeding up the process so then we

330
00:16:12.759 --> 00:16:14.279
<v Speaker 2>could use hooks for example.

331
00:16:17.480 --> 00:16:21.799
<v Speaker 1>Yeah, so I'm curious now that you have typescript out

332
00:16:22.000 --> 00:16:25.519
<v Speaker 1>in production. Well, I guess, first of all, has it

333
00:16:25.720 --> 00:16:28.559
<v Speaker 1>helped stop some of the random bugs that you got

334
00:16:28.600 --> 00:16:31.960
<v Speaker 1>in with the first question? And I'm also curious, like,

335
00:16:32.000 --> 00:16:34.600
<v Speaker 1>now that you have a complete typescript code base, are

336
00:16:34.639 --> 00:16:37.799
<v Speaker 1>there any things that came up with typescript specifically that

337
00:16:37.879 --> 00:16:41.200
<v Speaker 1>you maybe didn't think about early on.

338
00:16:41.639 --> 00:16:45.000
<v Speaker 3>I would say the promise of, you know, solving some

339
00:16:45.039 --> 00:16:48.200
<v Speaker 3>of the runtime errors that could be caught by compilers

340
00:16:48.519 --> 00:16:51.440
<v Speaker 3>has come true. We haven't had a front end code

341
00:16:52.039 --> 00:16:54.919
<v Speaker 3>production incident that could have been caught by a compiler

342
00:16:55.000 --> 00:16:58.399
<v Speaker 3>that wasn't anymore, so we still have like people still

343
00:16:58.399 --> 00:17:01.120
<v Speaker 3>make mistakes. Type script is not a panalcya to solve

344
00:17:01.200 --> 00:17:04.720
<v Speaker 3>all bugs and prevent all problems. Doesn't do that, But

345
00:17:04.839 --> 00:17:06.880
<v Speaker 3>what it does do is stop you from like accessing

346
00:17:06.960 --> 00:17:10.200
<v Speaker 3>nulls and accessing undefines. So I would say those kinds

347
00:17:10.240 --> 00:17:13.319
<v Speaker 3>of like very visible customer problems have not been happening,

348
00:17:13.720 --> 00:17:17.279
<v Speaker 3>and it's forced people to think about types a little

349
00:17:17.319 --> 00:17:19.640
<v Speaker 3>bit better. So I feel like it helps design a

350
00:17:19.720 --> 00:17:22.720
<v Speaker 3>little bit ask for like things we didn't expect to happen.

351
00:17:23.039 --> 00:17:26.400
<v Speaker 3>Bill times have gotten longer just because the compiler. We

352
00:17:26.480 --> 00:17:28.559
<v Speaker 3>have a lot of Typescript, not a lot of touchcrip code,

353
00:17:28.559 --> 00:17:30.880
<v Speaker 3>but we have a sizeable chunk of Typescript codes, so

354
00:17:30.920 --> 00:17:33.640
<v Speaker 3>there is some added compile time. So we've tried to

355
00:17:33.720 --> 00:17:35.920
<v Speaker 3>mitigate that by like keeping as current as we can

356
00:17:36.000 --> 00:17:38.960
<v Speaker 3>with Typescript so that we always get the fastest compiler.

357
00:17:39.119 --> 00:17:39.960
<v Speaker 3>I guess how.

358
00:17:39.920 --> 00:17:42.440
<v Speaker 1>Much longer are we talking? How long does it take

359
00:17:42.440 --> 00:17:46.599
<v Speaker 1>the typescript compiler and your year app a couple of minutes? Okay,

360
00:17:46.799 --> 00:17:49.960
<v Speaker 1>and that's something you only experience. Like dev time is fine,

361
00:17:50.039 --> 00:17:52.240
<v Speaker 1>right because it's like compiling as you go, But just

362
00:17:52.440 --> 00:17:55.480
<v Speaker 1>when you build for like a release or whatever, I.

363
00:17:55.400 --> 00:17:58.839
<v Speaker 3>Think there's well, building for releases happens, like you merge

364
00:17:58.880 --> 00:18:01.720
<v Speaker 3>to master and then holding stuff happens, and then Docker

365
00:18:01.720 --> 00:18:03.759
<v Speaker 3>images have to be built, and like that whole Docker

366
00:18:03.799 --> 00:18:06.240
<v Speaker 3>image build process is the is a long part. I

367
00:18:06.240 --> 00:18:09.920
<v Speaker 3>would say the CI and local dev is the slower part,

368
00:18:09.960 --> 00:18:13.160
<v Speaker 3>where like spinning up webpacks, it has a like an

369
00:18:13.200 --> 00:18:16.279
<v Speaker 3>initial lead time of about a minute for it to

370
00:18:16.279 --> 00:18:19.039
<v Speaker 3>get started, and then in CI, like the linting and

371
00:18:19.039 --> 00:18:21.680
<v Speaker 3>type scripting checking takes a couple of minutes.

372
00:18:22.240 --> 00:18:26.160
<v Speaker 4>Interesting, Okay. I'm playing a lot with es build and

373
00:18:26.319 --> 00:18:30.759
<v Speaker 4>SWC lately, which are like Rust and go jsts compilers,

374
00:18:30.799 --> 00:18:34.480
<v Speaker 4>and in the right context, they can make a significant

375
00:18:35.079 --> 00:18:36.960
<v Speaker 4>difference in those compiled.

376
00:18:36.599 --> 00:18:39.400
<v Speaker 3>Times good time. That's the thing I would like to do.

377
00:18:39.440 --> 00:18:40.759
<v Speaker 3>We have a lot of we have a couple of

378
00:18:40.839 --> 00:18:44.279
<v Speaker 3>custom webpac module like custom web pack plugins, which makes

379
00:18:44.279 --> 00:18:48.119
<v Speaker 3>it hard because we're deeply entwined into Webpack. I've used

380
00:18:48.200 --> 00:18:51.599
<v Speaker 3>VTA on our fight on a little side project and

381
00:18:51.640 --> 00:18:55.519
<v Speaker 3>it was awesome. The compile times completely go away. But yeah,

382
00:18:55.559 --> 00:18:57.400
<v Speaker 3>we were kind of deep in the webpack pool.

383
00:18:59.079 --> 00:19:02.279
<v Speaker 4>Yeah, VAT is amazing. So I've heard a lot of

384
00:19:02.400 --> 00:19:05.880
<v Speaker 4>issues around a typescript and just kind of naysayers like

385
00:19:06.400 --> 00:19:08.559
<v Speaker 4>I just don't want to do typescript when it comes

386
00:19:08.599 --> 00:19:12.000
<v Speaker 4>to more comfortable jobascript. One of another complainert here is

387
00:19:12.160 --> 00:19:16.119
<v Speaker 4>that it makes code ugly. So is that something that

388
00:19:16.279 --> 00:19:18.720
<v Speaker 4>you had any resistance on folks saying I just don't

389
00:19:18.720 --> 00:19:19.480
<v Speaker 4>like the look of it.

390
00:19:20.000 --> 00:19:25.359
<v Speaker 3>Yes, Yes, the CTO was very much like typescript just

391
00:19:25.400 --> 00:19:28.519
<v Speaker 3>makes code ugly and hard to read, But we did it. Anyways.

392
00:19:28.759 --> 00:19:32.200
<v Speaker 3>I would say that like we also, like Century is

393
00:19:32.240 --> 00:19:34.839
<v Speaker 3>a is a mixed shop. So we have something we

394
00:19:34.880 --> 00:19:37.000
<v Speaker 3>have a lot of JavaScript, we have Python, and then

395
00:19:37.000 --> 00:19:39.400
<v Speaker 3>we also have Rust, and so typescript is not nearly

396
00:19:39.440 --> 00:19:42.240
<v Speaker 3>as ugly as rust, so it's quite.

397
00:19:42.119 --> 00:19:48.400
<v Speaker 4>Palatable fighting words right there.

398
00:19:48.680 --> 00:19:51.559
<v Speaker 1>It's funny. It's all in the idea to beholder, because

399
00:19:51.720 --> 00:19:54.119
<v Speaker 1>I worked for a company that was a long time

400
00:19:54.200 --> 00:19:57.279
<v Speaker 1>dot net shop, and they considered typescript like the height

401
00:19:57.319 --> 00:20:00.680
<v Speaker 1>of elegance, right because it's it's made by the same

402
00:20:00.960 --> 00:20:04.960
<v Speaker 1>person behind like c Sharp, who's like the dot net guru.

403
00:20:05.079 --> 00:20:07.119
<v Speaker 1>So they considered like tight script to be like an

404
00:20:07.200 --> 00:20:11.599
<v Speaker 1>enlightened form of JavaScript. And so I think it's it's

405
00:20:11.599 --> 00:20:13.640
<v Speaker 1>all relative to what your background is or what your

406
00:20:13.680 --> 00:20:14.880
<v Speaker 1>personal preferences are.

407
00:20:15.240 --> 00:20:18.079
<v Speaker 3>Yeah, so like the touch script is ugly. Camp came

408
00:20:18.079 --> 00:20:21.000
<v Speaker 3>from like Python, where everything is like very syntactically very

409
00:20:21.079 --> 00:20:24.400
<v Speaker 3>like it's low low noise or like low volume, I guess,

410
00:20:24.480 --> 00:20:27.240
<v Speaker 3>and touch script has a lot more like punctuation to it,

411
00:20:27.359 --> 00:20:31.480
<v Speaker 3>and Rust has more punctuation. I don't think Rust or

412
00:20:31.519 --> 00:20:34.160
<v Speaker 3>typescript are ugly, Like they're both very readable. They're just

413
00:20:34.279 --> 00:20:36.480
<v Speaker 3>you just have to have a lot more like the

414
00:20:36.559 --> 00:20:38.039
<v Speaker 3>dense they're just dense languages.

415
00:20:38.200 --> 00:20:39.640
<v Speaker 4>Oh no, I think we should stick with that because

416
00:20:39.640 --> 00:20:41.720
<v Speaker 4>it makes a great subtitle for the podcast. Is you

417
00:20:41.759 --> 00:20:44.359
<v Speaker 4>know once it again typescript, It's nowhere near as ugly

418
00:20:44.400 --> 00:20:44.880
<v Speaker 4>as rust.

419
00:20:45.240 --> 00:20:48.519
<v Speaker 1>And that's it right there, not as ugly as rust.

420
00:20:49.400 --> 00:20:52.440
<v Speaker 1>We should just call it is typescript code ugly. Just

421
00:20:55.319 --> 00:20:57.720
<v Speaker 1>I think it's like bait title right there. What you're

422
00:20:57.799 --> 00:21:00.319
<v Speaker 1>used to right like, you're not used to list list

423
00:21:00.359 --> 00:21:01.240
<v Speaker 1>could be very ugly.

424
00:21:01.599 --> 00:21:03.920
<v Speaker 4>All yeah, I think you can. There can definitely be

425
00:21:04.000 --> 00:21:06.720
<v Speaker 4>some readability issues when it comes to generics, and I

426
00:21:06.759 --> 00:21:11.200
<v Speaker 4>don't think any language that supports generics has actually solved

427
00:21:11.680 --> 00:21:15.000
<v Speaker 4>that challenge. But generics are incredibly important in retaining the

428
00:21:15.039 --> 00:21:19.720
<v Speaker 4>type safety of your components or whatever you're you're using.

429
00:21:20.359 --> 00:21:23.799
<v Speaker 4>So have you seen folks maybe almost go too far

430
00:21:24.319 --> 00:21:27.519
<v Speaker 4>with generics. I mean I've definitely seen that. As another complaint,

431
00:21:27.519 --> 00:21:30.839
<v Speaker 4>which is people saying, oh, you know, it gets really complex.

432
00:21:31.359 --> 00:21:33.200
<v Speaker 3>I would say we have we don't have a ton

433
00:21:33.240 --> 00:21:36.519
<v Speaker 3>of generics. We have a lot of intersection types, and

434
00:21:36.559 --> 00:21:38.440
<v Speaker 3>we've had typescript yell at us that the type is

435
00:21:38.480 --> 00:21:41.559
<v Speaker 3>too complicated. This came up when with our like main

436
00:21:41.640 --> 00:21:45.079
<v Speaker 3>event payload if you include all of the properties types

437
00:21:45.119 --> 00:21:48.720
<v Speaker 3>trips like no, I don't want to really, I've never

438
00:21:48.799 --> 00:21:52.000
<v Speaker 3>seen them. Yeah, Or that's another one we had was

439
00:21:52.400 --> 00:21:55.000
<v Speaker 3>the top level form like form input, where you can

440
00:21:55.039 --> 00:21:57.160
<v Speaker 3>push a type as a string, and then you can

441
00:21:57.160 --> 00:21:59.720
<v Speaker 3>get to all of the various input types in that

442
00:21:59.759 --> 00:22:01.759
<v Speaker 3>we have in century. We were just trying to like

443
00:22:01.960 --> 00:22:05.400
<v Speaker 3>intersection all of those types of like union, all of

444
00:22:05.400 --> 00:22:08.799
<v Speaker 3>those different formats together with a discriminated field and a

445
00:22:09.039 --> 00:22:10.839
<v Speaker 3>certain point too is like Noah, I don't want to

446
00:22:10.839 --> 00:22:14.400
<v Speaker 3>do this, Like there's too many conflicts. Wow, type it's

447
00:22:14.440 --> 00:22:15.720
<v Speaker 3>too big, please stop.

448
00:22:15.960 --> 00:22:19.200
<v Speaker 4>WHOA, I've never seen that.

449
00:22:19.160 --> 00:22:21.440
<v Speaker 3>It was not a good thing to say.

450
00:22:23.319 --> 00:22:25.440
<v Speaker 5>I don't think we have a lot of generics in

451
00:22:25.480 --> 00:22:26.039
<v Speaker 5>our cult.

452
00:22:26.599 --> 00:22:29.359
<v Speaker 3>Yeah, we have some, but not as not many, not

453
00:22:29.440 --> 00:22:32.079
<v Speaker 3>like there's not a lot of like three tier generics,

454
00:22:32.119 --> 00:22:34.279
<v Speaker 3>like the like generic of a generic of a generic,

455
00:22:34.319 --> 00:22:36.240
<v Speaker 3>Like we don't try just trying to do that.

456
00:22:36.839 --> 00:22:40.079
<v Speaker 1>One thing I've noticed from doing this podcast is that

457
00:22:40.160 --> 00:22:42.559
<v Speaker 1>the people that struggle with typescript the most seem to

458
00:22:42.559 --> 00:22:46.839
<v Speaker 1>be people like library authors that have these like general

459
00:22:46.880 --> 00:22:50.400
<v Speaker 1>purpose APIs, because those are the ones that are really

460
00:22:50.400 --> 00:22:52.480
<v Speaker 1>hard to configure, like if you're the person that's in

461
00:22:52.559 --> 00:22:56.640
<v Speaker 1>charge of making the types for like reactor or like

462
00:22:56.720 --> 00:22:58.759
<v Speaker 1>some of the libraries you were speaking of that had

463
00:22:58.799 --> 00:23:00.880
<v Speaker 1>for support, I imagine part of the reason why they

464
00:23:00.880 --> 00:23:02.920
<v Speaker 1>have pre support is that they have to get into

465
00:23:03.000 --> 00:23:06.559
<v Speaker 1>like crazy levels of like generics and intersection types because

466
00:23:06.960 --> 00:23:09.799
<v Speaker 1>they're kind of designed for general purpose use. So that's

467
00:23:09.799 --> 00:23:11.960
<v Speaker 1>where I think some of the struggles with typescript comes in.

468
00:23:12.039 --> 00:23:15.359
<v Speaker 1>But the thing is like in your average app, even

469
00:23:15.480 --> 00:23:18.480
<v Speaker 1>like big apps, like the ones you're working on, like that,

470
00:23:18.640 --> 00:23:22.200
<v Speaker 1>those are like fringe situations I feel like, because I mean,

471
00:23:22.200 --> 00:23:24.440
<v Speaker 1>most of the time the types you're dealing with while

472
00:23:24.440 --> 00:23:28.200
<v Speaker 1>you have objects to raise strings numbers, right, you're you're

473
00:23:28.240 --> 00:23:32.119
<v Speaker 1>not doing anything like crazy, And it sounds like that's

474
00:23:32.160 --> 00:23:34.000
<v Speaker 1>sort of the case with what you've been working on

475
00:23:34.079 --> 00:23:34.480
<v Speaker 1>as well.

476
00:23:35.000 --> 00:23:37.359
<v Speaker 3>Yeah, I would say, like for a lot of like

477
00:23:37.400 --> 00:23:41.519
<v Speaker 3>web applications, you're dealing with like API responses and then

478
00:23:42.000 --> 00:23:44.960
<v Speaker 3>converting those around like munging that data and then turning

479
00:23:45.000 --> 00:23:48.200
<v Speaker 3>it into into use state, right Like, so I would

480
00:23:48.240 --> 00:23:50.200
<v Speaker 3>completely agree that you're not dealing with the crazy generics,

481
00:23:50.200 --> 00:23:52.359
<v Speaker 3>I would say, yeah, And I think you're respont on

482
00:23:52.400 --> 00:23:55.559
<v Speaker 3>with like the library the library author part, Like, especially

483
00:23:55.599 --> 00:23:58.240
<v Speaker 3>if the library started off as as a JavaScript library

484
00:23:58.319 --> 00:24:00.519
<v Speaker 3>and then was converted to typescript. I think that's where

485
00:24:00.519 --> 00:24:03.799
<v Speaker 3>you really run into it because they've leveraged the dynamic

486
00:24:03.799 --> 00:24:06.359
<v Speaker 3>properties of JavaScript and like the ability to be very

487
00:24:06.359 --> 00:24:09.720
<v Speaker 3>polymorphic on anything and not kind of bite someone they

488
00:24:09.759 --> 00:24:11.759
<v Speaker 3>try and turn into the typeescript. Yeah.

489
00:24:11.799 --> 00:24:14.720
<v Speaker 1>I think it was last week. Week before, we were

490
00:24:15.039 --> 00:24:17.880
<v Speaker 1>talking to an author of a form library and they

491
00:24:17.880 --> 00:24:21.680
<v Speaker 1>were relaying horror stories of like it sounds like you

492
00:24:21.720 --> 00:24:24.480
<v Speaker 1>have a similar experience as well, Like they had form things,

493
00:24:24.519 --> 00:24:27.200
<v Speaker 1>but forms can contain all sorts of types, so they

494
00:24:27.200 --> 00:24:30.920
<v Speaker 1>got into some insanity in terms of defining that.

495
00:24:31.400 --> 00:24:33.440
<v Speaker 3>Yeah, I could see a form library being really hard.

496
00:24:34.000 --> 00:24:34.799
<v Speaker 5>Yeah.

497
00:24:35.079 --> 00:24:36.839
<v Speaker 4>One of the nice things about that though, is sometimes

498
00:24:36.839 --> 00:24:39.559
<v Speaker 4>you can kind of contain that in insanity. If you've got,

499
00:24:39.799 --> 00:24:44.559
<v Speaker 4>for example, a set of shared components, like the button

500
00:24:44.640 --> 00:24:46.880
<v Speaker 4>that you're using everywhere, right, the type definition of a

501
00:24:46.880 --> 00:24:49.160
<v Speaker 4>button might be a little bit complex because you might

502
00:24:49.200 --> 00:24:51.880
<v Speaker 4>be bringing in like detailed HTML props, which has a

503
00:24:51.920 --> 00:24:54.119
<v Speaker 4>really weird complex signature, but you want to get all

504
00:24:54.160 --> 00:24:57.000
<v Speaker 4>of the extra types for a button and you don't

505
00:24:57.000 --> 00:24:59.519
<v Speaker 4>want to define those yourself. So that's actually really nice.

506
00:24:59.599 --> 00:25:03.519
<v Speaker 4>But the complexity is sort of contained within that that

507
00:25:03.519 --> 00:25:06.440
<v Speaker 4>that library of your your share components, and then as

508
00:25:06.720 --> 00:25:09.319
<v Speaker 4>as a user, right, you just pull you just import

509
00:25:09.319 --> 00:25:10.920
<v Speaker 4>button and the next thing, you know, you get hinting

510
00:25:10.960 --> 00:25:14.279
<v Speaker 4>for on click and everything just works, and so that's

511
00:25:14.359 --> 00:25:16.279
<v Speaker 4>kind of nice. And sometimes, you know, you can hide

512
00:25:16.279 --> 00:25:18.680
<v Speaker 4>the complexity a little bit of the of the typescript stuff.

513
00:25:18.720 --> 00:25:21.079
<v Speaker 4>It's not in your face like all the time. I

514
00:25:21.119 --> 00:25:24.200
<v Speaker 4>feel like you get tuk with like well designed libraries. Yeah,

515
00:25:24.240 --> 00:25:27.559
<v Speaker 4>but it is tougher, I guess for older libraries that

516
00:25:28.000 --> 00:25:31.920
<v Speaker 4>were written in a style that was less kind of normalized.

517
00:25:31.960 --> 00:25:34.000
<v Speaker 4>Maybe you know, you have to start using some of

518
00:25:34.039 --> 00:25:36.680
<v Speaker 4>the weirder features of typescript to deal with that, like

519
00:25:36.920 --> 00:25:40.039
<v Speaker 4>function overloading, which I don't even think people know exists

520
00:25:40.079 --> 00:25:43.400
<v Speaker 4>inside typescript, but actually it does and you can use it.

521
00:25:43.799 --> 00:25:44.559
<v Speaker 3>We had to use it.

522
00:25:45.200 --> 00:25:48.880
<v Speaker 4>Oh there you go, Okay, you know when you need it.

523
00:25:48.880 --> 00:25:51.400
<v Speaker 4>It's actually really handy, but it's a it's a weird implementation.

524
00:25:51.440 --> 00:25:53.960
<v Speaker 4>It's not like C sharp or C plus plus or Java.

525
00:25:54.000 --> 00:25:56.039
<v Speaker 4>It's a sort of it's it's just kind of like

526
00:25:56.279 --> 00:25:59.480
<v Speaker 4>multiple signatures for actually what's really just one function.

527
00:26:00.880 --> 00:26:02.559
<v Speaker 3>But to use a lot of type guards to break

528
00:26:02.599 --> 00:26:05.599
<v Speaker 3>down our unions too into those. Yeah, those are some

529
00:26:05.680 --> 00:26:07.119
<v Speaker 3>of the like the weirder types of stuff we have

530
00:26:07.160 --> 00:26:11.000
<v Speaker 3>to use. Was function overloading, a lot of like type guards,

531
00:26:11.240 --> 00:26:15.880
<v Speaker 3>custom type guards and big unions and intersections.

532
00:26:14.839 --> 00:26:18.279
<v Speaker 1>Cool nice, So one thing it'd be fun to talk

533
00:26:18.279 --> 00:26:20.400
<v Speaker 1>about because I'm I know we have a lot of

534
00:26:20.480 --> 00:26:23.519
<v Speaker 1>listeners that are working on similar types of apps, right,

535
00:26:23.640 --> 00:26:26.160
<v Speaker 1>large projects that have been around for a while, and

536
00:26:26.200 --> 00:26:28.680
<v Speaker 1>that they also have a laundry list of things that

537
00:26:28.720 --> 00:26:31.400
<v Speaker 1>they want done, whether you know, they want to be

538
00:26:31.480 --> 00:26:33.880
<v Speaker 1>using hooks or they want to be using typescript or

539
00:26:34.240 --> 00:26:37.240
<v Speaker 1>whatever the case may be. So I'm curious, and we

540
00:26:37.240 --> 00:26:39.400
<v Speaker 1>did discuss some of this, but I'm curious if you

541
00:26:39.440 --> 00:26:43.720
<v Speaker 1>have any other advice for convincing like management that like, hey,

542
00:26:43.880 --> 00:26:46.359
<v Speaker 1>like this is a worthwhile effort, because I know that

543
00:26:46.400 --> 00:26:48.559
<v Speaker 1>can be a struggle for a lot of people to

544
00:26:48.880 --> 00:26:51.920
<v Speaker 1>get time sort of approved to do this, and then

545
00:26:52.000 --> 00:26:55.839
<v Speaker 1>also like seeing these projects through, because not every large

546
00:26:55.880 --> 00:26:59.200
<v Speaker 1>scale effort like this ends with one hundred percent conversion

547
00:26:59.440 --> 00:27:03.119
<v Speaker 1>and success, right, So it's kind of impressive that you

548
00:27:03.119 --> 00:27:05.599
<v Speaker 1>you push this to the finish line. So I'd be

549
00:27:05.640 --> 00:27:08.039
<v Speaker 1>curious if you have any other advice in terms of

550
00:27:08.359 --> 00:27:10.240
<v Speaker 1>how to make that sort of thing happen and how

551
00:27:10.240 --> 00:27:12.599
<v Speaker 1>to see something of this scale through.

552
00:27:12.920 --> 00:27:16.920
<v Speaker 2>So how to convince management to adopt type script. I

553
00:27:16.960 --> 00:27:20.960
<v Speaker 2>would say that only the possibility to catch errors on

554
00:27:21.000 --> 00:27:22.240
<v Speaker 2>the compiled times.

555
00:27:22.519 --> 00:27:26.240
<v Speaker 5>It's amazing, you know, So this is amazing.

556
00:27:26.480 --> 00:27:31.160
<v Speaker 2>Also we could reduce the need for API documentation because

557
00:27:31.200 --> 00:27:36.559
<v Speaker 2>type script it self self explain everything the type and

558
00:27:36.640 --> 00:27:42.119
<v Speaker 2>also autocompletion. So I believe this type script the team,

559
00:27:42.279 --> 00:27:48.799
<v Speaker 2>it's faster, the product productivity is faster than usual.

560
00:27:50.279 --> 00:27:52.759
<v Speaker 3>Guess on the like how do you get it to finish?

561
00:27:53.559 --> 00:27:56.039
<v Speaker 3>We're really fortunate that we have we have like a

562
00:27:56.079 --> 00:28:00.680
<v Speaker 3>front end steering community, and the main contributors to the

563
00:28:00.680 --> 00:28:03.839
<v Speaker 3>Techica project were also part of that kind of steering committee,

564
00:28:03.920 --> 00:28:05.559
<v Speaker 3>and so we just had to kind of stick to

565
00:28:05.599 --> 00:28:09.039
<v Speaker 3>our guns, like no new big projects until this one

566
00:28:09.119 --> 00:28:13.440
<v Speaker 3>is finished. And towards the end of the project, we

567
00:28:13.440 --> 00:28:15.400
<v Speaker 3>were kind of like every week kind of asking people

568
00:28:15.400 --> 00:28:17.240
<v Speaker 3>like how many files are you going to convert? People

569
00:28:17.240 --> 00:28:19.680
<v Speaker 3>would volunteer like convert a couple, or I'll convert two

570
00:28:19.799 --> 00:28:22.480
<v Speaker 3>or I'll convert three, and then every week check in

571
00:28:22.519 --> 00:28:24.359
<v Speaker 3>with those people like did you get your stuff done?

572
00:28:24.400 --> 00:28:25.920
<v Speaker 3>What are you going to do next week? And that

573
00:28:26.000 --> 00:28:31.480
<v Speaker 3>helps kind of like gamify lightly people's desire to be involved.

574
00:28:31.759 --> 00:28:34.200
<v Speaker 3>I would say another thing that helped us finish was

575
00:28:34.240 --> 00:28:36.000
<v Speaker 3>that we did it in the long term, and so

576
00:28:36.039 --> 00:28:38.680
<v Speaker 3>we weren't rushing to meet a deadline. Instead, we were

577
00:28:38.680 --> 00:28:41.319
<v Speaker 3>just giving updates on like when we would finish. So

578
00:28:41.480 --> 00:28:43.400
<v Speaker 3>instead of it being like you must be finished by

579
00:28:43.480 --> 00:28:47.400
<v Speaker 3>December of twenty twenty, or your project is out of gas,

580
00:28:47.640 --> 00:28:49.400
<v Speaker 3>it was more like we're just going to do this slow.

581
00:28:49.680 --> 00:28:51.680
<v Speaker 3>We're going to do it the right way, like the

582
00:28:51.759 --> 00:28:53.960
<v Speaker 3>right way for us, which is like not slap any

583
00:28:54.039 --> 00:28:57.279
<v Speaker 3>on everything and do a machine organization. We're going to

584
00:28:57.319 --> 00:28:59.319
<v Speaker 3>take our time, going to do it, you know, so

585
00:28:59.359 --> 00:29:01.400
<v Speaker 3>that we have something that we're proud of when we're finished,

586
00:29:01.640 --> 00:29:04.240
<v Speaker 3>and then just give updates on when we will be done.

587
00:29:04.960 --> 00:29:07.079
<v Speaker 3>And then as long as people were meeting their project

588
00:29:07.119 --> 00:29:09.960
<v Speaker 3>delivery like deliverables, the front time folks were able to

589
00:29:10.000 --> 00:29:12.000
<v Speaker 3>focus as much as they wanted on tuch script. That

590
00:29:12.039 --> 00:29:14.720
<v Speaker 3>was the kind of like their B project was converting

591
00:29:14.759 --> 00:29:17.240
<v Speaker 3>to touch script, and all the managers, like all the

592
00:29:17.279 --> 00:29:19.960
<v Speaker 3>team managers knew about it, all the engineering managers knew

593
00:29:19.960 --> 00:29:22.039
<v Speaker 3>about it, knew who was contributing to it, and so

594
00:29:22.079 --> 00:29:23.880
<v Speaker 3>they were kind of like on board, like this is

595
00:29:23.920 --> 00:29:25.079
<v Speaker 3>this person's be project.

596
00:29:25.400 --> 00:29:27.400
<v Speaker 1>Yeah, I think all that is great, Like I like

597
00:29:27.440 --> 00:29:30.440
<v Speaker 1>Priscilla's points of proving to management. It's like a lot

598
00:29:30.440 --> 00:29:33.559
<v Speaker 1>of those points you made were really about proving that

599
00:29:33.599 --> 00:29:36.319
<v Speaker 1>this is going to be long term a net positive right,

600
00:29:36.440 --> 00:29:39.400
<v Speaker 1>like well, like the fewer bugs and more productivity will

601
00:29:39.400 --> 00:29:42.319
<v Speaker 1>make this time like pay off and the long run.

602
00:29:43.039 --> 00:29:45.039
<v Speaker 1>And then I also like the points just in terms

603
00:29:45.119 --> 00:29:47.680
<v Speaker 1>of keep seeing this through to the finish, like the

604
00:29:48.119 --> 00:29:51.839
<v Speaker 1>accountability bit, like having someone that's in charge of the

605
00:29:51.880 --> 00:29:55.400
<v Speaker 1>project that reaches out and forces people to say, I'm

606
00:29:55.400 --> 00:29:58.720
<v Speaker 1>going to do this and almost gamifying it a little bit,

607
00:29:58.880 --> 00:30:01.640
<v Speaker 1>or at least like holding people accountable so that there's

608
00:30:01.680 --> 00:30:06.079
<v Speaker 1>that constant update, like it doesn't get lost because I

609
00:30:06.119 --> 00:30:08.200
<v Speaker 1>know what, I've been involved in projects like this before.

610
00:30:08.319 --> 00:30:11.680
<v Speaker 1>Sometimes it's going well, but then some big feature comes

611
00:30:11.720 --> 00:30:16.079
<v Speaker 1>down from business or some big bug happens, and then

612
00:30:16.079 --> 00:30:18.880
<v Speaker 1>all of a sudden, like this thing that's very low

613
00:30:18.920 --> 00:30:24.519
<v Speaker 1>priority gets sidetracked sometimes to never reappear. So I think

614
00:30:24.559 --> 00:30:27.319
<v Speaker 1>having like someone on it and someone constantly checking in

615
00:30:27.440 --> 00:30:29.839
<v Speaker 1>through all of that can make a big difference.

616
00:30:30.480 --> 00:30:35.039
<v Speaker 6>Yeah, I'd also say another thing that helped us was like, yeah,

617
00:30:35.119 --> 00:30:39.319
<v Speaker 6>constantly checking in, constantly double checking, and then also making

618
00:30:39.359 --> 00:30:41.200
<v Speaker 6>sure all the new code was written in touch shriped

619
00:30:41.279 --> 00:30:44.640
<v Speaker 6>was a big monumental thing to get done, was like

620
00:30:45.000 --> 00:30:47.759
<v Speaker 6>convince everyone that touch script is worth learning and then

621
00:30:47.799 --> 00:30:51.400
<v Speaker 6>also get them to stop writing JavaScript, because if we

622
00:30:51.440 --> 00:30:52.400
<v Speaker 6>never stopped writing.

623
00:30:52.279 --> 00:30:54.759
<v Speaker 3>JavaScript, we would never finish. And so for us to

624
00:30:54.759 --> 00:30:56.759
<v Speaker 3>be able to complete, like and to prove that the

625
00:30:56.799 --> 00:30:59.680
<v Speaker 3>tuchrip project was going to actually finish both through ourselves

626
00:30:59.720 --> 00:31:02.200
<v Speaker 3>and up management, was to get everyone to stop writing cabscript.

627
00:31:02.240 --> 00:31:04.920
<v Speaker 3>And we're way past that point now, but that was

628
00:31:04.960 --> 00:31:07.440
<v Speaker 3>a that was a key turning point, was getting everyone

629
00:31:07.480 --> 00:31:07.920
<v Speaker 3>on board.

630
00:31:08.200 --> 00:31:11.000
<v Speaker 4>Yeah, so that actually leads a question, So would you

631
00:31:11.559 --> 00:31:15.000
<v Speaker 4>personally ever want to work on a streat JavaScript application?

632
00:31:15.119 --> 00:31:19.559
<v Speaker 3>Again, Yeah, it would. It's not as good as like typeshrip,

633
00:31:19.599 --> 00:31:21.240
<v Speaker 3>Like you get a lot more benefits out of having

634
00:31:21.279 --> 00:31:22.559
<v Speaker 3>it in type strip. And if I was to start

635
00:31:22.559 --> 00:31:24.880
<v Speaker 3>a new project, I would definitely start it in typescript.

636
00:31:25.039 --> 00:31:26.079
<v Speaker 3>Sure how about you, Priscilla?

637
00:31:26.279 --> 00:31:27.480
<v Speaker 5>Yeah, me too, Me too.

638
00:31:27.640 --> 00:31:30.839
<v Speaker 2>Last week we had again heck quick and I work

639
00:31:30.920 --> 00:31:34.680
<v Speaker 2>it on two projects and I used typescript. So I

640
00:31:34.720 --> 00:31:39.440
<v Speaker 2>started from scratch and I decided to use tapscript because yeah,

641
00:31:39.480 --> 00:31:40.279
<v Speaker 2>I really like it.

642
00:31:40.559 --> 00:31:44.240
<v Speaker 4>And I think that's something again with talking to management, right,

643
00:31:44.519 --> 00:31:47.160
<v Speaker 4>hiring is always an issue. It's a very hot hiring

644
00:31:47.160 --> 00:31:50.000
<v Speaker 4>market right now. People can move between jobs very quickly,

645
00:31:50.279 --> 00:31:53.200
<v Speaker 4>and people are evaluating what they're going to be going into.

646
00:31:53.640 --> 00:31:56.680
<v Speaker 4>And if you're saying, hey, you know, we're doing React

647
00:31:56.759 --> 00:32:00.839
<v Speaker 4>circa twenty fifteen in JavaScript, come on down, we were

648
00:32:00.839 --> 00:32:04.480
<v Speaker 4>going to be like, I really enjoy you know, typescript

649
00:32:04.559 --> 00:32:08.440
<v Speaker 4>and hooks. I mean Rizilla's like, yes, hooks, you know,

650
00:32:09.759 --> 00:32:11.759
<v Speaker 4>so you want to work in a modern code base.

651
00:32:12.039 --> 00:32:13.319
<v Speaker 4>And I think that's the thing, you know, when you

652
00:32:13.319 --> 00:32:15.240
<v Speaker 4>talk managements as a selling.

653
00:32:15.000 --> 00:32:17.599
<v Speaker 3>Point, Yeah, for sure, And I think that was something

654
00:32:17.680 --> 00:32:20.839
<v Speaker 3>our like our vps knew as well, Like the VP

655
00:32:21.000 --> 00:32:23.400
<v Speaker 3>that we were working with then is like very much

656
00:32:23.480 --> 00:32:26.000
<v Speaker 3>understanding of that. People want to be on the vanguard

657
00:32:26.000 --> 00:32:28.480
<v Speaker 3>and want to be working with new stuff when Century

658
00:32:28.480 --> 00:32:31.119
<v Speaker 3>as a company does that a lot as well. So

659
00:32:32.559 --> 00:32:34.359
<v Speaker 3>I think that's an important point to make if you're

660
00:32:34.400 --> 00:32:37.839
<v Speaker 3>in an organization where that isn't part of the company's culture.

661
00:32:38.119 --> 00:32:40.240
<v Speaker 2>I'd like to addit that we are always trying to

662
00:32:41.559 --> 00:32:46.039
<v Speaker 2>introduce new technologies and for example, now we just introduced

663
00:32:46.200 --> 00:32:50.640
<v Speaker 2>reactive Testing Library, so we are planning of converting our

664
00:32:50.799 --> 00:32:54.960
<v Speaker 2>tests to from ENSIGN to reacted Testing Library, and that's

665
00:32:55.000 --> 00:32:55.519
<v Speaker 2>pretty cool.

666
00:32:55.839 --> 00:32:58.359
<v Speaker 1>Yeah, I was just going to say that the it's

667
00:32:58.400 --> 00:33:01.599
<v Speaker 1>a really good point that like sometimes like you, you

668
00:33:01.720 --> 00:33:04.279
<v Speaker 1>are not in control of your management and your your

669
00:33:04.279 --> 00:33:08.759
<v Speaker 1>team or like entire organization. And not to put this

670
00:33:08.839 --> 00:33:11.440
<v Speaker 1>to blunt, but I mean, if if your organization is

671
00:33:11.480 --> 00:33:14.000
<v Speaker 1>really obstinate, if your managers aren't great, you know, it

672
00:33:14.039 --> 00:33:17.880
<v Speaker 1>is a hiring markets. You know, there are other decent

673
00:33:17.960 --> 00:33:20.480
<v Speaker 1>teams out there. So if you really are like super

674
00:33:20.599 --> 00:33:23.920
<v Speaker 1>super struggling and working on stuff you're not interested in,

675
00:33:24.400 --> 00:33:28.559
<v Speaker 1>maybe you consider other things as well, because they're everybody's

676
00:33:28.559 --> 00:33:31.759
<v Speaker 1>got like old code you know, bad code bases and such.

677
00:33:31.799 --> 00:33:34.839
<v Speaker 1>But having a culture that encourages that sort of thing

678
00:33:35.400 --> 00:33:37.440
<v Speaker 1>and allows you to you know, ramp up over time,

679
00:33:37.480 --> 00:33:38.720
<v Speaker 1>I think is a really big deal.

680
00:33:39.359 --> 00:33:41.440
<v Speaker 3>Like century is an old code base, it's coming up

681
00:33:41.440 --> 00:33:43.559
<v Speaker 3>on eight nine years. But at the same time, we

682
00:33:43.599 --> 00:33:47.079
<v Speaker 3>also like to fix it and see the value in

683
00:33:47.079 --> 00:33:49.799
<v Speaker 3>investing it and making it current and like keeping it

684
00:33:49.839 --> 00:33:52.559
<v Speaker 3>up to day. Like on the on the not front time,

685
00:33:52.599 --> 00:33:56.240
<v Speaker 3>we've just finished like a humongous amount of Python upgrades,

686
00:33:56.279 --> 00:33:59.000
<v Speaker 3>like from Python two to Python three, from Jengle one

687
00:33:59.039 --> 00:34:00.880
<v Speaker 3>to six, all the way to gay Go two point two.

688
00:34:00.960 --> 00:34:03.079
<v Speaker 3>Like that's been eight months of work, and all of

689
00:34:03.119 --> 00:34:04.559
<v Speaker 3>that is to get us up to a new version

690
00:34:04.559 --> 00:34:07.880
<v Speaker 3>of Pythons so we can get performance. Actually the main

691
00:34:07.960 --> 00:34:08.639
<v Speaker 3>driver of that.

692
00:34:08.840 --> 00:34:11.239
<v Speaker 1>And I have to imagine too, like like pushing those

693
00:34:11.280 --> 00:34:14.639
<v Speaker 1>things to production is immensely satisfying as well. Like it's

694
00:34:14.719 --> 00:34:17.119
<v Speaker 1>it's like the same sort of things that like when

695
00:34:17.159 --> 00:34:19.519
<v Speaker 1>you finish. Like for me, it's like if I'm I

696
00:34:19.599 --> 00:34:22.079
<v Speaker 1>like if I mow my lawn, Like there's that moment

697
00:34:22.199 --> 00:34:24.599
<v Speaker 1>like when you're done, Like I hate mowing my lawn,

698
00:34:24.639 --> 00:34:26.639
<v Speaker 1>But at the same time, when I'm done, like looking

699
00:34:26.639 --> 00:34:28.599
<v Speaker 1>out over it, it's like, yeah, I crushed that, Like

700
00:34:28.599 --> 00:34:29.679
<v Speaker 1>look how good that grasped.

701
00:34:29.800 --> 00:34:32.039
<v Speaker 4>Yeah, I was gonna say, like that last puzzle piece,

702
00:34:32.280 --> 00:34:34.360
<v Speaker 4>you know, when you got a thousand piece puzzle. I

703
00:34:34.360 --> 00:34:37.639
<v Speaker 4>can only imagine like that last JSTS file, right, the

704
00:34:37.679 --> 00:34:42.280
<v Speaker 4>last commit was like, yes, we did it, you know

705
00:34:42.400 --> 00:34:44.760
<v Speaker 4>as a team. You know, if you're in slack, you're like, yeah,

706
00:34:45.000 --> 00:34:46.119
<v Speaker 4>that last little.

707
00:34:45.840 --> 00:34:47.440
<v Speaker 5>Bit, Yes, we celebrate it.

708
00:34:47.519 --> 00:34:50.800
<v Speaker 4>I want Yeah, nice, Priscilla, was that your your file?

709
00:34:50.840 --> 00:34:53.159
<v Speaker 4>Who was the last person to actually like do the

710
00:34:53.199 --> 00:34:53.760
<v Speaker 4>last file?

711
00:34:53.960 --> 00:34:57.320
<v Speaker 3>I think it was vin a right of us. I

712
00:34:57.320 --> 00:34:58.760
<v Speaker 3>think it was one of the other one of the

713
00:34:58.840 --> 00:34:59.360
<v Speaker 3>other folks.

714
00:35:00.039 --> 00:35:04.280
<v Speaker 2>We let the lashest files, the most complex files.

715
00:35:04.159 --> 00:35:08.800
<v Speaker 5>To the end, and yeah, I can't remember the last

716
00:35:08.800 --> 00:35:09.119
<v Speaker 5>to us.

717
00:35:11.239 --> 00:35:13.840
<v Speaker 3>Yeah, there's some like changing of tactics through it. It

718
00:35:13.920 --> 00:35:15.639
<v Speaker 3>was like start with the biggest, start with the files

719
00:35:15.679 --> 00:35:17.559
<v Speaker 3>that are important the most. Then start with the files

720
00:35:17.599 --> 00:35:20.360
<v Speaker 3>that are imported with the least because these most important

721
00:35:20.400 --> 00:35:23.599
<v Speaker 3>files are becoming annoying. And then it was like important

722
00:35:23.639 --> 00:35:26.000
<v Speaker 3>you do like one whole view tree. There was a

723
00:35:26.000 --> 00:35:27.960
<v Speaker 3>bunch of different tactics, but yeah, there was a bunch

724
00:35:27.960 --> 00:35:28.960
<v Speaker 3>of big rocks at the end.

725
00:35:29.719 --> 00:35:32.400
<v Speaker 4>Yeah, you did mention that in the article where you mentioned,

726
00:35:32.440 --> 00:35:34.760
<v Speaker 4>you know, there's sometimes you work from the core and

727
00:35:34.800 --> 00:35:37.079
<v Speaker 4>other times you work from the leaves. And that's actually

728
00:35:37.119 --> 00:35:40.119
<v Speaker 4>a very interesting question out there is, hey, we get

729
00:35:40.159 --> 00:35:42.280
<v Speaker 4>the typescript is awesome, you know, how do we go

730
00:35:42.320 --> 00:35:45.480
<v Speaker 4>and take our twenty thousand and thirty thousand file project

731
00:35:45.599 --> 00:35:48.559
<v Speaker 4>and bring that over? Like, what what are some good strategies?

732
00:35:48.559 --> 00:35:50.960
<v Speaker 4>And I don't unfortunately I think the answer probably there

733
00:35:51.039 --> 00:35:58.639
<v Speaker 4>is It depends terrible answer. Yes, yes totally.

734
00:35:58.960 --> 00:36:01.079
<v Speaker 3>I would say, like, try a bunch of different approaches

735
00:36:01.199 --> 00:36:03.360
<v Speaker 3>and see which ones help you get progress, Like the

736
00:36:03.719 --> 00:36:06.760
<v Speaker 3>if your goal is to convert that twenty thousand file project.

737
00:36:06.760 --> 00:36:08.599
<v Speaker 3>Over do the things that are going to help you

738
00:36:08.639 --> 00:36:10.480
<v Speaker 3>get progress, like if you're going to measure progress on

739
00:36:10.599 --> 00:36:14.199
<v Speaker 3>number of files, aim for like choose whatever tactic is

740
00:36:14.199 --> 00:36:16.159
<v Speaker 3>going to yield you the most amount of progress at

741
00:36:16.199 --> 00:36:18.639
<v Speaker 3>the beginning, so you can get a good foothold so

742
00:36:18.679 --> 00:36:21.760
<v Speaker 3>you can get people invested and get people ready to

743
00:36:22.199 --> 00:36:22.639
<v Speaker 3>help out.

744
00:36:22.960 --> 00:36:24.920
<v Speaker 4>Yeah, you want to finish up on that. I feel

745
00:36:24.920 --> 00:36:27.159
<v Speaker 4>like you left out. Okay, that's cool, all right, awesome,

746
00:36:27.320 --> 00:36:30.920
<v Speaker 4>very cool. Well this has been really really fun. I

747
00:36:30.960 --> 00:36:33.960
<v Speaker 4>think now is the time to get into this week's picks,

748
00:36:34.440 --> 00:36:37.400
<v Speaker 4>So mark one, lead us off on your pick for

749
00:36:37.440 --> 00:36:37.960
<v Speaker 4>this week.

750
00:36:38.559 --> 00:36:40.559
<v Speaker 3>Sure, yeah, I would say the new version of them,

751
00:36:40.880 --> 00:36:45.199
<v Speaker 3>NEOHIM zero five has native language server support, so you

752
00:36:45.239 --> 00:36:48.159
<v Speaker 3>can configure neovim with LUO, which is nice. You don't

753
00:36:48.199 --> 00:36:51.679
<v Speaker 3>have to use vimscripts, which is my least favorite programming language,

754
00:36:51.840 --> 00:36:54.360
<v Speaker 3>and you can use LUI descripted and then the native

755
00:36:54.480 --> 00:36:57.159
<v Speaker 3>LSP look looks really good and works really well. So

756
00:36:57.480 --> 00:36:59.119
<v Speaker 3>check out new of them and some of the new

757
00:36:59.239 --> 00:37:02.639
<v Speaker 3>native LSP. Very cool about you, Bricella.

758
00:37:02.760 --> 00:37:04.280
<v Speaker 5>Oh I think so?

759
00:37:04.679 --> 00:37:05.000
<v Speaker 4>Yeah?

760
00:37:05.039 --> 00:37:08.039
<v Speaker 2>So that is this library D and D kit. I

761
00:37:08.079 --> 00:37:11.079
<v Speaker 2>really like that one. It's They have an amazing documentation.

762
00:37:11.760 --> 00:37:16.960
<v Speaker 2>It's very easy to customize and yeah, it's amazing the library.

763
00:37:17.039 --> 00:37:18.440
<v Speaker 2>It's very light as well.

764
00:37:19.039 --> 00:37:21.480
<v Speaker 4>What did you do? D and D kit? Yeah, it's

765
00:37:21.599 --> 00:37:22.199
<v Speaker 4>not disturbed.

766
00:37:22.800 --> 00:37:27.199
<v Speaker 2>So recently we had to introduce dragon drop in century

767
00:37:27.920 --> 00:37:31.320
<v Speaker 2>and we founded this library and it's amazing.

768
00:37:31.639 --> 00:37:33.599
<v Speaker 5>We are really enjoying using it.

769
00:37:33.840 --> 00:37:34.079
<v Speaker 3>Cool.

770
00:37:34.159 --> 00:37:36.079
<v Speaker 4>Yeah, there's so many D and ds. There's dragon draw

771
00:37:36.519 --> 00:37:40.840
<v Speaker 4>theres do not disturb Dungeons and Dragons. It's very very popular,

772
00:37:41.159 --> 00:37:43.119
<v Speaker 4>you know, three letter combination.

773
00:37:43.360 --> 00:37:43.920
<v Speaker 3>I guess.

774
00:37:44.159 --> 00:37:45.000
<v Speaker 5>Yeah.

775
00:37:45.280 --> 00:37:47.960
<v Speaker 4>And for my pick, I am going to go with

776
00:37:48.320 --> 00:37:51.039
<v Speaker 4>a bit more metaphorical. Just the power of saying no.

777
00:37:51.400 --> 00:37:52.960
<v Speaker 4>I know that we just we talked a little bit

778
00:37:53.000 --> 00:37:55.960
<v Speaker 4>about burnout in the beginning of this episode, and the

779
00:37:56.639 --> 00:38:01.000
<v Speaker 4>I find the major key for me to avoid burnout

780
00:38:01.360 --> 00:38:04.000
<v Speaker 4>is to just say no, you know, reduce the amount

781
00:38:04.000 --> 00:38:06.000
<v Speaker 4>of stuff on your plate. You get less stressed out,

782
00:38:06.519 --> 00:38:09.559
<v Speaker 4>and you just feel better about the attraction you make

783
00:38:09.559 --> 00:38:11.440
<v Speaker 4>in a day by saying no to a lot of

784
00:38:11.440 --> 00:38:13.639
<v Speaker 4>these small projects, even the ones that you want to

785
00:38:13.679 --> 00:38:16.719
<v Speaker 4>do for yourself. So I think that's really important.

786
00:38:16.880 --> 00:38:20.320
<v Speaker 2>I think here, I read a book about it, but

787
00:38:20.440 --> 00:38:23.480
<v Speaker 2>I can't remember the title. How to give a sheet.

788
00:38:23.760 --> 00:38:27.039
<v Speaker 2>I don't I cannot remember the time, but it was

789
00:38:27.119 --> 00:38:29.079
<v Speaker 2>exactly about it the.

790
00:38:29.079 --> 00:38:29.760
<v Speaker 5>Power of no.

791
00:38:30.440 --> 00:38:32.960
<v Speaker 4>Yeah. I know we all want to be nice people,

792
00:38:33.039 --> 00:38:35.679
<v Speaker 4>we all want to help out our friends and all that,

793
00:38:35.719 --> 00:38:37.760
<v Speaker 4>but you know, you can just get snowed under on

794
00:38:37.840 --> 00:38:40.920
<v Speaker 4>all these things, and work is just work alone is

795
00:38:41.039 --> 00:38:44.079
<v Speaker 4>very stressful. So you know you don't want to take

796
00:38:44.119 --> 00:38:45.400
<v Speaker 4>on too much. You want to live a happy and

797
00:38:45.440 --> 00:38:47.960
<v Speaker 4>healthy life and you know, go out and do kayaking

798
00:38:48.039 --> 00:38:51.239
<v Speaker 4>or whatever you enjoy. So take that time and be

799
00:38:51.360 --> 00:38:54.559
<v Speaker 4>confident and say no, yes, definitely, TJ, you want to

800
00:38:54.599 --> 00:38:55.039
<v Speaker 4>take us out.

801
00:38:55.239 --> 00:38:57.880
<v Speaker 1>Yeah. I will not be picking comcasts this week, as

802
00:38:58.199 --> 00:39:00.800
<v Speaker 1>I hope this doesn't come through the editing, but my

803
00:39:00.920 --> 00:39:04.639
<v Speaker 1>Internet has been catastrophic here lately. But I will pick

804
00:39:04.719 --> 00:39:09.239
<v Speaker 1>a window manager for the Mac called Divvy dvv y,

805
00:39:09.679 --> 00:39:12.000
<v Speaker 1>one thing that I am shocked the Mac still doesn't

806
00:39:12.000 --> 00:39:13.960
<v Speaker 1>have it built in, just a way of snapping a

807
00:39:14.039 --> 00:39:17.480
<v Speaker 1>window to a certain part of a screen. It's crazy

808
00:39:17.519 --> 00:39:19.079
<v Speaker 1>to me that you have to like look out for

809
00:39:19.079 --> 00:39:21.440
<v Speaker 1>a third party app for that. But Divvy is a

810
00:39:21.440 --> 00:39:23.920
<v Speaker 1>pretty decent one if you don't already have one, and

811
00:39:24.159 --> 00:39:26.599
<v Speaker 1>I'd recommend it, especially if you have like a widescreen

812
00:39:26.599 --> 00:39:29.599
<v Speaker 1>monitor just because being able to dock windows is super

813
00:39:29.719 --> 00:39:32.280
<v Speaker 1>nice and super time saving.

814
00:39:32.599 --> 00:39:35.079
<v Speaker 4>Absolutely thanks for that. I'll check that out all right. Well,

815
00:39:35.079 --> 00:39:36.559
<v Speaker 4>thank you so much for showing up. That was an

816
00:39:36.559 --> 00:39:38.880
<v Speaker 4>awesome episode and we'll see you next week.

817
00:39:39.840 --> 00:39:41.679
<v Speaker 5>See
