WEBVTT
1
00:00:05.280 --> 00:00:09.000
Hey, folks, Welcome back to another JavaScript jabber. This week
2
00:00:09.000 --> 00:00:11.199
on our panel, we have Dan Shapeer.
3
00:00:11.800 --> 00:00:14.560
Hello, from what we in Tel Aviv like to call
4
00:00:14.640 --> 00:00:15.000
it winter.
5
00:00:16.839 --> 00:00:19.320
Well, I wish our winters were that warm. I'm Charles
6
00:00:19.320 --> 00:00:21.640
Maxwood from top Endevs, where I think you got below
7
00:00:21.679 --> 00:00:25.760
freezing last night. That zero if you're not in the
8
00:00:25.879 --> 00:00:30.320
US and use something other than fahrenheit, and that's like
9
00:00:30.359 --> 00:00:33.600
thirty two degrees fahrenheit, So got real cold last night.
10
00:00:35.359 --> 00:00:38.200
This week, we're following up on the nine Node Pillars
11
00:00:38.320 --> 00:00:40.159
episode that came out a few weeks ago or a
12
00:00:40.200 --> 00:00:43.679
month ago, so we've got some familiar faces, but we'll
13
00:00:43.679 --> 00:00:46.159
go ahead and let them introduce themselves again. I'm just
14
00:00:46.240 --> 00:00:49.000
going to start at the top of my screen and
15
00:00:49.079 --> 00:00:51.240
we'll just kind of work our way down. We have
16
00:00:51.399 --> 00:00:53.799
Michael Dawson. Michael, do you want to introduce yourself?
17
00:00:54.479 --> 00:00:54.640
Hi?
18
00:00:54.759 --> 00:00:57.240
Michael Dawson on the NODS lead for Rahat and at
19
00:00:57.240 --> 00:00:59.679
GM as well as active in the project from the
20
00:00:59.679 --> 00:01:02.920
Technic Steering Committee and live definitely where it is getting
21
00:01:02.920 --> 00:01:04.519
below zero at nineteen.
22
00:01:05.719 --> 00:01:09.680
Right, practically, neighbors. We also have Matteo Colina.
23
00:01:10.519 --> 00:01:14.079
Hi, everyone, I'm mate Coolina Platmatic co founder and CEO
24
00:01:14.560 --> 00:01:17.079
ps enter on the mat jest I think, a steering committee,
25
00:01:17.359 --> 00:01:20.239
a board member of the Opinion Jazz Foundation. Also of
26
00:01:20.280 --> 00:01:22.799
many modules. You are probably using my software, even if
27
00:01:22.799 --> 00:01:24.319
you don't, even if you want or not.
28
00:01:26.480 --> 00:01:29.400
Probably my tagline awesome.
29
00:01:29.400 --> 00:01:30.799
We also have James Snell.
30
00:01:32.359 --> 00:01:36.120
You know, uh yeah, James del Con from central California
31
00:01:36.920 --> 00:01:44.400
where winter here means just slightly less unshine than I'm
32
00:01:44.400 --> 00:01:46.319
at Claude Flair. I work on their workers run time.
33
00:01:46.359 --> 00:01:48.959
I'm on the Note technical Steering Committee. I've been contributing
34
00:01:49.000 --> 00:01:52.120
to Note for most ten years. We have in March
35
00:01:52.480 --> 00:01:53.920
in just a few months, I'll have been on the
36
00:01:53.959 --> 00:01:56.560
technical Steering committee for Note for ten years old decades,
37
00:01:56.640 --> 00:01:59.560
so which is which is crazy? Yeah, that's.
38
00:02:01.159 --> 00:02:04.200
Awesome. And finally we have Natalia Vendito.
39
00:02:06.079 --> 00:02:08.360
Yeah, thank you for having me.
40
00:02:08.879 --> 00:02:13.039
I am the lead for developer tools and Experiences for
41
00:02:13.199 --> 00:02:17.360
the script on usure and yeah, also participation of the
42
00:02:17.439 --> 00:02:18.800
Open Jes foundations.
43
00:02:18.919 --> 00:02:20.680
We see, that's me.
44
00:02:21.400 --> 00:02:23.840
So yeah. So last time you talked about the nine
45
00:02:23.840 --> 00:02:27.879
node pillars, I think it's worth maybe a five ten
46
00:02:27.919 --> 00:02:30.960
minute review something like that, just trying to get people
47
00:02:31.000 --> 00:02:33.360
back into it. Obviously, folks can go back and listen
48
00:02:33.400 --> 00:02:35.960
to the other episode if they want the in depth discussion,
49
00:02:36.800 --> 00:02:37.759
but then we should.
50
00:02:38.479 --> 00:02:40.919
It was an excellent They definitely should. It was an
51
00:02:40.919 --> 00:02:44.240
excellent conversation, it's an excellent article, and it's an it
52
00:02:44.280 --> 00:02:48.000
was an excellent conversation in my opinion, unbiased opinion.
53
00:02:49.479 --> 00:02:51.960
Well, my point is is then we can get on
54
00:02:52.080 --> 00:02:56.479
with the other you know, four or five pillars, So
55
00:02:56.840 --> 00:02:59.319
really quickly, I'm just gonna pull them out of the article,
56
00:03:00.360 --> 00:03:02.800
and then if whoever wants you can kind of jump
57
00:03:02.800 --> 00:03:05.879
in and just kind of summarize what was discussed. The
58
00:03:05.879 --> 00:03:07.960
first one is do not block the event loop.
59
00:03:11.719 --> 00:03:13.000
Yeah, this one's pretty straightforward.
60
00:03:13.000 --> 00:03:13.159
You know.
61
00:03:13.199 --> 00:03:14.840
It's like, you know, you got to keep in mind
62
00:03:14.840 --> 00:03:18.759
that anytime you're running some bit of jobascripts, you have
63
00:03:18.800 --> 00:03:21.319
some function, nothing else is going to happen on that
64
00:03:21.400 --> 00:03:23.879
event loop. So you need to make sure you're dividing
65
00:03:23.879 --> 00:03:27.439
your work into two very small chunks. Allow the event loop.
66
00:03:27.439 --> 00:03:29.439
It turns you can pick up new requests, you can
67
00:03:29.879 --> 00:03:33.319
process io that that kind of thing. So pay attention
68
00:03:33.759 --> 00:03:37.840
to you know, that event loop delay, event loop utilization.
69
00:03:38.400 --> 00:03:40.120
There's a couple of metrics there. You really want to
70
00:03:40.159 --> 00:03:42.960
watch closely and optimize your applications around that.
71
00:03:44.159 --> 00:03:48.599
Yeah, and also offload if you can lengths casts to
72
00:03:48.680 --> 00:03:50.120
a worker a total post support.
73
00:03:51.080 --> 00:03:54.240
Yeah, and I'm assuming you talked about strategies on how
74
00:03:54.240 --> 00:03:55.680
to do that and what your coach should look like
75
00:03:55.919 --> 00:03:56.800
in the other episode.
76
00:03:56.879 --> 00:03:58.680
So yep, yep.
77
00:03:59.680 --> 00:04:02.840
The next one is monitor node specific metrics and act
78
00:04:02.919 --> 00:04:03.240
on them.
79
00:04:05.360 --> 00:04:05.960
Let me take this.
80
00:04:06.919 --> 00:04:10.639
Most of the things that people do when the plying
81
00:04:10.680 --> 00:04:15.520
no JS is they monitor no JS like it's in
82
00:04:15.560 --> 00:04:19.079
a completely like it's a black box. And this is
83
00:04:19.079 --> 00:04:25.040
a massive it's a massive pain because you because in
84
00:04:25.199 --> 00:04:28.800
most cases no JS has its own quirks and peculiarities,
85
00:04:29.079 --> 00:04:32.319
and monitoring a black box, you are essentially making it
86
00:04:32.319 --> 00:04:37.120
a service. Biggest one being memory. JS will use as
87
00:04:37.240 --> 00:04:39.759
much memory as you make it available to it. And
88
00:04:39.879 --> 00:04:44.519
if you start killing it when it reaches whatever arbitrary threshold,
89
00:04:45.079 --> 00:04:47.720
you know you're killing the process yourself. And and then
90
00:04:47.759 --> 00:04:50.279
you're starting it and complaining that your process is crashing
91
00:04:50.279 --> 00:04:52.199
all the time you're killing it, of course is crashing
92
00:04:52.199 --> 00:04:56.120
all the time. Okay, it's literally like this thing alone
93
00:04:56.199 --> 00:04:59.240
is probably don't know worth a few hours of fright time,
94
00:04:59.680 --> 00:05:02.680
super high end colsantacy. So this is for free, so
95
00:05:02.759 --> 00:05:04.879
you know to take it, take it the way you want.
96
00:05:05.079 --> 00:05:09.240
But this is essentially, you know, very easy fix. But
97
00:05:09.399 --> 00:05:12.240
most people don't Most people monitor assess micos if you
98
00:05:12.399 --> 00:05:16.079
use it, but don't look into what's happening inside the process.
99
00:05:16.160 --> 00:05:17.879
And this is you know, makes all the difference.
100
00:05:18.480 --> 00:05:22.519
One of the key metrics there that was added relatively
101
00:05:22.560 --> 00:05:25.519
recently is the event look utilization. It's going to say
102
00:05:25.519 --> 00:05:28.319
you a whole lot more information than monitoring a CPO.
103
00:05:29.000 --> 00:05:33.879
Yeah, awesome. The next one is use node LTS, which
104
00:05:33.920 --> 00:05:36.399
is long term support versions in production.
105
00:05:38.439 --> 00:05:40.439
I think that one is like, you know, as a project,
106
00:05:40.519 --> 00:05:44.800
we support the long term support streams and the recommendations
107
00:05:44.839 --> 00:05:48.519
really stick with those because in terms of security effects
108
00:05:48.680 --> 00:05:50.439
and stuff like that, that's where you're going to get
109
00:05:50.439 --> 00:05:52.959
those and most people don't want to update when those
110
00:05:53.000 --> 00:05:53.319
come out.
111
00:05:54.639 --> 00:05:58.000
And these are the even numbered versions, right, that's.
112
00:05:57.839 --> 00:06:01.319
Right, and they come out every October and are supported
113
00:06:01.399 --> 00:06:02.480
for thirty months.
114
00:06:03.040 --> 00:06:06.720
They usually say LTS. It's like it's the version number
115
00:06:06.720 --> 00:06:09.480
that says LTS. So if you have a question, just
116
00:06:09.600 --> 00:06:14.040
look for that and you'll know. I think we all
117
00:06:14.120 --> 00:06:15.720
kind of stared at each other on that one, Like
118
00:06:15.759 --> 00:06:21.000
it was pretty clear that that's a good move. The
119
00:06:21.040 --> 00:06:24.000
fourth one is automate testing, code re view and conformance
120
00:06:24.040 --> 00:06:25.079
as much as possible.
121
00:06:25.839 --> 00:06:28.079
Yeah, that one I'll jump in. We talked about last time.
122
00:06:28.759 --> 00:06:31.720
I think like no just is known for being able
123
00:06:31.720 --> 00:06:34.720
to let you move really fast and be productive, but
124
00:06:35.279 --> 00:06:37.680
you need really good testing to be able to move
125
00:06:37.759 --> 00:06:39.720
quickly to make sure you're not going to break things.
126
00:06:39.720 --> 00:06:41.639
And so that's where we last time. We talked about
127
00:06:41.639 --> 00:06:44.199
like how that how it is really your enabler to
128
00:06:44.240 --> 00:06:47.639
take advantage of the sort of speed and agility that
129
00:06:47.720 --> 00:06:48.879
node gives.
130
00:06:49.439 --> 00:06:52.199
We also spoke about the fact that people still use
131
00:06:52.240 --> 00:06:57.240
old testing frameworks which are showing their age, and that
132
00:06:57.399 --> 00:07:00.879
Node now comes with its own built into framework that
133
00:07:00.959 --> 00:07:03.439
you can really easily leverage out of the box.
134
00:07:06.439 --> 00:07:09.240
Good deal. And then it sounded like you got part
135
00:07:09.279 --> 00:07:13.839
way into but didn't completely discuss avoid dependency creep.
136
00:07:18.600 --> 00:07:22.959
Yes, we spoke at length about how NPM it's kind
137
00:07:22.959 --> 00:07:26.399
of like this black hole which sucks the entire universe
138
00:07:26.439 --> 00:07:29.480
into it. So you add one dependency which brings on
139
00:07:29.680 --> 00:07:32.560
another couple for the ride, which bring even more and
140
00:07:32.600 --> 00:07:35.199
more and more. And we talked about the fact that
141
00:07:35.279 --> 00:07:39.279
you need to really be how would I say it,
142
00:07:43.360 --> 00:07:47.800
cognizant of what you're bringing in intentional I think was
143
00:07:47.800 --> 00:07:51.720
the term that we use. Think about what you're bringing
144
00:07:51.759 --> 00:07:53.959
in and why you actually need it, and if there
145
00:07:54.000 --> 00:08:00.120
are lighterweight alternatives, and beware utilizing multiple versions of the
146
00:08:00.240 --> 00:08:06.000
same library. Anything else we mentioned that I'm missing, Yeah, I.
147
00:08:06.000 --> 00:08:08.959
Think that one of the aspects was like within an organization,
148
00:08:09.680 --> 00:08:11.639
the great the good thing about NPM and all the
149
00:08:11.680 --> 00:08:13.879
choices there is there's lots of different choices, but like
150
00:08:13.920 --> 00:08:16.079
in an organization, it would make a lot of sense
151
00:08:16.759 --> 00:08:19.800
to choose a more standardized set of packages as opposed
152
00:08:19.839 --> 00:08:23.720
to having five copies of something which does the same
153
00:08:23.759 --> 00:08:26.199
thing but are actually slightly different. Because when it comes
154
00:08:26.279 --> 00:08:29.680
to helping each other or to debug issues or to
155
00:08:29.720 --> 00:08:32.440
be able to support them, that can be an advantage.
156
00:08:32.440 --> 00:08:34.519
Of course, you know, there's always cases where you want
157
00:08:34.559 --> 00:08:37.879
to use something special to your particular effort, but like
158
00:08:37.960 --> 00:08:40.840
that's probably the twenty percent case versus the eighty percent.
159
00:08:42.600 --> 00:08:45.120
By the way, with regard to that one thing that
160
00:08:45.200 --> 00:08:47.840
I'm thought of and I don't think I mentioned the
161
00:08:47.919 --> 00:08:51.919
last time we spoke about this, is the fact that
162
00:08:52.000 --> 00:08:57.559
I know some organizations that intentionally take call it micro
163
00:08:57.639 --> 00:09:01.559
front ends micro services type approach of trying to create
164
00:09:01.559 --> 00:09:05.759
as much segregation as possible between various teams and reduce
165
00:09:05.840 --> 00:09:10.519
teams dependencies or dependency on each other. And that means
166
00:09:10.559 --> 00:09:15.240
that for example, one team might choose to use one
167
00:09:16.799 --> 00:09:20.000
package or library and another team should be free to
168
00:09:20.120 --> 00:09:24.039
choose something else, or that they don't need to move
169
00:09:24.080 --> 00:09:27.600
at the same rate with regard to version ing and
170
00:09:28.000 --> 00:09:31.000
stuff like that. Now, obviously they if they go the
171
00:09:31.039 --> 00:09:34.559
way or the whole way with microservices, then they're probably
172
00:09:34.600 --> 00:09:38.600
also running separate node instances, which might reduce the impact,
173
00:09:38.759 --> 00:09:41.559
but they might be running within the same note instance,
174
00:09:42.200 --> 00:09:46.559
and then they're kind of working in contradiction to this recommendation.
175
00:09:48.600 --> 00:09:50.600
I think, like if you look at it, like maybe
176
00:09:51.000 --> 00:09:54.679
that plays into not using like not forcing people to
177
00:09:54.679 --> 00:09:56.799
be using the same version. But I still think even
178
00:09:56.799 --> 00:10:00.279
in that case, there's value to say, like let's all
179
00:10:00.399 --> 00:10:02.600
choose the same loger, right, Like we don't need to
180
00:10:02.679 --> 00:10:06.000
use ten different bloggers. So for example, if somebody moves
181
00:10:06.000 --> 00:10:08.519
from one team to the other, they they already know
182
00:10:08.679 --> 00:10:10.799
the log or in the patterns and so forth they're
183
00:10:10.919 --> 00:10:15.600
used and breaking it up into micro services like that's
184
00:10:15.600 --> 00:10:17.720
sort of a different kind of dependency in my mind.
185
00:10:17.799 --> 00:10:21.320
Anyway, Yeah, I agree. I've worked on a number of
186
00:10:21.360 --> 00:10:23.720
projects where we you know, we try to segregate things
187
00:10:23.720 --> 00:10:26.480
out this way, and what I found is that sometimes
188
00:10:26.480 --> 00:10:28.720
there are good reasons for deviating from what the other
189
00:10:28.720 --> 00:10:31.600
teams are doing, and sometimes there really aren't. And so
190
00:10:32.480 --> 00:10:35.240
a lot of this, you know, they try and segregate
191
00:10:35.320 --> 00:10:39.080
it so the teams don't have to spend as much time,
192
00:10:39.159 --> 00:10:43.519
you know, coming together and collaborating. But this is more
193
00:10:43.519 --> 00:10:47.200
of an organizational issue, I think, than than a code issue,
194
00:10:47.200 --> 00:10:49.720
in the sense that you should still be talking and
195
00:10:49.759 --> 00:10:52.039
you can still leverage the expertise of the other team
196
00:10:52.080 --> 00:10:54.919
where appropriate and say, all right, we've got to solve
197
00:10:54.960 --> 00:10:57.960
this problem. We know you have this same problem. What
198
00:10:58.000 --> 00:10:59.919
are you using And then you can have the discussion
199
00:11:00.039 --> 00:11:03.600
about what and where and why. And then when we
200
00:11:03.639 --> 00:11:06.440
look at it from our problem perspective, right, because we're
201
00:11:06.440 --> 00:11:08.440
working on a different part of the app, then we
202
00:11:08.519 --> 00:11:11.639
may say that all makes sense, and we tried to
203
00:11:11.639 --> 00:11:14.159
put it in, but it turned out these concerns lead
204
00:11:14.240 --> 00:11:16.360
us to a different solution. But then you have a
205
00:11:16.399 --> 00:11:18.440
good reason for saying this is why we're doing it
206
00:11:18.480 --> 00:11:21.639
different as opposed to the other thing. But it also
207
00:11:21.759 --> 00:11:24.279
then makes people more mobile between the teams. It makes
208
00:11:24.279 --> 00:11:26.799
it easier to talk about some of the similar issues.
209
00:11:27.159 --> 00:11:30.039
And so I think there's some nuance here, but I
210
00:11:30.200 --> 00:11:33.360
like the direction of saying, hey, at least consider what
211
00:11:33.399 --> 00:11:35.159
everybody else is doing in your organization.
212
00:11:35.559 --> 00:11:39.279
And part of my part of the concerns here is
213
00:11:39.840 --> 00:11:45.480
you really want to to even say okay. So we
214
00:11:45.559 --> 00:11:50.200
have created a way to a little module to call
215
00:11:50.399 --> 00:11:54.080
this micro service okay that is consumed by everybody okay,
216
00:11:54.600 --> 00:11:57.120
and I want to take that code and publish it
217
00:11:57.200 --> 00:12:02.879
on my internal registry because otherwise each other team is
218
00:12:02.879 --> 00:12:05.399
going to redew it, and each other team is going
219
00:12:05.399 --> 00:12:11.480
to use a different HDP library for calling it okay,
220
00:12:12.120 --> 00:12:16.720
which is bananas. I've seen this happening over and over again. Okay,
221
00:12:16.840 --> 00:12:21.120
literally time wasted due to writing API clients. But now
222
00:12:21.120 --> 00:12:24.240
we have a point there for top creating API clients.
223
00:12:24.360 --> 00:12:28.679
But this is essentially this is part of the problem.
224
00:12:29.360 --> 00:12:31.799
This is one of the problems. This happens to all
225
00:12:31.799 --> 00:12:32.720
the things okay.
226
00:12:33.240 --> 00:12:38.120
It is I need a library to validate that.
227
00:12:38.000 --> 00:12:44.480
My custom field is correct, right, and then I need
228
00:12:44.519 --> 00:12:47.919
this custom data. Well, let's put it somewhere so that
229
00:12:48.000 --> 00:12:50.840
I don't need to implement it all every every single time.
230
00:12:51.799 --> 00:12:56.279
So yeah, it just comes out of being intentional. You
231
00:12:56.320 --> 00:12:59.200
need to be more intentional than your opinion. Like engineers
232
00:12:59.240 --> 00:13:01.399
are going to have opinions. You know, I don't agree
233
00:13:01.399 --> 00:13:03.240
with the displiment right into the library. Does it a
234
00:13:03.279 --> 00:13:06.240
different way, And it's like in an organization, that's just
235
00:13:06.279 --> 00:13:09.440
not our work. You can get so far with it.
236
00:13:10.240 --> 00:13:14.159
Let's just cause more headaches and overhead. So do it once,
237
00:13:14.240 --> 00:13:16.279
publish it for everyone to use. And you know what
238
00:13:16.320 --> 00:13:17.840
if you don't agree with that one hundred percent, so
239
00:13:17.879 --> 00:13:18.639
what use it anyway?
240
00:13:19.480 --> 00:13:25.960
M Yeah, enterprise I agree, go ahead, Natalia sorry, yeah.
241
00:13:26.360 --> 00:13:29.000
Yeah, in enterprise development, I think many.
242
00:13:28.759 --> 00:13:32.440
People forget there is this intermediately year like everybody can
243
00:13:32.480 --> 00:13:34.200
consume from upstream.
244
00:13:33.799 --> 00:13:35.039
Whatever module they want.
245
00:13:35.200 --> 00:13:40.120
But again, like Matteo and James uh stay that, you
246
00:13:40.320 --> 00:13:43.080
need to be conscious of what you're building yourself and
247
00:13:43.159 --> 00:13:45.519
make it available to others. In the end, you have
248
00:13:45.600 --> 00:13:50.120
a smaller ecosystem with that within your company, your organization
249
00:13:50.519 --> 00:13:55.759
that allows you to publish to any private registry and
250
00:13:55.879 --> 00:13:59.919
also function in the same way as open source by
251
00:14:00.200 --> 00:14:02.200
within the boundaries of your organization.
252
00:14:02.320 --> 00:14:03.279
And by the way, this is.
253
00:14:04.919 --> 00:14:10.120
Definitely an organizational convenience, not so much at a metal one.
254
00:14:10.159 --> 00:14:13.279
I think in the front end, definitely try to keep
255
00:14:14.639 --> 00:14:18.480
dependencies that you're probably shipping over the wire minimum. But
256
00:14:18.559 --> 00:14:20.360
in the back end, what you want to do is
257
00:14:20.399 --> 00:14:25.559
to make sure that you have a lower maintenance requirement.
258
00:14:27.000 --> 00:14:30.279
Than when you have a lot of modules to maintain.
259
00:14:32.000 --> 00:14:36.879
One thing that I encountered with organizations thinking about reusing
260
00:14:37.120 --> 00:14:40.679
their own components within the organization. So sometimes they're very
261
00:14:40.720 --> 00:14:43.480
explicit about it. So for example, if an organization in
262
00:14:43.559 --> 00:14:47.080
the context of front and development, an organization decides they're
263
00:14:47.120 --> 00:14:50.480
going to have a design system and the implement some
264
00:14:50.519 --> 00:14:56.440
sort of a front end library that's pretty typical but working,
265
00:14:56.480 --> 00:14:59.480
and let's say in a certain project, and then coming
266
00:14:59.519 --> 00:15:02.279
to a conclude and hey, this bit of code that
267
00:15:02.360 --> 00:15:05.840
I wrote seems to be something that will be generally
268
00:15:06.000 --> 00:15:11.480
useful across the entire organizations. People have that a harm moment,
269
00:15:11.919 --> 00:15:17.480
but are sometimes hesitant to act on it because you're
270
00:15:17.519 --> 00:15:21.720
assuming a lot more responsibility than you originally had. Like
271
00:15:21.799 --> 00:15:25.240
if you're just writing something for your own use within
272
00:15:25.279 --> 00:15:28.639
your own team, that's one thing, but committing to support
273
00:15:28.720 --> 00:15:32.320
every use case within the larger organization. That's a different
274
00:15:32.360 --> 00:15:37.039
type level of commitment altogether, and making that jump can
275
00:15:37.080 --> 00:15:39.080
be you know significant.
276
00:15:40.919 --> 00:15:42.399
Yeah, that's true.
277
00:15:42.480 --> 00:15:47.679
I have sorry, go ahead, go ahead, Michael, I said.
278
00:15:47.639 --> 00:15:49.320
That seems to be the thing in life. The more
279
00:15:49.399 --> 00:15:51.320
you do, the more you pick up in terms of
280
00:15:51.360 --> 00:15:54.360
responsibility of keeping things going. So I can totally see
281
00:15:54.360 --> 00:15:56.120
people worrying about that.
282
00:15:56.679 --> 00:16:02.039
Now I have an absolute counter argument to okay, and
283
00:16:03.320 --> 00:16:05.919
I want to flag out this functional and why you
284
00:16:06.000 --> 00:16:10.440
need to be intentional when creating this kind of software,
285
00:16:10.480 --> 00:16:14.080
when when thinking about dependencies and software usability within your
286
00:16:14.120 --> 00:16:19.080
organization and enterprise and also our enterprise about absolutely sabotage
287
00:16:19.120 --> 00:16:24.159
themselves while doing so. Okay, so imagine that each team
288
00:16:24.399 --> 00:16:27.679
needs to, you know, implement a piece of functionality. Okay,
289
00:16:28.159 --> 00:16:31.639
Now one of the teams that they discuss, one of
290
00:16:31.720 --> 00:16:34.159
the teams is the first one, and they created their
291
00:16:34.159 --> 00:16:36.600
own little module to do this, and this is well
292
00:16:36.639 --> 00:16:40.879
it it is. I'm publishing it on my NPM internal
293
00:16:40.960 --> 00:16:44.639
MPM rights. Great, everybody is happy, the management is very happy.
294
00:16:44.679 --> 00:16:46.320
We saved a maunch of money, so we need to
295
00:16:46.440 --> 00:16:48.120
can reuse all these things.
296
00:16:48.159 --> 00:16:49.840
Fantastic okay.
297
00:16:50.480 --> 00:16:54.600
Now, however, a moment after that's happened, the team that
298
00:16:54.679 --> 00:17:00.320
created that module completely drops the ball on it because nope,
299
00:17:00.440 --> 00:17:03.279
it's not part of my OKR anymore. The quarter has changed,
300
00:17:03.320 --> 00:17:07.240
so I'm not maintaining this anymore. And this is the
301
00:17:07.279 --> 00:17:10.680
typical thing that happens with okay, are okay? If what
302
00:17:10.720 --> 00:17:13.759
you're doing is not part of of your okay of
303
00:17:13.920 --> 00:17:17.599
of your does not help you achieve your key results,
304
00:17:17.599 --> 00:17:20.519
you are absolute that thing it needs to be dropped, okay,
305
00:17:20.799 --> 00:17:23.119
even though it's important and you know you're saving the
306
00:17:23.160 --> 00:17:27.680
compliant of money by avoiding duplications. So, in reality, a
307
00:17:27.759 --> 00:17:32.440
lot of teams in some enterprise works a little bit
308
00:17:32.480 --> 00:17:34.279
like silos.
309
00:17:34.119 --> 00:17:35.440
And they are a little bit.
310
00:17:36.880 --> 00:17:40.319
Yeah I have Yeah, I think Natali has a few
311
00:17:40.359 --> 00:17:42.960
stories on on that, so I don't know it's.
312
00:17:44.039 --> 00:17:47.599
But yeah, after a decad as an enterprise developer, I
313
00:17:47.640 --> 00:17:51.720
have many stories. Yes, there are silos, and I do agree, mate,
314
00:17:52.200 --> 00:17:56.920
But typically enterprise projects do not work under KPIs. The
315
00:17:57.000 --> 00:18:01.759
KPI is delivering your project's a little bit different than product.
316
00:18:03.200 --> 00:18:05.119
And another thing to your.
317
00:18:05.039 --> 00:18:08.880
Favor is that if you are building something that you
318
00:18:09.039 --> 00:18:13.559
publish to a private registry and you move to another project,
319
00:18:13.680 --> 00:18:16.599
which is usually the case of developers in the context
320
00:18:16.680 --> 00:18:17.400
of enterprise.
321
00:18:17.799 --> 00:18:20.400
You are rotating, you're going to a different project.
322
00:18:20.440 --> 00:18:22.920
You can reuse it, right, you have it, you have
323
00:18:23.000 --> 00:18:26.799
it available to your new project, whereas if it's part
324
00:18:26.839 --> 00:18:29.839
of a private code base, you don't have access to
325
00:18:29.880 --> 00:18:30.440
it anymore.
326
00:18:30.920 --> 00:18:34.400
Right, And I think that there's I'm gonna sorry, sorry
327
00:18:34.400 --> 00:18:36.920
for the dogs here, but only another aspect of this
328
00:18:37.119 --> 00:18:41.319
that's completely overlooked is a lot of times these internal
329
00:18:41.359 --> 00:18:44.319
teams will look at, hey, this other team created this,
330
00:18:44.319 --> 00:18:47.039
this package that I want to use, it's their responsibility
331
00:18:47.079 --> 00:18:49.319
to maintain it so I can get the benefit from it.
332
00:18:49.880 --> 00:18:54.119
That's internally the wrong calculus. It's if if if I'm
333
00:18:54.559 --> 00:18:57.119
up to use it in my project, I'm also picking
334
00:18:57.200 --> 00:18:58.759
up the burden to help maintain it.
335
00:18:59.720 --> 00:19:00.000
Uh.
336
00:19:00.119 --> 00:19:03.319
So you know, we can't have this idea that it's like, oh,
337
00:19:03.519 --> 00:19:06.039
that other team's responsible for it. No, no, no, all
338
00:19:06.079 --> 00:19:09.519
the same company, all the same team is equally my
339
00:19:09.599 --> 00:19:10.839
responsibility to anyone else.
340
00:19:11.640 --> 00:19:15.680
Let me be plunned if your assumption is that if
341
00:19:15.720 --> 00:19:19.559
you run into a problem because your needs change and
342
00:19:19.599 --> 00:19:23.839
the current and the package doesn't properly or adequately support it,
343
00:19:23.920 --> 00:19:27.039
and you're dependent on somebody from some other team who,
344
00:19:27.160 --> 00:19:31.000
as we said, may have different OKRs, different priorities, you're
345
00:19:31.039 --> 00:19:34.720
literally screwed. I mean, you have to take the attitude
346
00:19:34.759 --> 00:19:37.599
and the approach that if you're using it, you're assuming
347
00:19:37.640 --> 00:19:38.960
responsibility for it.
348
00:19:40.119 --> 00:19:43.759
That can almost still be totally extended to every module
349
00:19:43.799 --> 00:19:47.839
you use from MPM, because in that case, the people
350
00:19:47.839 --> 00:19:51.079
who who may be maintaining it are even further away
351
00:19:51.079 --> 00:19:55.039
from you and even have less reason to necessarily prioritize
352
00:19:54.400 --> 00:19:56.640
your your requirements.
353
00:19:58.319 --> 00:20:00.079
And I a hundred percent agree with that. I'm and
354
00:20:00.160 --> 00:20:04.279
I've said before many times. Where you know, especially companies,
355
00:20:04.279 --> 00:20:07.480
if you are making use of open source, then you
356
00:20:07.519 --> 00:20:09.960
as a company have an obligation helped support that open
357
00:20:09.960 --> 00:20:15.839
source that that you're using. That includes contributing back bug fixes,
358
00:20:16.000 --> 00:20:19.519
changes or whatever, and working with those maintainers. Don't put
359
00:20:19.559 --> 00:20:22.119
that burden on them, especially if you're not paying them.
360
00:20:22.759 --> 00:20:25.640
By the way, an interesting aspect that I've seen is
361
00:20:25.640 --> 00:20:29.799
that at least for some organization, when they decided to
362
00:20:29.920 --> 00:20:34.640
share some resource across the entire organization, it was actually
363
00:20:34.759 --> 00:20:39.640
easier from the organizational perspective to turn it into an
364
00:20:39.680 --> 00:20:44.839
actual open source project. Then to try to maintain it
365
00:20:44.920 --> 00:20:49.480
as an internally shared resource, because once it was declared
366
00:20:49.480 --> 00:20:53.960
an actual open source project, it was actually allocated resources
367
00:20:54.640 --> 00:20:57.880
versus when it was just an internal thing that's shared,
368
00:20:58.359 --> 00:21:02.680
you know, ownership was met.
369
00:21:03.599 --> 00:21:06.960
Yeah. One thing that I wanted to piggyback off of
370
00:21:07.240 --> 00:21:10.640
what Matteo was talking about a little bit earlier is that,
371
00:21:10.799 --> 00:21:13.079
and this is coming from when I was working on
372
00:21:13.160 --> 00:21:17.160
integrations and it was mostly third party integrations within an
373
00:21:17.160 --> 00:21:21.200
application that I was helping maintain. But also, you know,
374
00:21:21.240 --> 00:21:24.759
between micro services, is that if you can structure your
375
00:21:25.039 --> 00:21:27.119
because he was saying, you know, if you're writing the
376
00:21:27.240 --> 00:21:29.160
micro service, you ought to be writing the library that
377
00:21:29.200 --> 00:21:32.559
consumes it and giving everybody a standard way of accessing it.
378
00:21:33.039 --> 00:21:36.880
And for me, if you can structure all of those
379
00:21:37.039 --> 00:21:39.680
the same way and make sure that they all kind
380
00:21:39.720 --> 00:21:43.480
of look and feel and are built in the same manner, again,
381
00:21:43.519 --> 00:21:46.359
it makes it easier for people across the organization to
382
00:21:46.359 --> 00:21:48.519
be able to come in and do that maintenance for
383
00:21:48.559 --> 00:21:51.839
you so that they can you know, you can move ahead.
384
00:21:51.880 --> 00:21:54.440
So then it's hey, this micro service has this feature
385
00:21:54.440 --> 00:21:56.160
that they built in, but they have an updated the
386
00:21:57.039 --> 00:22:00.559
library for it, or maybe I need to make pull
387
00:22:00.599 --> 00:22:02.119
the data in, but I need to do something a
388
00:22:02.119 --> 00:22:04.839
little bit different with it before I consume it in
389
00:22:05.039 --> 00:22:08.920
my service. You know, if it's all structured in a
390
00:22:08.960 --> 00:22:11.000
similar manner, then I know where to go to go
391
00:22:11.000 --> 00:22:14.200
ahead and add that in and then everybody else benefits
392
00:22:14.200 --> 00:22:15.759
from it and I don't have to go in and
393
00:22:15.799 --> 00:22:20.359
reverse engineer this driver or that driver, or this integration
394
00:22:20.440 --> 00:22:21.920
library and that integration library.
395
00:22:22.279 --> 00:22:27.400
I do want to I do want to. Sorry, I
396
00:22:27.440 --> 00:22:29.880
do want to push us along a little bit because
397
00:22:29.920 --> 00:22:32.279
we are We're never going to finish the pillars.
398
00:22:31.960 --> 00:22:36.000
Otherwise I want I do want them today.
399
00:22:36.400 --> 00:22:38.599
Yeah, I do want to touch on two things that
400
00:22:38.640 --> 00:22:41.640
were mentioned in the article in this context, at least briefly.
401
00:22:42.240 --> 00:22:46.880
One is that no d APIs versus Web Standard APIs,
402
00:22:47.240 --> 00:22:53.119
and the other you also mentioned Mono repost. So can
403
00:22:53.160 --> 00:22:55.839
you talk about Can someone talk about the no JS
404
00:22:55.880 --> 00:22:59.839
standard Native standard APIs versus the Web Standard APIs.
405
00:23:00.119 --> 00:23:01.519
Yeah, I can definitely talk about that. You know, we
406
00:23:01.519 --> 00:23:04.119
have a number of places in node now, you know,
407
00:23:04.720 --> 00:23:07.279
the old r L parts versus new r L, node
408
00:23:07.319 --> 00:23:11.039
streams versus web streams, old node crypto versus web crypto.
409
00:23:11.440 --> 00:23:14.000
We have a lot of these cases where we have
410
00:23:14.880 --> 00:23:17.960
you know, duplicate or overlapping APIs. Let me talk you
411
00:23:18.039 --> 00:23:19.640
know you. R L is the very first one that
412
00:23:19.680 --> 00:23:23.440
I introduced, and there was a huge controversy even within
413
00:23:23.519 --> 00:23:25.480
the project. I was actually yelled at at a conference
414
00:23:25.519 --> 00:23:29.160
by another node contributor, like actually yelled at for suggesting
415
00:23:29.240 --> 00:23:32.960
that we add this because r L parts is there
416
00:23:33.079 --> 00:23:37.160
and and it's fast. Uh. And you know when we
417
00:23:37.240 --> 00:23:39.279
added the new r L pars er, the w g
418
00:23:39.480 --> 00:23:41.440
r O parser, when it was slower, but it was
419
00:23:41.480 --> 00:23:45.000
standard and folks, we use libraries for in node in
420
00:23:45.079 --> 00:23:47.039
browsers and then you know, picked it up and that
421
00:23:47.160 --> 00:23:49.279
you know, and something. You can use this thing everywhere.
422
00:23:49.599 --> 00:23:54.160
It's it's much more portant. Now, it's faster than anything else. Well,
423
00:23:54.160 --> 00:23:59.160
we're gonna see this pattern continue. And whenever you are
424
00:24:01.000 --> 00:24:03.559
whenever you're selecting which API, do us say node streams
425
00:24:03.640 --> 00:24:07.160
versus webstreams. Be very intentional. Don't just make it an
426
00:24:07.200 --> 00:24:10.079
accidental choice. Be very intentional on how you adopt these
427
00:24:10.519 --> 00:24:12.920
node streams are going to be way more performant than webstreams,
428
00:24:13.039 --> 00:24:16.400
but webstreams are way more portable. So you need to
429
00:24:16.480 --> 00:24:20.960
balance which goals you're looking for. And make sure you're
430
00:24:20.960 --> 00:24:24.119
selecting your dependencies accordingly. The more you have to translate
431
00:24:24.240 --> 00:24:27.599
between them, I say, if you're using both note streams
432
00:24:27.640 --> 00:24:30.880
and webstreams, the more overhead and easier it's going to
433
00:24:30.960 --> 00:24:32.799
be to get it wrong. So you need to be
434
00:24:32.920 --> 00:24:35.880
very intentional about your strategy in which API is you're picking.
435
00:24:36.920 --> 00:24:40.240
But something zu pers just don't use it anymore, use new.
436
00:24:40.240 --> 00:24:45.720
Your something important is. No JS in general has added
437
00:24:45.759 --> 00:24:51.799
a lot of APIs in the last decade, okay, and
438
00:24:52.119 --> 00:24:55.079
the most people still development JS like it's twenty fourteen,
439
00:24:56.240 --> 00:25:00.519
so please stopkin take a look at work there. Okay,
440
00:25:01.079 --> 00:25:03.640
like literally, oh, we have fetch now, I was I
441
00:25:03.759 --> 00:25:08.880
was checking recently and we and you know a few
442
00:25:08.880 --> 00:25:12.160
of the top downloaded modules on MPM are high level
443
00:25:14.480 --> 00:25:17.559
HDP clients, and we had fetch for a while in
444
00:25:17.680 --> 00:25:20.400
Node okay, and you know, and.
445
00:25:20.440 --> 00:25:23.720
Even simple u u I D, the uu i D module,
446
00:25:23.799 --> 00:25:25.680
a lot of folks, you you know, pull it off
447
00:25:25.720 --> 00:25:30.119
with NPM to just generate a random u i D. Great,
448
00:25:30.240 --> 00:25:34.000
it's a great module. But compared to the API that's
449
00:25:34.039 --> 00:25:37.519
built into node and browsers, we have Web standard API,
450
00:25:37.680 --> 00:25:40.519
which is random u I D until on the crypto obbit.
451
00:25:41.200 --> 00:25:45.039
It's way faster, way simpler, and it's just the thing
452
00:25:45.079 --> 00:25:47.440
you should use. You could drop an entire dependency that's
453
00:25:47.480 --> 00:25:50.319
been in essence twenty twenty one, and folks are just
454
00:25:50.400 --> 00:25:52.559
now discovering that that exists around time.
455
00:25:52.720 --> 00:25:56.319
So I just want to point out that Mateo pointed
456
00:25:56.400 --> 00:25:59.160
out that the Node team made fetch happen, and so
457
00:25:59.279 --> 00:26:02.359
please stop trying to make fetch happen. Yeah.
458
00:26:04.200 --> 00:26:09.200
Sorry, we were actually just I think Mattel we were
459
00:26:09.319 --> 00:26:12.680
exchanging tweets about it or excess about it or what
460
00:26:12.799 --> 00:26:15.079
was this on on Blue Sky.
461
00:26:14.960 --> 00:26:15.799
I don't remember.
462
00:26:16.279 --> 00:26:22.160
More so many options, and so that's number one. So basically,
463
00:26:22.240 --> 00:26:23.319
if I'm here, I have.
464
00:26:23.359 --> 00:26:25.759
A question here is there a good place to find these?
465
00:26:26.000 --> 00:26:28.480
Right the Hey, you might be using a library for this.
466
00:26:28.640 --> 00:26:29.880
You don't need you anymore.
467
00:26:31.599 --> 00:26:35.359
Just now, just too Probably it's probably something that we
468
00:26:35.400 --> 00:26:42.039
should develop and promote a little bit. Okay, maybe like
469
00:26:42.200 --> 00:26:44.680
this can be a good a good good something that's missing.
470
00:26:44.720 --> 00:26:46.279
I don't know, this is there.
471
00:26:46.119 --> 00:26:49.559
There, this is the this is something I would actually,
472
00:26:49.720 --> 00:26:52.319
you know, Natalia, you know, you know, for like debt
473
00:26:52.359 --> 00:26:54.519
tools and like the developer experience and like that, because
474
00:26:54.519 --> 00:26:56.240
those of us are actually working on the APIs, suck
475
00:26:56.279 --> 00:26:59.079
at the documentation and actually promoting these things. But if
476
00:26:59.119 --> 00:27:02.880
we can start having the tooling to like promote some
477
00:27:03.000 --> 00:27:05.440
these things more and say, hey, there's this other thing,
478
00:27:05.880 --> 00:27:10.240
it might be interesting to look at that. Needia better
479
00:27:10.279 --> 00:27:10.440
at this.
480
00:27:11.200 --> 00:27:13.880
A certain way to go about it is to basically,
481
00:27:13.960 --> 00:27:16.680
if you're looking for certain functionality, check if there's a
482
00:27:17.079 --> 00:27:20.799
web API for it, basically, and that's really easy because
483
00:27:20.960 --> 00:27:24.319
for example, you've got MDN and then just check if
484
00:27:24.359 --> 00:27:28.799
that also exists on note that just that before you
485
00:27:29.160 --> 00:27:32.039
rush off and NPM install something.
486
00:27:33.960 --> 00:27:35.640
One of the things we are doing in the project
487
00:27:35.759 --> 00:27:39.240
is we're ramping up some ambassadors and part of that
488
00:27:39.359 --> 00:27:42.240
we're coming up with messages we want those ambassadors to
489
00:27:42.240 --> 00:27:45.279
help promote and that suggestion of like I think we've
490
00:27:45.319 --> 00:27:49.000
called it something like developing with modern no JS right,
491
00:27:49.119 --> 00:27:51.599
like to highlight here are the things that are available
492
00:27:51.640 --> 00:27:53.720
that might not have been available before. It's definitely on
493
00:27:53.839 --> 00:27:55.759
the list of things that are being brainstormed there.
494
00:27:59.079 --> 00:28:02.039
Anybody wants to say anything about mono repos before we
495
00:28:02.200 --> 00:28:03.519
move on to the next one.
496
00:28:07.519 --> 00:28:10.799
I'm just going to say, use pm PM. This is
497
00:28:10.880 --> 00:28:14.799
my preference, Okay, I am personal that this is my
498
00:28:14.960 --> 00:28:19.039
personal preference. Use MPM when you don't need mono repos,
499
00:28:19.119 --> 00:28:20.839
use PMPM when you need monor repos.
500
00:28:21.400 --> 00:28:22.759
These matches more or less.
501
00:28:22.920 --> 00:28:28.720
My yah seems to work fine for other people, but genetically,
502
00:28:28.880 --> 00:28:32.759
my current status is I'm very happy with PMPM.
503
00:28:32.880 --> 00:28:35.279
I don't know, Natalia, you what you guys use you
504
00:28:35.519 --> 00:28:35.880
have a lot of.
505
00:28:36.039 --> 00:28:39.839
Yeah, No, I second, yeah, I second that I use
506
00:28:39.960 --> 00:28:45.200
PMPM for monor repos right now, and and PM for
507
00:28:45.240 --> 00:28:45.839
all the rest.
508
00:28:47.839 --> 00:28:50.039
Yeah. I agree. There's there's out of all of them
509
00:28:50.119 --> 00:28:53.440
that's the one that handles this better. Their patterns are
510
00:28:53.480 --> 00:28:55.519
just actually makes sense.
511
00:28:57.319 --> 00:28:59.759
So Chuck, maybe move us along to the next one.
512
00:29:00.039 --> 00:29:03.119
Gonna say, sounds like we've gotten that one. So the
513
00:29:03.240 --> 00:29:05.240
next one is de risk your dependencies.
514
00:29:09.400 --> 00:29:11.599
I think it comes back to the part we were
515
00:29:11.640 --> 00:29:15.079
talking about being intentional, like I think too many people
516
00:29:15.519 --> 00:29:18.640
pull in a very deep dependency tree without thinking about it,
517
00:29:18.799 --> 00:29:22.759
and it's you know, once you once you've you've pulled
518
00:29:22.839 --> 00:29:26.079
things in. Then then we were we talked a little
519
00:29:26.079 --> 00:29:28.079
bit before, like you almost need to take on the
520
00:29:28.160 --> 00:29:31.559
approach of like, okay, I'm using this, am I ready
521
00:29:31.599 --> 00:29:34.720
to help maintain it because like as an organization not
522
00:29:34.839 --> 00:29:37.960
you know, James mentioned like you should do that because
523
00:29:38.400 --> 00:29:40.799
it's the right thing to do, but I also think
524
00:29:40.839 --> 00:29:45.119
it's an organization. It's risk management, right, and most organizations
525
00:29:45.160 --> 00:29:46.720
that's a big part of them is like how do
526
00:29:46.799 --> 00:29:49.119
we manage our risk? And as soon as you've pulled
527
00:29:49.160 --> 00:29:51.480
in the software, it's part of the things you should
528
00:29:51.480 --> 00:29:54.200
be looking at in terms of managing your risk and saying, well,
529
00:29:54.279 --> 00:29:56.279
like if we had to switch to something else, could
530
00:29:56.279 --> 00:29:58.200
we if we had to make a change, could we?
531
00:29:59.279 --> 00:30:02.319
Is it a healthy project? And you know, and I
532
00:30:02.359 --> 00:30:04.519
think in near the end there we talk about like
533
00:30:04.640 --> 00:30:07.119
one way to manage your risk is to support the project,
534
00:30:07.200 --> 00:30:10.519
either through your people or through funding. And you know,
535
00:30:10.599 --> 00:30:14.319
so most organizations should should probably invest a little bit
536
00:30:14.359 --> 00:30:16.319
more time in managing that particular risk.
537
00:30:16.519 --> 00:30:23.599
Me maybe if the maintainer gets enough support, he won't
538
00:30:23.759 --> 00:30:26.759
sell or he or she won't sell the project to
539
00:30:27.279 --> 00:30:29.319
some of the farious third party.
540
00:30:31.160 --> 00:30:35.240
That that's an extreme example of the case, right, or they.
541
00:30:35.319 --> 00:30:39.039
Just might not well Eco system Unfortunately he has been
542
00:30:39.119 --> 00:30:42.680
full of those, okay a couple of times already, So I'm.
543
00:30:42.559 --> 00:30:44.720
Fortunate, I mean, and that be sold right if the
544
00:30:44.799 --> 00:30:46.720
maintainer runs out of time to get burnt out, and
545
00:30:46.759 --> 00:30:49.920
they transition it to somebody without you know, without fully
546
00:30:50.000 --> 00:30:51.839
vetting who they are. You know that somebody else can
547
00:30:51.920 --> 00:30:54.880
come in and take care of the project, take advantage
548
00:30:54.880 --> 00:30:59.319
of the project. Anytime you add a new dependency that
549
00:30:59.400 --> 00:31:01.880
you don't control or you're not contributing to your adding risk,
550
00:31:02.759 --> 00:31:04.839
you know. And and if you're if you're bringing in
551
00:31:05.000 --> 00:31:07.720
a module that brings in you know, one hundred different dependencies,
552
00:31:08.359 --> 00:31:11.000
you're increasing your risk one hundred fold. So you know,
553
00:31:11.519 --> 00:31:14.119
you just have to be very intentional about what you're
554
00:31:14.160 --> 00:31:16.160
bringing in. You have to be very intentional about what
555
00:31:16.240 --> 00:31:19.079
you're going to support. UH and companies have to stop
556
00:31:19.200 --> 00:31:21.799
looking at open sources just free software that they don't
557
00:31:21.839 --> 00:31:25.559
have to do anything with to use. They have to
558
00:31:25.680 --> 00:31:28.039
help maintain it, or they're bringing or they're just opening
559
00:31:28.039 --> 00:31:30.440
themselves up to risk. And then if we look at
560
00:31:30.519 --> 00:31:32.880
like you know, some of the new like federal guidelines,
561
00:31:32.880 --> 00:31:34.759
you know, it's not just US, you know EU as
562
00:31:34.799 --> 00:31:37.759
well around s bombs to you know, you know, actually
563
00:31:37.799 --> 00:31:41.119
being able to produce a an audited list of these
564
00:31:41.160 --> 00:31:43.720
are the dependencies I'm using. Here's how they're maintained here,
565
00:31:43.839 --> 00:31:46.480
what the licenses are a lot of folks bring in
566
00:31:46.519 --> 00:31:48.680
these dependencies without ever thinking about that. But if this,
567
00:31:49.000 --> 00:31:51.240
if if your module ends up in some being used
568
00:31:51.240 --> 00:31:53.559
in some regulated industry, you have to be able to
569
00:31:53.559 --> 00:31:56.200
account for those things and be able to account for
570
00:31:56.240 --> 00:31:59.960
the risk. So it's it's not just a best practic
571
00:32:00.079 --> 00:32:02.119
is in some cases, it's an absolute requirement.
572
00:32:03.119 --> 00:32:05.200
And there's tooling that can help you with this, right.
573
00:32:06.160 --> 00:32:08.960
Oh yeah, I was gonna say, because it's it's not
574
00:32:09.200 --> 00:32:11.960
just tooling, but it's tooling that you'll use. Right, And
575
00:32:12.079 --> 00:32:14.279
for me, it kind of has to be automatic and
576
00:32:14.319 --> 00:32:16.279
get in my face because I'm lazy and I don't
577
00:32:16.279 --> 00:32:19.079
go look at it every however often you're supposed to do.
578
00:32:19.920 --> 00:32:22.000
It's like changing my oil. Right, it's not till the
579
00:32:22.079 --> 00:32:25.680
light comes on and I go, huh, you know.
580
00:32:26.160 --> 00:32:28.519
Well that's where I find it a bit surprising. Like
581
00:32:29.079 --> 00:32:31.160
I don't know however often it is, but every so
582
00:32:31.319 --> 00:32:36.559
often there's some high profile case where it's the extreme.
583
00:32:36.680 --> 00:32:39.519
You know, the maintainer goes off and does something to
584
00:32:39.599 --> 00:32:42.680
their module that they probably shouldn't have. But everybody seems
585
00:32:42.720 --> 00:32:46.519
surprised that this can happen, right, And like if you
586
00:32:46.960 --> 00:32:49.440
paid attention, it's sort of something you should know can
587
00:32:49.559 --> 00:32:52.359
happen in the plan, and so it shouldn't be a surprise,
588
00:32:52.440 --> 00:32:55.400
And everybody seems to get in a big fuss and
589
00:32:55.480 --> 00:32:57.680
then after a few months it tails off and it's
590
00:32:57.759 --> 00:32:59.880
not in your you know, it's not in the news anymore,
591
00:33:00.039 --> 00:33:03.599
and people forget about it again. So well, I mean,
592
00:33:03.720 --> 00:33:05.160
that's interesting.
593
00:33:05.519 --> 00:33:08.000
Just anecdotally. I'm not going to say like you know
594
00:33:08.079 --> 00:33:09.839
who or what module it was, but you know, this
595
00:33:10.000 --> 00:33:13.279
is going back and back to twenty fifteen, twenty sixteen,
596
00:33:13.680 --> 00:33:17.160
one of the most used modules on NPM, and the
597
00:33:17.200 --> 00:33:21.119
maintainer was quite upset and threatened to just delete everything,
598
00:33:21.480 --> 00:33:24.079
you know, delete everything off, get up, delete everything off NPM.
599
00:33:24.759 --> 00:33:26.720
And it came down within minutes that we were able
600
00:33:26.920 --> 00:33:28.799
to convince them not to do that, and it would
601
00:33:28.799 --> 00:33:32.240
have broken the entire ecosystem literally they had they had
602
00:33:32.279 --> 00:33:36.559
they done this, and you know it, Sometimes it just
603
00:33:36.640 --> 00:33:38.680
comes down to a maintainer being burnt out and not
604
00:33:38.759 --> 00:33:41.880
feel like they actually have the support. It doesn't have
605
00:33:41.920 --> 00:33:43.319
to be anything that various. It doesn't have to be
606
00:33:43.400 --> 00:33:45.119
selling it or somebody else taking over. It could just
607
00:33:45.160 --> 00:33:46.920
be kind I'm tired of dealing with this.
608
00:33:48.119 --> 00:33:51.119
Yeah, it is important to mention though that following what
609
00:33:51.279 --> 00:33:54.759
happened with left PAT that specifically can no longer happen
610
00:33:54.839 --> 00:33:55.400
with NPM.
611
00:33:56.559 --> 00:33:56.759
Yeah.
612
00:33:56.880 --> 00:33:59.279
But I mean I can also see, you know, because
613
00:33:59.279 --> 00:34:01.240
you guys have talked to about you know, you hand
614
00:34:01.319 --> 00:34:04.000
it off to a new maintainer or you know, somebody
615
00:34:04.160 --> 00:34:06.720
otherwise takes it over. But I could see somebody just
616
00:34:06.839 --> 00:34:10.599
being tired and you know, they know they have a
617
00:34:10.679 --> 00:34:12.840
problem in their package, and they know they want it fixed,
618
00:34:12.840 --> 00:34:14.719
and they get a PR that looks like it solves it,
619
00:34:15.119 --> 00:34:18.119
and it's got something problematic in it. I mean, you know,
620
00:34:18.400 --> 00:34:20.079
just that easy, you've got something in there that you
621
00:34:20.119 --> 00:34:20.480
don't want.
622
00:34:22.039 --> 00:34:22.239
Yeah.
623
00:34:22.239 --> 00:34:25.719
I think back to Dan's comment, like the I think
624
00:34:25.760 --> 00:34:28.559
that this has been a challenge or a feature of
625
00:34:28.719 --> 00:34:32.079
the NOES ecosystem for quite a long time. So things
626
00:34:32.159 --> 00:34:34.320
have improved, Like you know, the MPM you can no
627
00:34:34.440 --> 00:34:37.239
longer delete things, and so a lot of that learning
628
00:34:37.280 --> 00:34:40.719
has actually helped to improve the ecosystem over time. That
629
00:34:40.920 --> 00:34:44.280
other sort of language ecosystems may be relearning some of
630
00:34:44.360 --> 00:34:45.559
those lessons along the way.
631
00:34:47.360 --> 00:34:51.400
So beyond sort of being aware, right, hey, there's an announcement.
632
00:34:51.559 --> 00:34:54.320
This package where is going to cause you this problem? Right,
633
00:34:54.400 --> 00:34:56.360
it's got you know, somebody put a back door in it,
634
00:34:56.679 --> 00:34:59.199
or hey we discovered a zero day, Right, it doesn't
635
00:34:59.199 --> 00:35:02.559
even have to be that farious, right, you know, the
636
00:35:02.679 --> 00:35:05.559
best practice has changed and they haven't kept up with it, right,
637
00:35:05.679 --> 00:35:08.079
and so you know you just need to update it
638
00:35:08.199 --> 00:35:11.519
or whatever. Beyond that, I mean, I know there's like
639
00:35:11.719 --> 00:35:14.920
NPM audit, but I kind of have to just run
640
00:35:15.000 --> 00:35:17.360
that on my machine when I'm running stuff. And you know,
641
00:35:17.519 --> 00:35:20.719
sometimes I see the notification, sometimes I don't. But are
642
00:35:20.960 --> 00:35:24.039
there are there tools that while I'm working, are going
643
00:35:24.119 --> 00:35:25.960
to tell me, hey, you have a problem, like I
644
00:35:26.039 --> 00:35:28.440
may not have seen the Twitter post or I may
645
00:35:28.519 --> 00:35:32.079
not have seen the blog post or the announcement or whatever.
646
00:35:32.440 --> 00:35:33.960
That's going to help me stay up on.
647
00:35:36.639 --> 00:35:38.360
Depend is the first.
648
00:35:38.159 --> 00:35:41.519
One, right, the first one you should be looking at,
649
00:35:43.920 --> 00:35:47.800
and it's going to automatically unless you say, but you shouldn't.
650
00:35:48.280 --> 00:35:50.360
I don't think that's something you should do.
651
00:35:52.079 --> 00:35:56.519
And I've that's when I've also become been becoming a
652
00:35:56.599 --> 00:36:04.280
big fan of the socket stuff, the new process company.
653
00:36:05.719 --> 00:36:06.000
Soccer.
654
00:36:06.599 --> 00:36:09.920
I think, yeah, we had them on I'll find the
655
00:36:10.000 --> 00:36:12.559
episode number and we can put it out there.
656
00:36:13.920 --> 00:36:14.119
Yeah.
657
00:36:14.119 --> 00:36:16.400
I think the first part that Italian mentioned is just
658
00:36:16.679 --> 00:36:19.000
keeping up to date, and there's tools that will basically
659
00:36:19.519 --> 00:36:21.480
like those keep you help you keep up to date.
660
00:36:21.880 --> 00:36:24.320
And then there's other tools like the socket one or
661
00:36:24.599 --> 00:36:27.760
or snack who helped look more specifically.
662
00:36:27.320 --> 00:36:27.880
At well.
663
00:36:30.880 --> 00:36:36.239
Mike is not true, depend on also recent discounts for cvs. Okay, yes,
664
00:36:36.440 --> 00:36:42.039
so g tab will if will push if attacks that
665
00:36:42.079 --> 00:36:45.440
there was a vulnerability it. Whenever you push commits to
666
00:36:45.559 --> 00:36:47.920
the report, it will show you that there is there's
667
00:36:48.000 --> 00:36:49.719
been security problems.
668
00:36:50.119 --> 00:36:53.679
Okay, to know fantastic.
669
00:36:54.280 --> 00:36:54.440
You know.
670
00:36:55.800 --> 00:36:58.880
The important part is that it just works. Okay, you
671
00:36:58.960 --> 00:37:02.480
don't you have to think you just detects it automatic.
672
00:37:02.519 --> 00:37:05.119
You just need to use get up. Well if you're
673
00:37:05.280 --> 00:37:08.519
if you're a developer, you're not developing guitub well you know, okay.
674
00:37:09.199 --> 00:37:12.400
I think you have to build a habit of not
675
00:37:12.559 --> 00:37:15.000
ignoring it. I think a lot of folks you know,
676
00:37:15.320 --> 00:37:18.239
you know, turned on, they're like, okay, it's there, I'm
677
00:37:18.280 --> 00:37:20.679
not you know, and they just don't act on it
678
00:37:20.679 --> 00:37:23.519
at all. So I think there, Yes, it can require
679
00:37:23.599 --> 00:37:25.760
building a new habit.
680
00:37:26.880 --> 00:37:29.559
Yeah, I guess that comes with a lot of stuff.
681
00:37:31.920 --> 00:37:37.280
We know a lot of stuff. Yeah, go ahead.
682
00:37:39.679 --> 00:37:42.440
Back because the CBS are not that great, right, so
683
00:37:43.480 --> 00:37:46.719
you can get a lot of noise we aren't issues,
684
00:37:46.760 --> 00:37:49.599
and that that sort of unfortunately reduces the benefits.
685
00:37:49.960 --> 00:37:54.440
That looks people people ignore medical conditions, like what do
686
00:37:54.519 --> 00:37:56.920
you expect? You know, people like to ignore things.
687
00:37:58.119 --> 00:37:59.679
My car has been complaining that it needs and all
688
00:37:59.760 --> 00:38:01.519
change the past month and I haven't.
689
00:38:01.360 --> 00:38:01.719
Done it yet.
690
00:38:01.800 --> 00:38:12.559
So yeah, hm, anything else you want to look. But
691
00:38:13.199 --> 00:38:19.119
to be fair, people like use MP stuff on NPM
692
00:38:19.239 --> 00:38:22.440
because they want to reduce their their their workload and
693
00:38:22.679 --> 00:38:27.280
and they don't consider the the load that they're assuming
694
00:38:27.440 --> 00:38:30.960
when they do that, and they are sometimes resentful even
695
00:38:31.039 --> 00:38:34.199
of it. So it is what it is. But yeah, definitely,
696
00:38:34.719 --> 00:38:37.360
if you're going to be using packages, you need to
697
00:38:37.480 --> 00:38:40.679
assume responsibility for the packages that you're using.
698
00:38:41.519 --> 00:38:43.159
And I'll just say, you know, it's not just the
699
00:38:43.199 --> 00:38:45.320
people get resentful of it. You know, some people look
700
00:38:45.360 --> 00:38:47.639
at what's published on NPM and they're saying, hey, you
701
00:38:47.719 --> 00:38:50.480
gave me this thing for free. Cool, You're now obligated
702
00:38:50.519 --> 00:38:53.639
to support me forever and answer every question I have advancement.
703
00:38:54.079 --> 00:38:56.360
So no, there is no such thing as enclinement here.
704
00:38:57.639 --> 00:39:00.760
If you if you're using a package, if it doesn't
705
00:39:00.800 --> 00:39:03.360
work for you, help me, don't demand that I do
706
00:39:03.440 --> 00:39:04.280
it for you for free.
707
00:39:05.480 --> 00:39:08.599
I just want to say that anybody who's listening to
708
00:39:08.760 --> 00:39:12.199
this podcast and rather than watching it, you're losing half
709
00:39:12.280 --> 00:39:14.599
of Mattel's.
710
00:39:18.920 --> 00:39:23.760
I call them vampires. Okay, they have the vampires of
711
00:39:23.880 --> 00:39:27.920
open source. Okay, and you know your vampires can be
712
00:39:28.719 --> 00:39:30.719
you know, you need to put out garlic, and you
713
00:39:30.840 --> 00:39:33.159
can stab them in the heart with a piece of wound, right,
714
00:39:33.960 --> 00:39:38.559
so that's what you do with them. Okay, So basically
715
00:39:38.719 --> 00:39:41.480
that isn't I have zero tolerance for vampires in any
716
00:39:41.519 --> 00:39:42.159
of my records.
717
00:39:42.679 --> 00:39:45.719
Okay, Yeah. The problem really is that Racula was that
718
00:39:45.920 --> 00:39:49.000
one vampire and there with the whole world full of humans,
719
00:39:49.079 --> 00:39:51.599
and here in the open source community it's the reverse
720
00:39:51.679 --> 00:39:54.320
the majority.
721
00:39:55.000 --> 00:39:57.559
Fine, but I have zero tolerance like the one that
722
00:39:57.679 --> 00:40:00.840
they get really toxic about it when you tell you no,
723
00:40:01.039 --> 00:40:01.599
it's your bug.
724
00:40:01.639 --> 00:40:02.360
It's not my bug.
725
00:40:03.199 --> 00:40:08.039
Okay, it's your problem. It's your problem that production, Your
726
00:40:08.039 --> 00:40:10.239
production is broken, not mine.
727
00:40:11.079 --> 00:40:12.639
Yes, but the train it's.
728
00:40:12.559 --> 00:40:13.840
A cultural problem.
729
00:40:14.079 --> 00:40:17.199
I don't just think it's a cultural problematatic system level
730
00:40:17.760 --> 00:40:20.920
like we were discussing earlier that developers are not used
731
00:40:20.960 --> 00:40:26.679
to sharing and sharing the responsibility and the probably we need.
732
00:40:27.280 --> 00:40:32.400
Yeah, it's a cultural problem that the majority of humanity
733
00:40:32.480 --> 00:40:33.119
are whiners.
734
00:40:34.920 --> 00:40:37.239
All right, I'm gonna I'm gonna derail us back to
735
00:40:37.360 --> 00:40:40.800
our note pillars here and and we're going to move
736
00:40:40.840 --> 00:40:44.400
along to avoid global variables can figs or singletons.
737
00:40:46.079 --> 00:40:50.679
Yes, this is a big one. This catches a lot
738
00:40:50.679 --> 00:40:53.119
of people. And it's not just no I understanding like
739
00:40:53.199 --> 00:40:55.679
you know, for for for workers a completely different environment.
740
00:40:56.280 --> 00:40:57.519
It's programming.
741
00:41:00.559 --> 00:41:01.960
It's a global problem.
742
00:41:04.159 --> 00:41:06.400
Because global you know, individual like iOS tied to an
743
00:41:06.400 --> 00:41:11.079
individual request and historical related to requests from another request,
744
00:41:11.159 --> 00:41:14.360
and it's gonna work. So like here we may explicit
745
00:41:14.519 --> 00:41:16.639
like don't do this, but yeah, you know we run
746
00:41:16.719 --> 00:41:20.239
into this all damn time that people just trip themselves up.
747
00:41:22.320 --> 00:41:27.360
How how is NOE different than than general development? Like
748
00:41:27.760 --> 00:41:30.960
I like, I've been writing code for I don't know
749
00:41:31.440 --> 00:41:35.440
thirty years. I remember when I started feeling people were
750
00:41:35.480 --> 00:41:39.280
telling me my teachers, my my mentors, whatever. Don't use
751
00:41:39.360 --> 00:41:43.480
globals like what's what's new node? That kind of changes
752
00:41:43.599 --> 00:41:44.440
the dynamic here.
753
00:41:45.239 --> 00:41:51.840
A significant portion of the developers that arrive in node Okay,
754
00:41:54.480 --> 00:41:59.679
it comes from a front end background okay, and or
755
00:41:59.719 --> 00:42:03.199
reach in aly historically okay, let's put it in the
756
00:42:03.400 --> 00:42:06.800
jquity days. Okay, all the state was handled in a
757
00:42:06.880 --> 00:42:07.599
global fashion.
758
00:42:08.840 --> 00:42:12.679
That don't and yeah they don't. That that comes well
759
00:42:12.760 --> 00:42:13.239
to the don't.
760
00:42:13.360 --> 00:42:13.679
Okay.
761
00:42:14.159 --> 00:42:17.400
The problem is it's one user, okay, one one browser,
762
00:42:17.519 --> 00:42:18.880
one user, one state.
763
00:42:19.559 --> 00:42:26.079
Okay, to some extent, it's super simple, Okay, makes total sense. Okay.
764
00:42:28.039 --> 00:42:29.760
Not JS is not a browser okay.
765
00:42:30.440 --> 00:42:32.719
One not JS process can handle more than one state
766
00:42:33.159 --> 00:42:35.400
with one exception, if you deploy on a w S
767
00:42:35.480 --> 00:42:38.760
lambda or so that you or or workers where one
768
00:42:38.880 --> 00:42:42.559
request is one state and one user. So you could
769
00:42:42.719 --> 00:42:45.400
potentially achieat that. And that's what you know, those kinds
770
00:42:45.400 --> 00:42:48.760
of ens gives it to you because in fact, Javaski
771
00:42:48.840 --> 00:42:51.280
developer don't seem to be able to understand this principle.
772
00:42:52.239 --> 00:42:54.639
But if it's not the jobs developers. So when we
773
00:42:54.719 --> 00:43:00.199
see people, no matter what language you're in, mistakes, yeah,
774
00:43:01.320 --> 00:43:03.639
and I don't think there's anything you need to know.
775
00:43:04.519 --> 00:43:07.440
It's probably not. But anyway, the.
776
00:43:10.000 --> 00:43:12.719
The a lot of a lot of people also a
777
00:43:12.840 --> 00:43:16.639
part of them they never know anything different.
778
00:43:16.800 --> 00:43:19.199
They come from a diverse byground. They didn't study any
779
00:43:19.199 --> 00:43:20.400
of this stuff. Okay.
780
00:43:21.159 --> 00:43:23.760
The other part is a group of people that we
781
00:43:23.880 --> 00:43:27.760
used to do all software engineering and do a lot
782
00:43:27.880 --> 00:43:30.880
of interface and a lot of things come from a
783
00:43:31.000 --> 00:43:33.920
javaor dot m background that when they swop to know
784
00:43:34.119 --> 00:43:36.639
they throw package at all of that and throw it away.
785
00:43:37.159 --> 00:43:39.360
And when you show them how you can you know,
786
00:43:39.719 --> 00:43:42.639
you can actually use this pattern to build a system
787
00:43:42.760 --> 00:43:45.960
that is modular. And oh so I can do all
788
00:43:46.000 --> 00:43:48.599
the things that I was used to do in Java
789
00:43:48.679 --> 00:43:51.559
or dot nety No, yes you can, and they're just
790
00:43:52.639 --> 00:43:53.280
I didn't know.
791
00:43:56.880 --> 00:44:00.599
So so my question is like, what exactly is a
792
00:44:00.639 --> 00:44:01.239
solution here?
793
00:44:01.320 --> 00:44:01.440
Right?
794
00:44:01.599 --> 00:44:01.719
Is it?
795
00:44:02.559 --> 00:44:05.320
Is it like importing environment variables is.
796
00:44:07.719 --> 00:44:07.880
Right?
797
00:44:08.559 --> 00:44:10.480
But I mean I mean some things you do have
798
00:44:10.599 --> 00:44:12.840
to bring in through configus, right, I mean they are
799
00:44:13.039 --> 00:44:16.639
essentially going to be globally available. Yeah, I strike keys
800
00:44:16.719 --> 00:44:19.440
or API keys or you know you set node and
801
00:44:19.840 --> 00:44:21.800
to production and right, and that.
802
00:44:21.960 --> 00:44:25.559
Kind of changes the game. So so stuff like that, Yeah,
803
00:44:26.039 --> 00:44:30.480
what big one Pensy intection is the big one for modules.
804
00:44:30.840 --> 00:44:32.679
You know, like a lot of some modules and stuff.
805
00:44:32.719 --> 00:44:34.519
You know, when you go to require something, you get
806
00:44:34.559 --> 00:44:37.039
back some single thing rather than that is your return
807
00:44:37.159 --> 00:44:39.800
a factory that you know that you can use to
808
00:44:39.880 --> 00:44:43.719
create your state management. So I think I think there
809
00:44:43.760 --> 00:44:45.840
are a number of things. Some of these are discussed
810
00:44:45.880 --> 00:44:51.079
in the in the blog post and tailor about them,
811
00:44:51.199 --> 00:44:54.400
but the actually is the big one. You want to
812
00:44:54.480 --> 00:44:56.920
actually say, you know, for this particular bit of code,
813
00:44:57.280 --> 00:44:59.199
this is what I want to make available to that,
814
00:44:59.599 --> 00:45:01.880
not just have it generally available for everyone to access.
815
00:45:05.239 --> 00:45:10.360
Also, you know, if if all your objects are singletones,
816
00:45:10.480 --> 00:45:15.440
it's not object oriented programming. And all the data within
817
00:45:15.559 --> 00:45:18.119
a global single tone, all the fields within a global
818
00:45:18.199 --> 00:45:20.920
single tone, certainly all the public properties within a global
819
00:45:20.960 --> 00:45:26.079
signal tones are affectually all globals. So if I'm saying no,
820
00:45:26.199 --> 00:45:28.960
I don't have a hundred globals, I have just one global,
821
00:45:29.119 --> 00:45:32.400
but it has one hundred public properties, then you've got
822
00:45:32.440 --> 00:45:33.280
one hundred globals.
823
00:45:34.199 --> 00:45:37.320
Yes, And in.
824
00:45:37.360 --> 00:45:42.360
Genera where and in general beware also mutable state, it's
825
00:45:42.400 --> 00:45:43.239
certainly global.
826
00:45:43.320 --> 00:45:44.079
Mutable states.
827
00:45:45.079 --> 00:45:47.559
Avoid it all costs if you can. And this is
828
00:45:47.599 --> 00:45:50.880
the problem things like you know process do you know whatever?
829
00:45:51.079 --> 00:45:54.280
In node it's a global, it's a global. A lot
830
00:45:54.320 --> 00:45:57.559
of folks will find it are using that for feature detection. Right,
831
00:45:57.639 --> 00:46:01.519
they'll say, hey, if process exists and obviously i'm running
832
00:46:01.519 --> 00:46:04.199
a note, Well no, because process now exists and you know,
833
00:46:04.320 --> 00:46:07.519
and it just and find it exists in workers. Okay,
834
00:46:07.559 --> 00:46:09.599
Well instead of using process, let me look at you know,
835
00:46:09.719 --> 00:46:13.320
process dot whatever property. Well, if the run times start,
836
00:46:13.679 --> 00:46:17.239
these other run times start. Also adding that relying on
837
00:46:17.320 --> 00:46:20.119
these globals, just the existence of these globals, just to
838
00:46:20.440 --> 00:46:23.119
depend on where you're at, everything still breaks. You're just
839
00:46:23.239 --> 00:46:26.199
shifting the problem. It's going to break somewhere else. So
840
00:46:26.239 --> 00:46:28.000
there's lots of problems with these, with these ideas of
841
00:46:28.079 --> 00:46:31.760
having these globals. And it's not just whether you're storing state,
842
00:46:31.840 --> 00:46:34.920
it's but decisions are you making based on existence.
843
00:46:34.519 --> 00:46:37.400
Of the global it's us their agent strings all over again.
844
00:46:37.840 --> 00:46:41.760
Yeah, only maybe even worse because there's so many different
845
00:46:41.760 --> 00:46:42.320
ways of doing it.
846
00:46:46.280 --> 00:46:51.880
Oh man, So the way the worst pattern here is
847
00:46:52.039 --> 00:46:56.400
those applications that then they are fully configurable US using
848
00:46:56.519 --> 00:47:00.599
environment variables. Okay, and the environment variables are pride into
849
00:47:00.679 --> 00:47:04.320
a thousand different files, so you don't know what are
850
00:47:04.360 --> 00:47:07.079
the confusion, and each one has a different default, and
851
00:47:07.199 --> 00:47:12.199
you don't know what each of anyone controls and the
852
00:47:12.320 --> 00:47:14.719
only way to know is just grab the full codebase.
853
00:47:15.719 --> 00:47:16.119
Mm hmm.
854
00:47:16.480 --> 00:47:20.880
It's a nightmare, okay, and I don't you know there's
855
00:47:20.880 --> 00:47:21.360
a nightmare.
856
00:47:21.400 --> 00:47:24.719
So you want to take when you're your application starts,
857
00:47:24.760 --> 00:47:26.280
you want to take your environment variable.
858
00:47:26.360 --> 00:47:27.039
So you're conflict.
859
00:47:27.119 --> 00:47:30.119
You pass the thing you'd get the values, and then
860
00:47:30.159 --> 00:47:32.679
you pass it down each single application.
861
00:47:34.800 --> 00:47:38.119
Now you've got a recommendation especially sorry.
862
00:47:38.800 --> 00:47:42.719
Especially, do not use schools if you're going to publish,
863
00:47:42.880 --> 00:47:46.159
like we were suggesting earlier, for everyone to consume.
864
00:47:47.159 --> 00:47:49.199
Yes, let's try.
865
00:47:51.320 --> 00:47:55.440
Yeah, you're just spreading your bad habits around and impacting everybody.
866
00:47:56.840 --> 00:47:59.400
I would say that module, you know, any dependencies that
867
00:47:59.400 --> 00:48:02.320
you're bringing in, do not touch globals. I mean, if
868
00:48:02.320 --> 00:48:06.440
you're consuming globals like global APIs like URL, fine, do
869
00:48:06.679 --> 00:48:09.159
not mu take global state from the module. Period.
870
00:48:13.199 --> 00:48:16.679
So you kind of said that there might be configures
871
00:48:16.840 --> 00:48:19.719
throughout your app. That is the issue that you have
872
00:48:19.840 --> 00:48:22.639
your configurations that may be spread across different places where
873
00:48:22.639 --> 00:48:26.760
you get them from. Or is the issue that you
874
00:48:26.920 --> 00:48:28.480
have a lot of places where it changes the way
875
00:48:28.480 --> 00:48:29.119
your code works.
876
00:48:32.119 --> 00:48:37.960
We're both I think both Socially, you manage sort to interrupt,
877
00:48:38.079 --> 00:48:41.199
but I'm really am trying to to understand, James, where
878
00:48:41.199 --> 00:48:43.960
you get what you're getting at? If I've got like
879
00:48:44.440 --> 00:48:48.719
what I like effectively global configuration, Like there are certain
880
00:48:49.519 --> 00:48:53.400
configuration flags that impact the behavior of my entire application.
881
00:48:54.320 --> 00:48:59.159
Would you rather have one module responsible for all that
882
00:48:59.440 --> 00:49:03.519
global figuration and everybody gets injected with it, or would
883
00:49:03.559 --> 00:49:07.119
you rather that each model is just responsible for the
884
00:49:07.239 --> 00:49:11.440
configuration that directly pertains to what that module does, Like,
885
00:49:11.599 --> 00:49:13.280
what would be your approach here?
886
00:49:14.639 --> 00:49:18.440
My approach would be that the application should collect whatever
887
00:49:18.599 --> 00:49:24.039
configuration is available and inject that into the modules. So
888
00:49:24.159 --> 00:49:27.559
the module itself should not be looking at processing. It
889
00:49:27.599 --> 00:49:30.360
should be relying on what arguments are passed to it
890
00:49:30.719 --> 00:49:31.519
from the application.
891
00:49:34.039 --> 00:49:37.679
So I'm just going to ask, because if there are
892
00:49:37.679 --> 00:49:40.519
a lot of places where your configuration can change the
893
00:49:40.599 --> 00:49:45.599
way that the code flows through your application, it almost
894
00:49:45.719 --> 00:49:48.639
sounds like feature flags, And I know a lot of
895
00:49:48.679 --> 00:49:52.159
people use those. So are you arguing against feature flags
896
00:49:52.239 --> 00:49:52.880
or do you see those.
897
00:49:52.760 --> 00:49:55.639
Differently the same different I think it comes down to
898
00:49:55.760 --> 00:49:57.039
how they're injected into the module.
899
00:49:57.320 --> 00:49:57.599
Okay.
900
00:50:00.119 --> 00:50:05.159
The problem is that sometimes it can lead to having
901
00:50:05.280 --> 00:50:11.039
to pass things through a lot of function calls, like
902
00:50:11.239 --> 00:50:15.400
You're trying to get a flag way down, and now
903
00:50:15.480 --> 00:50:18.599
you've got to pass it through a lot of you know,
904
00:50:18.760 --> 00:50:20.760
a colls B, colls C. Now I have to add
905
00:50:20.800 --> 00:50:23.239
the parameter to all of these functions which really don't
906
00:50:23.320 --> 00:50:25.239
care about this feature flag just to get it all
907
00:50:25.280 --> 00:50:27.320
the way down. So I'm saying, hey, I'm going to
908
00:50:27.400 --> 00:50:30.480
clean the code by just making it global. Uh, and
909
00:50:30.639 --> 00:50:34.199
now I can access it from from wherever I need to.
910
00:50:34.239 --> 00:50:36.480
It's kind of like the problem that React tries to
911
00:50:36.559 --> 00:50:38.039
solve with context in a way.
912
00:50:38.519 --> 00:50:40.480
Yeah, well, I mean we have the same Like that's
913
00:50:40.519 --> 00:50:43.920
also where acinc Global storage kind of kind of comes
914
00:50:43.920 --> 00:50:46.280
into play, where you can use acent local storage to
915
00:50:46.360 --> 00:50:49.400
avoid that, you know, having to pass it through each layer,
916
00:50:50.719 --> 00:50:52.800
but you still have to make the acinc local storage
917
00:50:52.840 --> 00:50:56.719
variable itself available, you know, to the various places that
918
00:50:56.760 --> 00:50:59.960
are So how do you do that? It's it's it's
919
00:51:00.199 --> 00:51:03.960
not a problem free approach. It has its own challenges.
920
00:51:04.079 --> 00:51:06.840
Whether you have to pass this thing down or make
921
00:51:06.960 --> 00:51:09.800
some you know, make some things global and other things not.
922
00:51:10.159 --> 00:51:11.960
You have to be very intentional and plant it out
923
00:51:12.039 --> 00:51:16.679
very carefully. But as a whole overall, right, relying on
924
00:51:16.760 --> 00:51:20.480
dependency injection is going to be far better a pattern
925
00:51:20.920 --> 00:51:23.840
in a far more maintainable pattern free application than allowing
926
00:51:24.000 --> 00:51:26.920
modules to just arbitrarily access and modified level state.
927
00:51:27.719 --> 00:51:31.159
Yeah for sure, then you need to somebody modified my
928
00:51:31.280 --> 00:51:32.840
state and I have no idea who.
929
00:51:34.559 --> 00:51:35.000
My cheese?
930
00:51:35.760 --> 00:51:38.280
Yeah, yeah, I do want Before we move on to
931
00:51:38.400 --> 00:51:41.280
the next one, you kind of made an interesting assertion
932
00:51:41.639 --> 00:51:44.760
in this pillar which is always set no d V
933
00:51:44.920 --> 00:51:49.119
to production. Can you elaborate why? What's you know? Why?
934
00:51:49.360 --> 00:51:50.000
And why is it?
935
00:51:50.719 --> 00:51:50.760
Like?
936
00:51:51.639 --> 00:51:54.320
This is an old battle, This is an old battle
937
00:51:54.400 --> 00:52:00.280
of mine? Okay. Now all of these comes from one problem. Okay,
938
00:52:00.440 --> 00:52:01.199
for developers.
939
00:52:02.119 --> 00:52:06.960
If I ask ten developers what the development environment is,
940
00:52:09.360 --> 00:52:17.400
they tell Mike Black. If if you ask ten ops people,
941
00:52:19.039 --> 00:52:22.639
they say, oh, it's some service running somewhere where the
942
00:52:22.719 --> 00:52:23.800
developer test that code.
943
00:52:23.960 --> 00:52:27.760
Okay, that's the source of the problem. Okay. They we
944
00:52:27.880 --> 00:52:31.599
use the same the same terms for two different things. Okay.
945
00:52:32.840 --> 00:52:38.480
Now this means that somebody, somebody bright mind started to
946
00:52:38.519 --> 00:52:47.039
put published a module called muh config in MPM and
947
00:52:47.760 --> 00:52:51.480
then that loads you the now the score environment variable
948
00:52:52.239 --> 00:52:57.119
for loading up the conflict file. However, some libraries in
949
00:52:58.039 --> 00:53:02.840
like Express for example, React, than others changes their behavior
950
00:53:02.920 --> 00:53:04.079
based on the northern.
951
00:53:03.840 --> 00:53:06.280
The score en of environment variable being set to production.
952
00:53:07.360 --> 00:53:10.800
Now, if you're loading the conflict for your service environment
953
00:53:10.880 --> 00:53:14.719
based on that variable, you are essentially your staging environment
954
00:53:14.880 --> 00:53:16.320
or anything that is not production.
955
00:53:17.840 --> 00:53:21.280
Absolutely you will have massive issues.
956
00:53:21.719 --> 00:53:25.199
And that confic module is downloaded so many times, okay,
957
00:53:25.719 --> 00:53:27.840
which is unbelievable.
958
00:53:28.679 --> 00:53:31.800
And frankly, it should not be used. Okay.
959
00:53:32.639 --> 00:53:36.000
I'm very happy to stand here making these recommendation. So
960
00:53:36.079 --> 00:53:37.760
don't use that module if possible.
961
00:53:37.840 --> 00:53:38.119
Okay.
962
00:53:38.320 --> 00:53:41.880
So when you say always you mean in development as well?
963
00:53:42.679 --> 00:53:44.880
Yeah, no, I mean in development is the only moment
964
00:53:44.920 --> 00:53:47.360
where you don't set it very often. But whenever you
965
00:53:47.400 --> 00:53:49.519
want to do any testing that is relevant to what
966
00:53:49.760 --> 00:53:52.880
production looks like, you need to set it to production, even.
967
00:53:52.679 --> 00:53:53.960
If it's a staging environment.
968
00:53:54.639 --> 00:53:57.599
So oh wait a three, I am using something that
969
00:53:58.079 --> 00:54:00.840
controls my environment. That's called an environment. I said it
970
00:54:00.880 --> 00:54:05.320
to production even if it's a staging environment. Yes, this
971
00:54:05.719 --> 00:54:09.880
was such a bad term to begin with, okay, and
972
00:54:10.039 --> 00:54:13.920
such a massive headache pain that unfortunately.
973
00:54:14.960 --> 00:54:19.280
We're stuck with. So and I'm sorry, like, please.
974
00:54:19.079 --> 00:54:23.480
Don't use again, don't use, don't cload the configuration based
975
00:54:23.519 --> 00:54:25.559
on that valuable because it's a bad idea.
976
00:54:26.000 --> 00:54:28.400
I've had that bite me squarely in the rear end before.
977
00:54:28.519 --> 00:54:31.760
So all right, just in the interest of time, we're
978
00:54:31.760 --> 00:54:33.599
going to move to the next one. It's handled errors
979
00:54:33.639 --> 00:54:38.000
and provide meaningful logs. I'd stand up and screen yes,
980
00:54:39.719 --> 00:54:41.920
because I had this one hurt me too. But where
981
00:54:42.000 --> 00:54:42.840
where you guys.
982
00:54:50.840 --> 00:54:51.239
For me that?
983
00:54:51.280 --> 00:54:53.239
I mean just the title of this one is is
984
00:54:54.159 --> 00:54:58.559
I think? So it's like, that's that's good enough the
985
00:54:58.679 --> 00:55:03.360
provide meaningful logs. I think I think this is not
986
00:55:03.480 --> 00:55:05.599
specific to note. You know, we've all had examples of
987
00:55:05.679 --> 00:55:09.239
run times where it's just like, hey, error happened. Cool?
988
00:55:09.559 --> 00:55:10.960
Where how?
989
00:55:11.280 --> 00:55:11.920
What? What? What?
990
00:55:12.079 --> 00:55:16.079
Actually is that take the time? People have to understand
991
00:55:16.119 --> 00:55:19.400
that the errors that their their system produces is part
992
00:55:19.440 --> 00:55:22.079
of the contract, part of the a P. I need
993
00:55:22.159 --> 00:55:25.800
to be as intentional about the design of errors as
994
00:55:25.800 --> 00:55:29.159
they are about the the syntax or the or the
995
00:55:29.599 --> 00:55:32.800
signature of the functions that the calling they're exposing errors
996
00:55:32.880 --> 00:55:34.639
are a PI I designed them accordingly.
997
00:55:38.519 --> 00:55:40.800
If your server crashes in the middle of the night
998
00:55:41.800 --> 00:55:44.960
and you're told about it in the morning after it's
999
00:55:45.000 --> 00:55:48.119
been restarted, will you able to you will you be
1000
00:55:48.159 --> 00:55:51.360
able to do anything about it. If your answer is no,
1001
00:55:51.679 --> 00:55:52.679
then you've got the problem.
1002
00:55:56.079 --> 00:55:58.440
Yeah, it's.
1003
00:55:59.800 --> 00:56:02.400
It's it's so rough when you yeah, you have this issue.
1004
00:56:03.000 --> 00:56:05.159
And then essentially you have to go keep going back
1005
00:56:05.239 --> 00:56:07.599
and modifying what gets logged to try and figure it out,
1006
00:56:07.639 --> 00:56:11.320
because you can't duplicate it in development and you don't
1007
00:56:11.320 --> 00:56:13.239
have enough information in your logs to figure out how
1008
00:56:13.280 --> 00:56:17.639
it happened in production. And sometimes there are going to
1009
00:56:17.679 --> 00:56:19.639
be bugs that way, no matter how good at this
1010
00:56:19.760 --> 00:56:23.920
you are. But for heaven's sake, you know, if you
1011
00:56:24.159 --> 00:56:27.800
if you know that something unexpected might happen there, you
1012
00:56:27.920 --> 00:56:30.760
know you can set yourself up for success by just
1013
00:56:30.840 --> 00:56:34.440
being aware and then having a good API and a
1014
00:56:34.519 --> 00:56:36.440
good approach to logging errors.
1015
00:56:36.880 --> 00:56:40.960
Look, you might not have the proper, the sufficient logs
1016
00:56:41.000 --> 00:56:44.559
the first time around, because you know, obviously there's a
1017
00:56:44.679 --> 00:56:46.880
limit on how much you can log and how and
1018
00:56:47.000 --> 00:56:50.360
you don't want to be, you know, excessively verbose, and
1019
00:56:50.400 --> 00:56:56.039
they're usually also costs associated with logging. But you know,
1020
00:56:56.119 --> 00:56:58.079
at the very least you want to be able to
1021
00:56:58.280 --> 00:57:01.360
change log level on some so that the next time
1022
00:57:01.440 --> 00:57:04.639
it crashes at least then you'll you'll you'll have sufficient
1023
00:57:04.760 --> 00:57:08.559
context if you now have to start adding new logs.
1024
00:57:10.360 --> 00:57:11.400
It's going to be a pain.
1025
00:57:12.039 --> 00:57:15.360
M oh yeah, definitely. In this In the in the
1026
00:57:15.440 --> 00:57:18.920
post it there's a section provide meaningful logs. Again, it
1027
00:57:19.000 --> 00:57:22.320
goes back to being intentional, treating this as part of
1028
00:57:22.400 --> 00:57:25.920
your API, in a part of your contract. It's possible
1029
00:57:26.039 --> 00:57:29.480
to go way overboard logging completely useless information that completely
1030
00:57:29.559 --> 00:57:33.119
drowns out the useful bits of information. So it's like
1031
00:57:33.760 --> 00:57:35.679
it's as much of a decision of what not to
1032
00:57:35.840 --> 00:57:38.320
log as it is what to log and where and where.
1033
00:57:40.639 --> 00:57:42.519
You know, there's a whole science to it, but it
1034
00:57:42.880 --> 00:57:45.280
takes time to get right. But you have to put
1035
00:57:45.360 --> 00:57:47.679
a lot under this point, and most people don't.
1036
00:57:48.559 --> 00:57:51.480
And you need to think about what logs at what levels,
1037
00:57:51.639 --> 00:57:56.239
and can you control levels like globally or for module
1038
00:57:56.360 --> 00:57:59.360
and stuff like that, or at least per service and
1039
00:57:59.440 --> 00:57:59.880
stuff like.
1040
00:57:59.880 --> 00:58:03.519
That, and provide details, provide enough details that you can
1041
00:58:03.639 --> 00:58:07.840
filter out the noise that's not relevant to a particular investigation.
1042
00:58:09.599 --> 00:58:13.360
I was going to say, there are libraries that give
1043
00:58:13.400 --> 00:58:15.719
you kind of a default format to start from that
1044
00:58:15.840 --> 00:58:19.519
are typically better than the default logging deal that you
1045
00:58:19.639 --> 00:58:22.719
get from what you're beginning with. And so you know,
1046
00:58:22.840 --> 00:58:25.199
have a look at those, figure out what they're doing,
1047
00:58:25.400 --> 00:58:27.760
and then just just be intentional. From there, I may
1048
00:58:27.800 --> 00:58:28.639
also need to know this.
1049
00:58:31.119 --> 00:58:36.760
Yeah, if you're a developer tool developer, you also need
1050
00:58:36.840 --> 00:58:40.400
to make sure your logs are not two verbals that
1051
00:58:41.079 --> 00:58:44.000
go back to the developer with the right feedback and
1052
00:58:44.159 --> 00:58:47.599
not a lot of noise that is useless to.
1053
00:58:48.119 --> 00:58:50.199
Trouble shoot anything else.
1054
00:58:50.280 --> 00:58:53.400
On that one, I will say, talking about the cost
1055
00:58:53.440 --> 00:58:55.599
of logging, it's a it's a fairly old article at
1056
00:58:55.639 --> 00:58:59.440
this point, but when Mattel and Avemark Clemens and Supper
1057
00:58:59.639 --> 00:59:02.800
Working then started on Pinot, there's some research on the
1058
00:59:03.000 --> 00:59:06.360
cost of logging and performance cost of blogging that even
1059
00:59:06.400 --> 00:59:08.760
though the exact numbers and stuff may be different today
1060
00:59:08.800 --> 00:59:11.800
than what they were back then, it is still an excellent,
1061
00:59:12.079 --> 00:59:14.800
excellent read. Mattel, you can provide me with a link
1062
00:59:14.880 --> 00:59:16.239
to that. I don't have a handy, but.
1063
00:59:17.880 --> 00:59:21.360
Of course I can. It's very old, it's very old, but.
1064
00:59:21.400 --> 00:59:24.159
I consider it. I consider it kind of part of
1065
00:59:24.239 --> 00:59:28.320
the must read collection of stuff for understanding a lot
1066
00:59:28.360 --> 00:59:32.119
of this stuff. It really breaks down why there's the
1067
00:59:32.199 --> 00:59:34.719
cost of why you have to be intentional about this stuff.
1068
00:59:35.840 --> 00:59:41.079
It is so uh. And one more thing I see
1069
00:59:41.119 --> 00:59:45.960
in the article Mattel that you recommend the Pino as
1070
00:59:46.039 --> 00:59:47.719
a library to use for logging.
1071
00:59:48.480 --> 00:59:49.400
Yeah, well that's what.
1072
00:59:53.039 --> 00:59:56.840
They David myself wrote all those year backs, so that
1073
00:59:57.000 --> 01:00:00.800
logging was the major bottoneck of most more the applications,
1074
01:00:01.079 --> 01:00:05.920
which is incredible. Like you know, it's so the first
1075
01:00:05.960 --> 01:00:09.760
one was logging, okay, and the second one was was expressed.
1076
01:00:10.599 --> 01:00:16.559
So I created Pino and then I created Fastify okay.
1077
01:00:17.039 --> 01:00:21.400
So that that was my journey and the optimizing the ecosystem.
1078
01:00:22.000 --> 01:00:24.239
So I started getting one, then I move, I moved
1079
01:00:24.280 --> 01:00:28.800
from there, moved to the next one. Okay, done essentially,
1080
01:00:29.000 --> 01:00:31.639
And no, it's it's very problematic. Okay, there's a lot
1081
01:00:31.719 --> 01:00:35.039
of like clogging is very hard. It's a very hard topic. Okay,
1082
01:00:35.679 --> 01:00:39.000
either it's a big problem, is a big pain, or
1083
01:00:39.079 --> 01:00:42.159
it's absolutely not okay, if you have a certain scale,
1084
01:00:42.280 --> 01:00:42.920
is a massive pain.
1085
01:00:43.639 --> 01:00:48.599
Oh yeah, for sure. Like I I three the three
1086
01:00:48.719 --> 01:00:52.039
latest companies that I've worked, including the latest one size
1087
01:00:52.039 --> 01:00:54.440
and so I currently work I. You know, you you've
1088
01:00:54.480 --> 01:00:56.960
got the develops person coming up to you and saying,
1089
01:00:57.679 --> 01:01:01.559
why have we got a billion logs every day? Do
1090
01:01:01.679 --> 01:01:03.320
you really need all those logs.
1091
01:01:06.400 --> 01:01:11.360
Yeah, pretty much. But it's also it's actually it's actually
1092
01:01:11.519 --> 01:01:11.920
very hard.
1093
01:01:12.000 --> 01:01:15.239
It's a very hard problem to fix, okay, and to
1094
01:01:15.320 --> 01:01:18.119
be able to achieve the right level of granularity and everything.
1095
01:01:18.280 --> 01:01:22.960
So with Pino we have reached a very good I
1096
01:01:23.039 --> 01:01:25.320
think good balance. It works very well out of the
1097
01:01:25.360 --> 01:01:28.199
bobs with good defaults, okay. But it can also be
1098
01:01:28.400 --> 01:01:33.000
tuned down for your app to the exact what you need, okay.
1099
01:01:33.840 --> 01:01:36.159
And you know, it has very very you know, fine
1100
01:01:36.280 --> 01:01:40.880
grained configuration that you can put it in, and it's
1101
01:01:41.199 --> 01:01:43.559
very important that you do those things when once you
1102
01:01:43.639 --> 01:01:45.039
reach a certain level of production.
1103
01:01:46.519 --> 01:01:48.679
For me, though, you know, using the tool with one
1104
01:01:48.679 --> 01:01:51.920
thing and I would recommend, you know, absolutely hands down.
1105
01:01:52.000 --> 01:01:55.239
But for me, it mostly comes down to being aware
1106
01:01:55.280 --> 01:01:58.039
of what you're logging and where the costs are. If
1107
01:01:58.119 --> 01:02:01.400
what you're logging or a bunch of large objects areting
1108
01:02:01.440 --> 01:02:05.960
it Jason serialized, understand that there's a cost to Jason serialization, right,
1109
01:02:06.039 --> 01:02:08.440
and if you're sending these massive objects into this.
1110
01:02:08.519 --> 01:02:12.679
Thing, come on, marshaling. Marshaling is not free.
1111
01:02:15.280 --> 01:02:17.760
But you know, we end up with these with with
1112
01:02:17.920 --> 01:02:20.159
with this code. I've seen this time and time again
1113
01:02:20.400 --> 01:02:23.880
where you have the this this logging logic and like, hey,
1114
01:02:23.880 --> 01:02:26.280
we're following the best practice. We're logging on these levels.
1115
01:02:26.800 --> 01:02:29.360
Well okay, that level is not activated. Why are you
1116
01:02:29.440 --> 01:02:32.960
still constructing this massive object, you know, unconditionally passing it
1117
01:02:33.039 --> 01:02:34.760
off to their understand you know, when that has its
1118
01:02:34.800 --> 01:02:37.199
own costs, and you know, folks need to stop and
1119
01:02:37.280 --> 01:02:40.360
think about what they're looking and why and how not
1120
01:02:40.559 --> 01:02:43.559
just what tool they're using, and understand this stuff has.
1121
01:02:43.679 --> 01:02:45.679
That's a definitive cost.
1122
01:02:47.039 --> 01:02:50.199
I'm sometimes so analo on those things, but I guess
1123
01:02:50.280 --> 01:02:53.800
it's my mentality going back to the good old days
1124
01:02:53.880 --> 01:02:58.119
of C and C plus plus and stuff like that. Uh,
1125
01:02:59.679 --> 01:03:02.719
it's it really bugs me when I see something being
1126
01:03:02.840 --> 01:03:05.760
computed for no for absolutely no reason.
1127
01:03:07.000 --> 01:03:09.519
My brain sack faulted. When you said the good old
1128
01:03:09.599 --> 01:03:10.920
days with C and C plus plus.
1129
01:03:15.159 --> 01:03:18.760
Guys, I have to I have to drop off because
1130
01:03:18.840 --> 01:03:23.639
there are sirens here. So thank you.
1131
01:03:25.719 --> 01:03:33.119
All right, let's let's talk API specifications here real quick. So, yeah,
1132
01:03:33.159 --> 01:03:34.280
who wants to tackle this one?
1133
01:03:36.119 --> 01:03:36.320
Yeah?
1134
01:03:36.760 --> 01:03:40.039
I'm pretty opinionated on this, and mostly because of what
1135
01:03:40.320 --> 01:03:41.159
James just said.
1136
01:03:43.480 --> 01:03:44.800
The contract is essential.
1137
01:03:45.119 --> 01:03:45.920
You need to have it.
1138
01:03:46.239 --> 01:03:50.440
You need to understand how you're going to collaborate with
1139
01:03:50.559 --> 01:03:51.360
other people.
1140
01:03:52.920 --> 01:03:56.880
Mostly now that that everyone is on the couple services
1141
01:03:57.840 --> 01:04:01.119
or a lot of the applications. Fully, you're moving into
1142
01:04:01.239 --> 01:04:06.400
that kind of architecture. To to make sure that you
1143
01:04:06.559 --> 01:04:09.960
have the right governance, you need to have API contracts first.
1144
01:04:11.599 --> 01:04:13.679
So that's one hundred.
1145
01:04:15.880 --> 01:04:16.320
It must.
1146
01:04:18.119 --> 01:04:20.800
Yeah, So you you guys in this one, you recommend
1147
01:04:20.840 --> 01:04:23.280
either open API or graph ql. You said that they
1148
01:04:23.440 --> 01:04:28.440
it depends on what you want, right, They have different strengths.
1149
01:04:29.239 --> 01:04:33.239
So yeah, do you do you want to kind of
1150
01:04:33.320 --> 01:04:37.320
talk a little bit about that, and then I'm really
1151
01:04:37.400 --> 01:04:42.360
curious about generating clients and types because anyway, go ahead
1152
01:04:42.360 --> 01:04:43.880
and answered that first part and then and then we
1153
01:04:43.920 --> 01:04:45.960
can get into the clients and types of questions there.
1154
01:04:46.119 --> 01:04:47.960
Let me take that very very briefly.
1155
01:04:48.159 --> 01:04:50.280
Then I probably passed the ball to Natalie because she
1156
01:04:50.320 --> 01:04:51.559
has a different opinion for me.
1157
01:04:52.320 --> 01:04:54.559
So it's a nerd fight.
1158
01:04:55.280 --> 01:04:55.519
Yeah.
1159
01:04:56.320 --> 01:04:57.679
So the.
1160
01:05:00.079 --> 01:05:04.280
An API is great. It provides the map to rest okay.
1161
01:05:04.920 --> 01:05:09.920
So if you know how your systems are going to
1162
01:05:10.000 --> 01:05:14.840
be composed and used, okay, this is great. However, they
1163
01:05:14.920 --> 01:05:19.280
still suffer from, you know, the level of granduality that
1164
01:05:19.400 --> 01:05:23.840
you're doing with rest okay. So it means that in
1165
01:05:24.000 --> 01:05:26.840
order to achieve a certain a certain function, a certain
1166
01:05:27.079 --> 01:05:31.440
central behavior, they will need to developer using those APIs,
1167
01:05:31.480 --> 01:05:34.599
we need to issue two, three, four or five different calls, okay,
1168
01:05:35.360 --> 01:05:37.800
especially from and these adds a lot, can add a
1169
01:05:37.840 --> 01:05:38.639
lot of latency.
1170
01:05:39.119 --> 01:05:42.639
That's the problem in to fights the data that they need.
1171
01:05:43.239 --> 01:05:45.199
To get the data that they need will graph you
1172
01:05:45.360 --> 01:05:48.119
l you can actually do that with one single pass
1173
01:05:48.199 --> 01:05:51.800
and have that logic done on the server side, okay,
1174
01:05:53.039 --> 01:05:55.360
which I don't want to go into the intricacy of
1175
01:05:55.440 --> 01:06:00.880
implementing that correctly. But the different news case is if
1176
01:06:00.960 --> 01:06:03.719
you know, if you don't know how your system is
1177
01:06:03.800 --> 01:06:06.920
going to be read and accessed, graphical is a great system,
1178
01:06:07.199 --> 01:06:10.679
great way to provide all discoverability and easy way to
1179
01:06:10.760 --> 01:06:11.480
consume the data.
1180
01:06:11.679 --> 01:06:11.960
Okay.
1181
01:06:12.920 --> 01:06:18.039
While my undergeneric understanding is that using open API can
1182
01:06:18.199 --> 01:06:22.760
lead to more performance implementations and that are easier to
1183
01:06:24.159 --> 01:06:28.320
scale genetically, so at the cost of latency. So you see,
1184
01:06:28.440 --> 01:06:31.599
there is there is a trade and Natalian, I know
1185
01:06:31.719 --> 01:06:34.719
that you prefer you have a different opinions to you.
1186
01:06:36.519 --> 01:06:39.360
No, No, I mostly agree with what you say, like
1187
01:06:40.440 --> 01:06:45.480
I like with everything else. You need to evaluate your
1188
01:06:45.599 --> 01:06:46.119
trade offs.
1189
01:06:46.559 --> 01:06:51.440
What are you what do you want to have cashing?
1190
01:06:51.800 --> 01:06:56.679
Do you want to have a more granular or underfetching, yes,
1191
01:06:57.519 --> 01:07:00.199
then go with with a certain pattern or an other.
1192
01:07:01.239 --> 01:07:03.519
I am I am one hundred percent.
1193
01:07:05.719 --> 01:07:09.920
Sure that even even if you're doing graph cul, you
1194
01:07:10.079 --> 01:07:15.679
need to have a contract no matter what and generating
1195
01:07:15.800 --> 01:07:17.639
your clients. It's right now.
1196
01:07:19.440 --> 01:07:20.960
A possibility.
1197
01:07:22.880 --> 01:07:28.159
Generating your client on top of the contract is very affections.
1198
01:07:31.119 --> 01:07:34.400
So that that kind of leads right into this next part,
1199
01:07:34.440 --> 01:07:39.679
which is generating clients and types. So I have to
1200
01:07:39.719 --> 01:07:44.599
admit I've mostly unrest where I've done graph ql, Like
1201
01:07:44.760 --> 01:07:47.000
I had to build the resolvers and stuff like that.
1202
01:07:47.159 --> 01:07:49.039
It just felt like a lot of extra work to
1203
01:07:49.159 --> 01:07:51.440
get that graph qu all the work. I mean, if
1204
01:07:51.480 --> 01:07:53.639
I was doing front end that consumed graph ql a
1205
01:07:53.679 --> 01:07:56.559
lot of times it was just magic, right, And so
1206
01:07:56.679 --> 01:07:59.360
I felt like the trade off may or may not
1207
01:07:59.440 --> 01:08:03.760
have been worth it. Am I looking at this wrong?
1208
01:08:04.159 --> 01:08:06.760
Or is there something I just haven't seen there?
1209
01:08:07.360 --> 01:08:11.880
Graphql okay removes removes a lot of the like if
1210
01:08:11.920 --> 01:08:16.199
you okay with graph ql, which is something it's a
1211
01:08:16.319 --> 01:08:19.520
fantastic system. If you have a lot of disjunted teams
1212
01:08:20.319 --> 01:08:24.800
that do not talk with anyonet to minimize the incommunication
1213
01:08:24.960 --> 01:08:25.399
between them.
1214
01:08:26.159 --> 01:08:30.520
Okay. Essentially it's a tool that enables Okay, it is
1215
01:08:30.560 --> 01:08:31.680
your graph celent point.
1216
01:08:32.000 --> 01:08:34.840
It's my problem to maintain that, the team that produces it,
1217
01:08:34.960 --> 01:08:38.560
maintaining and keeping it up and keeping it performance, which
1218
01:08:38.800 --> 01:08:40.640
it might be very much in trouble in doing so.
1219
01:08:41.039 --> 01:08:44.279
But it's a business choice, okay. And then consumers can
1220
01:08:44.359 --> 01:08:48.359
get that. The consumers can just you know, they feel
1221
01:08:48.359 --> 01:08:51.319
the magic. Okay, somebody feel the pain. Somebody else feel
1222
01:08:51.359 --> 01:08:51.720
the magic.
1223
01:08:52.319 --> 01:08:52.640
Okay.
1224
01:08:53.319 --> 01:08:58.880
With with the rest and open API, you you probably
1225
01:08:59.319 --> 01:09:01.199
it's less my That's what I'm saying.
1226
01:09:01.399 --> 01:09:01.800
You can.
1227
01:09:04.079 --> 01:09:07.000
Yeah, yeah, get a little bit of tighter coupling with.
1228
01:09:07.119 --> 01:09:10.760
The genetically leads to tighter couple.
1229
01:09:13.560 --> 01:09:16.880
Which is which, which is ironic given REST was originally
1230
01:09:16.920 --> 01:09:20.119
intended to avoid the tighter coupling, but you still end
1231
01:09:20.199 --> 01:09:20.439
up with that.
1232
01:09:22.439 --> 01:09:22.640
Yeah.
1233
01:09:23.039 --> 01:09:26.840
So, but I think I think to the highest point,
1234
01:09:27.199 --> 01:09:31.600
the most important thing is having a contract. And you know,
1235
01:09:31.720 --> 01:09:35.000
if you can generate code from that contract automatically, cool,
1236
01:09:36.079 --> 01:09:39.479
all the better. But you have to start with the contract,
1237
01:09:39.720 --> 01:09:42.800
whatever that is. And you can write the API contract
1238
01:09:42.960 --> 01:09:44.760
just in a markdown document and say this is how
1239
01:09:44.800 --> 01:09:47.079
the thing works, but you have to start with the
1240
01:09:47.159 --> 01:09:47.920
contract first.
1241
01:09:49.640 --> 01:09:54.680
Yeah, is there anything you wanted to add on those points?
1242
01:09:54.840 --> 01:09:59.920
Or I think in Italian that they covered it perfectly.
1243
01:10:01.439 --> 01:10:05.000
You know, there are trade offs you can generate. Cool,
1244
01:10:05.800 --> 01:10:09.600
it's gonna be better for everyone. Whichever one you use
1245
01:10:09.680 --> 01:10:11.359
depends on what your specific requirements are.
1246
01:10:13.279 --> 01:10:16.960
Gotcha. There was a section here about API first versus
1247
01:10:17.079 --> 01:10:22.079
code first, so that.
1248
01:10:22.479 --> 01:10:24.600
Is a different in pattern.
1249
01:10:25.479 --> 01:10:28.720
So uh, there's a lots of debate between all the
1250
01:10:28.800 --> 01:10:32.880
people that do contract based development that they should start
1251
01:10:33.359 --> 01:10:38.119
with this design the side big design session where the
1252
01:10:38.279 --> 01:10:43.039
contract of the API is defined, okay, and then the
1253
01:10:43.119 --> 01:10:47.520
people writing consuming it go their merry way, and then
1254
01:10:47.600 --> 01:10:50.800
the people writing the the API go their merry way.
1255
01:10:51.640 --> 01:10:54.439
Oh and that said, okay, bye, Natalia, I don't.
1256
01:10:54.319 --> 01:10:57.079
Know, she's gone, and she said she had a hard stop.
1257
01:10:57.560 --> 01:11:01.239
Yeah, and basically one when one way, the other one
1258
01:11:01.319 --> 01:11:06.399
when the other way. Okay uh, and then when they
1259
01:11:06.520 --> 01:11:08.920
try to meet in the end, it never works.
1260
01:11:10.399 --> 01:11:13.079
Okay, I I.
1261
01:11:14.560 --> 01:11:14.840
Don't know.
1262
01:11:15.199 --> 01:11:15.439
I have.
1263
01:11:17.399 --> 01:11:19.720
Person, and I'll work back to the A P I.
1264
01:11:19.960 --> 01:11:21.399
But then I won't finish the code until the A
1265
01:11:21.720 --> 01:11:23.800
contract is figured out so it can work.
1266
01:11:24.960 --> 01:11:30.520
It's yeah, my genetically recommend My my experience is the
1267
01:11:30.720 --> 01:11:34.760
contract is ready when the implementation that implement that contract
1268
01:11:35.960 --> 01:11:40.039
is ready is final. Okay, you cannot finalize that, and
1269
01:11:40.960 --> 01:11:44.720
therefore I am more or less saying that you know
1270
01:11:45.279 --> 01:11:45.800
that and that.
1271
01:11:45.960 --> 01:11:47.960
But the key challenge there is you need to keep
1272
01:11:48.039 --> 01:11:49.479
to uphold the contract. Okay.
1273
01:11:49.560 --> 01:11:51.840
Once you stubish the contract, you need to not break
1274
01:11:51.880 --> 01:11:55.000
the contract. Very important because if you start breaking that.
1275
01:11:55.079 --> 01:11:57.920
This is one of the bigger process of downtime. Somebody
1276
01:11:58.039 --> 01:12:01.079
changed an API and said, oh, but these these things
1277
01:12:01.119 --> 01:12:04.960
is now required it's not. Or these things was optional
1278
01:12:05.079 --> 01:12:09.079
before and now well these things was required before is
1279
01:12:09.159 --> 01:12:12.720
now optional whatever? Okay, and then the crash that starts
1280
01:12:12.760 --> 01:12:15.560
opening all over the system, and one little change in
1281
01:12:15.600 --> 01:12:18.720
a tiny micro service can bring down the full the
1282
01:12:18.800 --> 01:12:19.279
full fleet.
1283
01:12:19.680 --> 01:12:21.359
Either that or you end up with tons of technical
1284
01:12:21.439 --> 01:12:23.640
debt and outdated code and obsolute stuff that you have
1285
01:12:23.680 --> 01:12:24.159
to keep around.
1286
01:12:27.399 --> 01:12:30.920
All right. Well, just to wrap up, is is there
1287
01:12:31.000 --> 01:12:35.279
kind of an overarching theme or any messages that you
1288
01:12:35.399 --> 01:12:38.479
want to kind of add to this or do we
1289
01:12:38.640 --> 01:12:39.680
just for me? For me?
1290
01:12:39.840 --> 01:12:43.239
The overarching theme is be intentional, be aware, like like
1291
01:12:43.479 --> 01:12:46.520
pay closed attention to thing you're doing, whether it's breaking
1292
01:12:46.560 --> 01:12:48.439
down the tasks so you don't let in the event loop,
1293
01:12:48.479 --> 01:12:52.880
to whether it's bringing in a new dependency to you know,
1294
01:12:52.920 --> 01:12:55.640
how you're designing your API. You have to stop and
1295
01:12:55.680 --> 01:12:56.640
think about what you're doing.
1296
01:12:58.319 --> 01:13:00.399
Yeah, and pretty much all the ones in the list
1297
01:13:00.840 --> 01:13:03.000
that's the like, think about what you're doing. And this
1298
01:13:03.119 --> 01:13:06.239
is almost a nice checklist to go through to say, like,
1299
01:13:06.359 --> 01:13:08.920
have we been intentional enough to we plan what we're
1300
01:13:08.960 --> 01:13:12.479
doing in each of these places and go from there.
1301
01:13:14.960 --> 01:13:18.439
Yeah, all right, good deal. I'm not sure if mateo
1302
01:13:18.600 --> 01:13:19.199
is frozen or.
1303
01:13:23.880 --> 01:13:27.039
And I need really need to drop now, Okay, I.
1304
01:13:28.960 --> 01:13:29.760
Break conversational.
1305
01:13:31.159 --> 01:13:36.119
Yeah, well I'm gonna throw in some picks. I don't
1306
01:13:36.159 --> 01:13:41.079
know if you want to do that too, Michael, but yeah,
1307
01:13:41.399 --> 01:13:43.199
let me jump in here real quick with my picks,
1308
01:13:43.199 --> 01:13:44.640
and then you can go ahead and throw in yours,
1309
01:13:46.439 --> 01:13:47.920
or if James is going to stick around, he can
1310
01:13:48.159 --> 01:13:49.600
do that too. But I got like, I got like
1311
01:13:49.680 --> 01:13:52.840
three minutes, so okay, well maybe you can go first.
1312
01:13:53.359 --> 01:13:54.760
I'm guessing you did picks last time.
1313
01:13:55.680 --> 01:13:56.439
Yeah, it didn't.
1314
01:13:56.439 --> 01:13:56.760
Watch time.
1315
01:13:56.800 --> 01:13:59.479
I'm miss going to say something, you know, super simple,
1316
01:14:00.039 --> 01:14:02.960
step away from the computer, go outside, talk to people,
1317
01:14:03.520 --> 01:14:06.319
you know, you know, don't get too wrapped up and stuff,
1318
01:14:06.880 --> 01:14:09.239
especially folks in the US. You know, things are kind
1319
01:14:09.239 --> 01:14:16.039
of still, you know, you know, kind of rather there's
1320
01:14:16.079 --> 01:14:18.199
quite a bit of turmoil and stuff. So just step away,
1321
01:14:18.319 --> 01:14:18.800
take a break.
1322
01:14:19.640 --> 01:14:23.479
That's it. Yep, It's good advice anytime of the year.
1323
01:14:24.920 --> 01:14:25.600
I'm gonna go ahead.
1324
01:14:26.680 --> 01:14:30.039
Okay, thanks for coming, James. All right, I'm gonna throw
1325
01:14:30.159 --> 01:14:34.840
in my picks here. So my first pick I always
1326
01:14:34.840 --> 01:14:37.880
do a board game pick. This last weekend, I was
1327
01:14:37.920 --> 01:14:41.760
at a board game convention and I was teaching people
1328
01:14:42.159 --> 01:14:45.199
the hot games. So my friend picked the games and
1329
01:14:45.319 --> 01:14:47.600
we taught them at you know, for free, at the
1330
01:14:47.680 --> 01:14:52.079
tables at the game at the game convention. So I'm
1331
01:14:52.119 --> 01:14:54.039
just gonna pick one of those games. The game that
1332
01:14:54.119 --> 01:14:58.319
I'm picking, And this was a super fun game. It's
1333
01:15:00.079 --> 01:15:07.079
it was relatively simple to pick up. You know, I
1334
01:15:07.159 --> 01:15:09.079
could explain it to people in like ten minutes, and
1335
01:15:09.600 --> 01:15:11.239
you know, it takes about forty five minutes to play.
1336
01:15:11.279 --> 01:15:13.479
You can play two to four players. It's called Gnome
1337
01:15:13.600 --> 01:15:17.479
Hollow and effectively, I'm not going to give you the
1338
01:15:17.560 --> 01:15:18.960
ten minute spiel. I'm going to give you the two
1339
01:15:18.960 --> 01:15:20.560
minute spiel. And then if you want to go learn it,
1340
01:15:20.600 --> 01:15:23.760
you can. Board game Geek weights it at two point
1341
01:15:24.119 --> 01:15:29.039
one seven, so it's it's a fairly easy casual game
1342
01:15:29.119 --> 01:15:33.119
or game. The way you play it is you are
1343
01:15:33.399 --> 01:15:41.439
making like circles of like mushroom circles, right, so you
1344
01:15:41.520 --> 01:15:44.840
know there's the kind of mythological you find a circle
1345
01:15:44.880 --> 01:15:47.439
of mushrooms and it's you know, fairy something I don't
1346
01:15:47.600 --> 01:15:50.359
I don't know, but anyway, so you're making mushroom rings
1347
01:15:50.359 --> 01:15:53.039
and then you harvest the mushrooms from the rings, you
1348
01:15:53.199 --> 01:15:55.000
take them to the market, you sell them for points.
1349
01:15:57.680 --> 01:16:00.600
As you create more rings, you also just cover different
1350
01:16:00.680 --> 01:16:03.840
kinds of wildflowers, and so you can collect the wild
1351
01:16:03.920 --> 01:16:07.319
flowers and those are worth points. And then as you
1352
01:16:08.640 --> 01:16:12.439
complete rings, you also move markers down onto your board.
1353
01:16:12.520 --> 01:16:17.920
That gives you rewards, and the number of markers you've
1354
01:16:17.960 --> 01:16:21.000
moved down is also a way of scoring points. Those
1355
01:16:21.039 --> 01:16:22.760
are the three things that score at the end of
1356
01:16:22.840 --> 01:16:25.479
the game. The points you've bought, or the points you've
1357
01:16:25.479 --> 01:16:29.920
sold your mushrooms for the amount of wildflowers different wildflowers
1358
01:16:29.960 --> 01:16:33.680
you've brought into your board, and then the number of
1359
01:16:33.760 --> 01:16:39.359
rings you've completed. Basically it was super fun. Once you
1360
01:16:39.439 --> 01:16:41.800
play around or two, it's like, oh, okay, I totally
1361
01:16:41.840 --> 01:16:43.880
get how this goes. And so the rest of it
1362
01:16:44.039 --> 01:16:47.279
is just figuring out which strategies you want to go for, Right,
1363
01:16:47.359 --> 01:16:52.119
Am I going to maximize on flowers on rings or
1364
01:16:52.399 --> 01:16:59.399
on you harvesting and selling mushrooms? And yeah, it was
1365
01:16:59.479 --> 01:17:01.760
really really fun. Of all the games that we taught,
1366
01:17:02.920 --> 01:17:05.439
this one was probably my favorite. I did buy one
1367
01:17:05.479 --> 01:17:08.279
of the other games before the Game Board Game Convention
1368
01:17:08.359 --> 01:17:11.239
because I liked it so much, but I've picked it
1369
01:17:11.279 --> 01:17:14.640
on the show before. It's Challengers, So anyway, I'm gonna
1370
01:17:14.640 --> 01:17:18.640
pick that one. No im hollow, And like I said,
1371
01:17:18.680 --> 01:17:22.880
it's forty five minutes to an hour game, and yeah,
1372
01:17:23.039 --> 01:17:25.159
the artwork on it is amazing. That always makes it
1373
01:17:25.199 --> 01:17:26.760
more fun if it's got a good theme and it
1374
01:17:26.840 --> 01:17:30.039
all kind of is cohesive. A couple of other things
1375
01:17:30.079 --> 01:17:33.920
I'm gonna pick. I've been watching the show Reacher and
1376
01:17:34.000 --> 01:17:38.079
I've been enjoying that. I just like the way that
1377
01:17:39.319 --> 01:17:43.319
Jack Reacher essentially is I'm gonna do the right thing
1378
01:17:43.520 --> 01:17:45.640
that I think is the right thing, and you can
1379
01:17:45.680 --> 01:17:48.239
all just go pounce end and you know, if you
1380
01:17:48.279 --> 01:17:49.920
get in my way, I'm gonna make you wish you
1381
01:17:50.000 --> 01:17:54.880
hadn't you know, I just I don't know. I like
1382
01:17:54.960 --> 01:17:57.760
to take no prisoners. I'm gonna find the truth approach
1383
01:17:57.880 --> 01:18:00.359
to life. So you know, this kind of takes it
1384
01:18:00.399 --> 01:18:02.399
to an extreme. It's kind of a violent show. So
1385
01:18:03.399 --> 01:18:05.399
if that's not your cup of tea, don't watch it.
1386
01:18:06.760 --> 01:18:10.880
You're right, it gets a little bit. Yeah, just violent.
1387
01:18:11.000 --> 01:18:14.119
So I'm gonna pick that and then the last pick
1388
01:18:14.319 --> 01:18:17.279
along the lines of what James was picking. You know,
1389
01:18:17.359 --> 01:18:19.279
we just had the elections here in the United States.
1390
01:18:19.800 --> 01:18:21.479
I know a lot of people have feelings about it.
1391
01:18:21.560 --> 01:18:24.119
I've taught you know. I live in Utah, where red state.
1392
01:18:24.520 --> 01:18:26.119
A lot of people are pretty happy that you know,
1393
01:18:26.279 --> 01:18:28.720
Trump won and that you know, the House and the Senate.
1394
01:18:30.319 --> 01:18:33.319
But then I see people kind of taking to task
1395
01:18:33.439 --> 01:18:36.359
or making fun of people who are sad because you know,
1396
01:18:36.439 --> 01:18:40.520
theirs I didn't win, and I'm not about that. I
1397
01:18:40.640 --> 01:18:42.880
think some of the ways that people are reacting or
1398
01:18:42.920 --> 01:18:46.279
overreacting to it is amusing. But I just keep that
1399
01:18:46.399 --> 01:18:48.720
to myself because at the end of the day, it's
1400
01:18:48.840 --> 01:18:52.199
not worth it to demonize or you know, make somebody
1401
01:18:52.279 --> 01:18:54.800
feel bad because their side didn't win. So I just
1402
01:18:54.920 --> 01:18:57.039
encourage everybody to be kind to each other. And then
1403
01:18:57.079 --> 01:18:58.800
the folks on the other side, because I do see
1404
01:18:58.800 --> 01:19:01.199
the posts where it's like, you know, my my family
1405
01:19:01.279 --> 01:19:02.760
all voted for Trump and I'm not ever going to
1406
01:19:02.800 --> 01:19:04.760
talk to him again. It's like, guys, don't do that,
1407
01:19:04.960 --> 01:19:08.680
right either side, don't do that. You know, everybody has
1408
01:19:08.760 --> 01:19:11.520
reasons why they voted the way they voted. Some of
1409
01:19:11.520 --> 01:19:14.119
them are good, some of them are bad. You know,
1410
01:19:14.760 --> 01:19:17.039
you think that they see what you see and then
1411
01:19:17.039 --> 01:19:19.880
they voted the other way. Anyway, that's generally not true.
1412
01:19:20.199 --> 01:19:23.479
I think we all mostly want to be you know,
1413
01:19:23.880 --> 01:19:26.039
prosperous and happy and be able to take care of
1414
01:19:26.119 --> 01:19:30.119
our families and things like that. So, you know, just
1415
01:19:31.479 --> 01:19:34.399
give everybody the benefit of the doubt. And you know,
1416
01:19:34.560 --> 01:19:36.560
if you're not up for having the conversation with the
1417
01:19:36.600 --> 01:19:40.359
people you care about, then don't. But if you can,
1418
01:19:40.520 --> 01:19:42.239
and you can come to understand a little bit more
1419
01:19:42.279 --> 01:19:43.960
of I was really scared that this was going to
1420
01:19:44.000 --> 01:19:47.000
happen if Trump or Harris got elected, you know, or
1421
01:19:47.319 --> 01:19:49.399
I really care about this issue, and so I voted
1422
01:19:49.479 --> 01:19:51.560
you know, maybe a single issue or mostly a single
1423
01:19:51.600 --> 01:19:53.960
issue at least, then you can kind of see where
1424
01:19:54.000 --> 01:19:55.520
people are coming from, and a lot of times you
1425
01:19:55.560 --> 01:19:58.840
see the humanity in them anyway. So I'm just going
1426
01:19:58.880 --> 01:20:02.880
to encourage that I'm not really shy about where I
1427
01:20:03.000 --> 01:20:04.760
come down on this stuff, so you can I'll probably
1428
01:20:04.840 --> 01:20:07.840
guess it, but that's not what this show is about.
1429
01:20:07.920 --> 01:20:09.680
And I really feel like the best thing we can
1430
01:20:09.720 --> 01:20:12.039
do at this point is just kind of come together,
1431
01:20:12.119 --> 01:20:14.079
make sure we understand each other, and then take care
1432
01:20:14.119 --> 01:20:17.439
of each other. So anyway, Michael, what are your picks?
1433
01:20:18.039 --> 01:20:20.119
I'm just going to have one really quick one. Over
1434
01:20:20.159 --> 01:20:23.880
the years, I've always wished I could like print you know,
1435
01:20:24.079 --> 01:20:26.159
heads for the little Lego.
1436
01:20:26.000 --> 01:20:28.520
Man, you know, to play around with, and uh, that
1437
01:20:28.640 --> 01:20:29.239
sounds awesome.
1438
01:20:29.600 --> 01:20:29.800
Yeah.
1439
01:20:30.000 --> 01:20:33.279
Maker World, which is from Bamboo Labs. They actually have
1440
01:20:33.720 --> 01:20:36.960
recently they've got like, uh I think it's probably Ai
1441
01:20:37.079 --> 01:20:39.159
based or something, but they've got like a new a
1442
01:20:39.239 --> 01:20:42.039
new offering where if you if you log in, you
1443
01:20:42.079 --> 01:20:44.319
can upload a picture and it basically will create you
1444
01:20:44.399 --> 01:20:48.560
a three D printable, uh you know, head of head
1445
01:20:48.560 --> 01:20:50.680
of that you can then adjust and tinker with just
1446
01:20:50.760 --> 01:20:52.960
like any other three D print. So pretty cool.
1447
01:20:54.279 --> 01:20:55.840
I want to do that for all my kids.
1448
01:20:55.960 --> 01:20:58.760
Now, there you go. Well, now go to maker World
1449
01:20:58.840 --> 01:21:01.119
and you can. They've got they make it easy, so
1450
01:21:01.199 --> 01:21:01.840
it's pretty cool.
1451
01:21:02.399 --> 01:21:08.159
Yeah, we're a Lego family here for sure. So awesome. Well, Michael,
1452
01:21:08.239 --> 01:21:09.840
I was going to ask this of everybody else, but
1453
01:21:09.840 --> 01:21:12.920
they're all gone. If people want to connect with you,
1454
01:21:13.239 --> 01:21:13.960
where do they find you?
1455
01:21:14.520 --> 01:21:16.880
I you can follow me on Twitter MH Dawson one.
1456
01:21:17.119 --> 01:21:19.880
Also on Blue Sky at MH d Austin without the
1457
01:21:19.920 --> 01:21:22.680
one because I managed to get that one first, and
1458
01:21:23.920 --> 01:21:25.880
or you know, in Getthub very active in that the
1459
01:21:25.960 --> 01:21:26.920
no project GetUp.
1460
01:21:27.039 --> 01:21:28.319
So that's the best places.
1461
01:21:28.960 --> 01:21:31.840
Awesome. I just barely joined Blue Sky. I'm cmax w
1462
01:21:32.159 --> 01:21:35.359
just like I am on Twitter. I will say that
1463
01:21:35.479 --> 01:21:38.840
I am looking to set up accounts for the shows,
1464
01:21:39.319 --> 01:21:41.760
so keep an eye out for JavaScript Jamber. It'll probably
1465
01:21:41.840 --> 01:21:47.720
be jass Jamber unless that's taken. So anyway, I know,
1466
01:21:47.800 --> 01:21:50.439
people are you know again kind of the political whatever
1467
01:21:50.760 --> 01:21:52.399
for you know, I want to be off Twitter and
1468
01:21:52.520 --> 01:21:55.399
on Blue Sky as long as I can reach you
1469
01:21:55.640 --> 01:21:59.479
and you're happy to get our stuff, you know, I'm
1470
01:21:59.479 --> 01:22:03.079
happy to stay at either place so you know, or
1471
01:22:03.159 --> 01:22:05.439
be of whatever place right, So as long as we
1472
01:22:05.520 --> 01:22:08.039
can connect, I guess is what I care about. Yeah,
1473
01:22:08.199 --> 01:22:11.439
definitely stay in touch there and until next time, folks
1474
01:22:11.600 --> 01:22:12.079
max out
1475
01:22:14.840 --> 01:22:15.239
M hm.
1
00:00:05.280 --> 00:00:09.000
Hey, folks, Welcome back to another JavaScript jabber. This week
2
00:00:09.000 --> 00:00:11.199
on our panel, we have Dan Shapeer.
3
00:00:11.800 --> 00:00:14.560
Hello, from what we in Tel Aviv like to call
4
00:00:14.640 --> 00:00:15.000
it winter.
5
00:00:16.839 --> 00:00:19.320
Well, I wish our winters were that warm. I'm Charles
6
00:00:19.320 --> 00:00:21.640
Maxwood from top Endevs, where I think you got below
7
00:00:21.679 --> 00:00:25.760
freezing last night. That zero if you're not in the
8
00:00:25.879 --> 00:00:30.320
US and use something other than fahrenheit, and that's like
9
00:00:30.359 --> 00:00:33.600
thirty two degrees fahrenheit, So got real cold last night.
10
00:00:35.359 --> 00:00:38.200
This week, we're following up on the nine Node Pillars
11
00:00:38.320 --> 00:00:40.159
episode that came out a few weeks ago or a
12
00:00:40.200 --> 00:00:43.679
month ago, so we've got some familiar faces, but we'll
13
00:00:43.679 --> 00:00:46.159
go ahead and let them introduce themselves again. I'm just
14
00:00:46.240 --> 00:00:49.000
going to start at the top of my screen and
15
00:00:49.079 --> 00:00:51.240
we'll just kind of work our way down. We have
16
00:00:51.399 --> 00:00:53.799
Michael Dawson. Michael, do you want to introduce yourself?
17
00:00:54.479 --> 00:00:54.640
Hi?
18
00:00:54.759 --> 00:00:57.240
Michael Dawson on the NODS lead for Rahat and at
19
00:00:57.240 --> 00:00:59.679
GM as well as active in the project from the
20
00:00:59.679 --> 00:01:02.920
Technic Steering Committee and live definitely where it is getting
21
00:01:02.920 --> 00:01:04.519
below zero at nineteen.
22
00:01:05.719 --> 00:01:09.680
Right, practically, neighbors. We also have Matteo Colina.
23
00:01:10.519 --> 00:01:14.079
Hi, everyone, I'm mate Coolina Platmatic co founder and CEO
24
00:01:14.560 --> 00:01:17.079
ps enter on the mat jest I think, a steering committee,
25
00:01:17.359 --> 00:01:20.239
a board member of the Opinion Jazz Foundation. Also of
26
00:01:20.280 --> 00:01:22.799
many modules. You are probably using my software, even if
27
00:01:22.799 --> 00:01:24.319
you don't, even if you want or not.
28
00:01:26.480 --> 00:01:29.400
Probably my tagline awesome.
29
00:01:29.400 --> 00:01:30.799
We also have James Snell.
30
00:01:32.359 --> 00:01:36.120
You know, uh yeah, James del Con from central California
31
00:01:36.920 --> 00:01:44.400
where winter here means just slightly less unshine than I'm
32
00:01:44.400 --> 00:01:46.319
at Claude Flair. I work on their workers run time.
33
00:01:46.359 --> 00:01:48.959
I'm on the Note technical Steering Committee. I've been contributing
34
00:01:49.000 --> 00:01:52.120
to Note for most ten years. We have in March
35
00:01:52.480 --> 00:01:53.920
in just a few months, I'll have been on the
36
00:01:53.959 --> 00:01:56.560
technical Steering committee for Note for ten years old decades,
37
00:01:56.640 --> 00:01:59.560
so which is which is crazy? Yeah, that's.
38
00:02:01.159 --> 00:02:04.200
Awesome. And finally we have Natalia Vendito.
39
00:02:06.079 --> 00:02:08.360
Yeah, thank you for having me.
40
00:02:08.879 --> 00:02:13.039
I am the lead for developer tools and Experiences for
41
00:02:13.199 --> 00:02:17.360
the script on usure and yeah, also participation of the
42
00:02:17.439 --> 00:02:18.800
Open Jes foundations.
43
00:02:18.919 --> 00:02:20.680
We see, that's me.
44
00:02:21.400 --> 00:02:23.840
So yeah. So last time you talked about the nine
45
00:02:23.840 --> 00:02:27.879
node pillars, I think it's worth maybe a five ten
46
00:02:27.919 --> 00:02:30.960
minute review something like that, just trying to get people
47
00:02:31.000 --> 00:02:33.360
back into it. Obviously, folks can go back and listen
48
00:02:33.400 --> 00:02:35.960
to the other episode if they want the in depth discussion,
49
00:02:36.800 --> 00:02:37.759
but then we should.
50
00:02:38.479 --> 00:02:40.919
It was an excellent They definitely should. It was an
51
00:02:40.919 --> 00:02:44.240
excellent conversation, it's an excellent article, and it's an it
52
00:02:44.280 --> 00:02:48.000
was an excellent conversation in my opinion, unbiased opinion.
53
00:02:49.479 --> 00:02:51.960
Well, my point is is then we can get on
54
00:02:52.080 --> 00:02:56.479
with the other you know, four or five pillars, So
55
00:02:56.840 --> 00:02:59.319
really quickly, I'm just gonna pull them out of the article,
56
00:03:00.360 --> 00:03:02.800
and then if whoever wants you can kind of jump
57
00:03:02.800 --> 00:03:05.879
in and just kind of summarize what was discussed. The
58
00:03:05.879 --> 00:03:07.960
first one is do not block the event loop.
59
00:03:11.719 --> 00:03:13.000
Yeah, this one's pretty straightforward.
60
00:03:13.000 --> 00:03:13.159
You know.
61
00:03:13.199 --> 00:03:14.840
It's like, you know, you got to keep in mind
62
00:03:14.840 --> 00:03:18.759
that anytime you're running some bit of jobascripts, you have
63
00:03:18.800 --> 00:03:21.319
some function, nothing else is going to happen on that
64
00:03:21.400 --> 00:03:23.879
event loop. So you need to make sure you're dividing
65
00:03:23.879 --> 00:03:27.439
your work into two very small chunks. Allow the event loop.
66
00:03:27.439 --> 00:03:29.439
It turns you can pick up new requests, you can
67
00:03:29.879 --> 00:03:33.319
process io that that kind of thing. So pay attention
68
00:03:33.759 --> 00:03:37.840
to you know, that event loop delay, event loop utilization.
69
00:03:38.400 --> 00:03:40.120
There's a couple of metrics there. You really want to
70
00:03:40.159 --> 00:03:42.960
watch closely and optimize your applications around that.
71
00:03:44.159 --> 00:03:48.599
Yeah, and also offload if you can lengths casts to
72
00:03:48.680 --> 00:03:50.120
a worker a total post support.
73
00:03:51.080 --> 00:03:54.240
Yeah, and I'm assuming you talked about strategies on how
74
00:03:54.240 --> 00:03:55.680
to do that and what your coach should look like
75
00:03:55.919 --> 00:03:56.800
in the other episode.
76
00:03:56.879 --> 00:03:58.680
So yep, yep.
77
00:03:59.680 --> 00:04:02.840
The next one is monitor node specific metrics and act
78
00:04:02.919 --> 00:04:03.240
on them.
79
00:04:05.360 --> 00:04:05.960
Let me take this.
80
00:04:06.919 --> 00:04:10.639
Most of the things that people do when the plying
81
00:04:10.680 --> 00:04:15.520
no JS is they monitor no JS like it's in
82
00:04:15.560 --> 00:04:19.079
a completely like it's a black box. And this is
83
00:04:19.079 --> 00:04:25.040
a massive it's a massive pain because you because in
84
00:04:25.199 --> 00:04:28.800
most cases no JS has its own quirks and peculiarities,
85
00:04:29.079 --> 00:04:32.319
and monitoring a black box, you are essentially making it
86
00:04:32.319 --> 00:04:37.120
a service. Biggest one being memory. JS will use as
87
00:04:37.240 --> 00:04:39.759
much memory as you make it available to it. And
88
00:04:39.879 --> 00:04:44.519
if you start killing it when it reaches whatever arbitrary threshold,
89
00:04:45.079 --> 00:04:47.720
you know you're killing the process yourself. And and then
90
00:04:47.759 --> 00:04:50.279
you're starting it and complaining that your process is crashing
91
00:04:50.279 --> 00:04:52.199
all the time you're killing it, of course is crashing
92
00:04:52.199 --> 00:04:56.120
all the time. Okay, it's literally like this thing alone
93
00:04:56.199 --> 00:04:59.240
is probably don't know worth a few hours of fright time,
94
00:04:59.680 --> 00:05:02.680
super high end colsantacy. So this is for free, so
95
00:05:02.759 --> 00:05:04.879
you know to take it, take it the way you want.
96
00:05:05.079 --> 00:05:09.240
But this is essentially, you know, very easy fix. But
97
00:05:09.399 --> 00:05:12.240
most people don't Most people monitor assess micos if you
98
00:05:12.399 --> 00:05:16.079
use it, but don't look into what's happening inside the process.
99
00:05:16.160 --> 00:05:17.879
And this is you know, makes all the difference.
100
00:05:18.480 --> 00:05:22.519
One of the key metrics there that was added relatively
101
00:05:22.560 --> 00:05:25.519
recently is the event look utilization. It's going to say
102
00:05:25.519 --> 00:05:28.319
you a whole lot more information than monitoring a CPO.
103
00:05:29.000 --> 00:05:33.879
Yeah, awesome. The next one is use node LTS, which
104
00:05:33.920 --> 00:05:36.399
is long term support versions in production.
105
00:05:38.439 --> 00:05:40.439
I think that one is like, you know, as a project,
106
00:05:40.519 --> 00:05:44.800
we support the long term support streams and the recommendations
107
00:05:44.839 --> 00:05:48.519
really stick with those because in terms of security effects
108
00:05:48.680 --> 00:05:50.439
and stuff like that, that's where you're going to get
109
00:05:50.439 --> 00:05:52.959
those and most people don't want to update when those
110
00:05:53.000 --> 00:05:53.319
come out.
111
00:05:54.639 --> 00:05:58.000
And these are the even numbered versions, right, that's.
112
00:05:57.839 --> 00:06:01.319
Right, and they come out every October and are supported
113
00:06:01.399 --> 00:06:02.480
for thirty months.
114
00:06:03.040 --> 00:06:06.720
They usually say LTS. It's like it's the version number
115
00:06:06.720 --> 00:06:09.480
that says LTS. So if you have a question, just
116
00:06:09.600 --> 00:06:14.040
look for that and you'll know. I think we all
117
00:06:14.120 --> 00:06:15.720
kind of stared at each other on that one, Like
118
00:06:15.759 --> 00:06:21.000
it was pretty clear that that's a good move. The
119
00:06:21.040 --> 00:06:24.000
fourth one is automate testing, code re view and conformance
120
00:06:24.040 --> 00:06:25.079
as much as possible.
121
00:06:25.839 --> 00:06:28.079
Yeah, that one I'll jump in. We talked about last time.
122
00:06:28.759 --> 00:06:31.720
I think like no just is known for being able
123
00:06:31.720 --> 00:06:34.720
to let you move really fast and be productive, but
124
00:06:35.279 --> 00:06:37.680
you need really good testing to be able to move
125
00:06:37.759 --> 00:06:39.720
quickly to make sure you're not going to break things.
126
00:06:39.720 --> 00:06:41.639
And so that's where we last time. We talked about
127
00:06:41.639 --> 00:06:44.199
like how that how it is really your enabler to
128
00:06:44.240 --> 00:06:47.639
take advantage of the sort of speed and agility that
129
00:06:47.720 --> 00:06:48.879
node gives.
130
00:06:49.439 --> 00:06:52.199
We also spoke about the fact that people still use
131
00:06:52.240 --> 00:06:57.240
old testing frameworks which are showing their age, and that
132
00:06:57.399 --> 00:07:00.879
Node now comes with its own built into framework that
133
00:07:00.959 --> 00:07:03.439
you can really easily leverage out of the box.
134
00:07:06.439 --> 00:07:09.240
Good deal. And then it sounded like you got part
135
00:07:09.279 --> 00:07:13.839
way into but didn't completely discuss avoid dependency creep.
136
00:07:18.600 --> 00:07:22.959
Yes, we spoke at length about how NPM it's kind
137
00:07:22.959 --> 00:07:26.399
of like this black hole which sucks the entire universe
138
00:07:26.439 --> 00:07:29.480
into it. So you add one dependency which brings on
139
00:07:29.680 --> 00:07:32.560
another couple for the ride, which bring even more and
140
00:07:32.600 --> 00:07:35.199
more and more. And we talked about the fact that
141
00:07:35.279 --> 00:07:39.279
you need to really be how would I say it,
142
00:07:43.360 --> 00:07:47.800
cognizant of what you're bringing in intentional I think was
143
00:07:47.800 --> 00:07:51.720
the term that we use. Think about what you're bringing
144
00:07:51.759 --> 00:07:53.959
in and why you actually need it, and if there
145
00:07:54.000 --> 00:08:00.120
are lighterweight alternatives, and beware utilizing multiple versions of the
146
00:08:00.240 --> 00:08:06.000
same library. Anything else we mentioned that I'm missing, Yeah, I.
147
00:08:06.000 --> 00:08:08.959
Think that one of the aspects was like within an organization,
148
00:08:09.680 --> 00:08:11.639
the great the good thing about NPM and all the
149
00:08:11.680 --> 00:08:13.879
choices there is there's lots of different choices, but like
150
00:08:13.920 --> 00:08:16.079
in an organization, it would make a lot of sense
151
00:08:16.759 --> 00:08:19.800
to choose a more standardized set of packages as opposed
152
00:08:19.839 --> 00:08:23.720
to having five copies of something which does the same
153
00:08:23.759 --> 00:08:26.199
thing but are actually slightly different. Because when it comes
154
00:08:26.279 --> 00:08:29.680
to helping each other or to debug issues or to
155
00:08:29.720 --> 00:08:32.440
be able to support them, that can be an advantage.
156
00:08:32.440 --> 00:08:34.519
Of course, you know, there's always cases where you want
157
00:08:34.559 --> 00:08:37.879
to use something special to your particular effort, but like
158
00:08:37.960 --> 00:08:40.840
that's probably the twenty percent case versus the eighty percent.
159
00:08:42.600 --> 00:08:45.120
By the way, with regard to that one thing that
160
00:08:45.200 --> 00:08:47.840
I'm thought of and I don't think I mentioned the
161
00:08:47.919 --> 00:08:51.919
last time we spoke about this, is the fact that
162
00:08:52.000 --> 00:08:57.559
I know some organizations that intentionally take call it micro
163
00:08:57.639 --> 00:09:01.559
front ends micro services type approach of trying to create
164
00:09:01.559 --> 00:09:05.759
as much segregation as possible between various teams and reduce
165
00:09:05.840 --> 00:09:10.519
teams dependencies or dependency on each other. And that means
166
00:09:10.559 --> 00:09:15.240
that for example, one team might choose to use one
167
00:09:16.799 --> 00:09:20.000
package or library and another team should be free to
168
00:09:20.120 --> 00:09:24.039
choose something else, or that they don't need to move
169
00:09:24.080 --> 00:09:27.600
at the same rate with regard to version ing and
170
00:09:28.000 --> 00:09:31.000
stuff like that. Now, obviously they if they go the
171
00:09:31.039 --> 00:09:34.559
way or the whole way with microservices, then they're probably
172
00:09:34.600 --> 00:09:38.600
also running separate node instances, which might reduce the impact,
173
00:09:38.759 --> 00:09:41.559
but they might be running within the same note instance,
174
00:09:42.200 --> 00:09:46.559
and then they're kind of working in contradiction to this recommendation.
175
00:09:48.600 --> 00:09:50.600
I think, like if you look at it, like maybe
176
00:09:51.000 --> 00:09:54.679
that plays into not using like not forcing people to
177
00:09:54.679 --> 00:09:56.799
be using the same version. But I still think even
178
00:09:56.799 --> 00:10:00.279
in that case, there's value to say, like let's all
179
00:10:00.399 --> 00:10:02.600
choose the same loger, right, Like we don't need to
180
00:10:02.679 --> 00:10:06.000
use ten different bloggers. So for example, if somebody moves
181
00:10:06.000 --> 00:10:08.519
from one team to the other, they they already know
182
00:10:08.679 --> 00:10:10.799
the log or in the patterns and so forth they're
183
00:10:10.919 --> 00:10:15.600
used and breaking it up into micro services like that's
184
00:10:15.600 --> 00:10:17.720
sort of a different kind of dependency in my mind.
185
00:10:17.799 --> 00:10:21.320
Anyway, Yeah, I agree. I've worked on a number of
186
00:10:21.360 --> 00:10:23.720
projects where we you know, we try to segregate things
187
00:10:23.720 --> 00:10:26.480
out this way, and what I found is that sometimes
188
00:10:26.480 --> 00:10:28.720
there are good reasons for deviating from what the other
189
00:10:28.720 --> 00:10:31.600
teams are doing, and sometimes there really aren't. And so
190
00:10:32.480 --> 00:10:35.240
a lot of this, you know, they try and segregate
191
00:10:35.320 --> 00:10:39.080
it so the teams don't have to spend as much time,
192
00:10:39.159 --> 00:10:43.519
you know, coming together and collaborating. But this is more
193
00:10:43.519 --> 00:10:47.200
of an organizational issue, I think, than than a code issue,
194
00:10:47.200 --> 00:10:49.720
in the sense that you should still be talking and
195
00:10:49.759 --> 00:10:52.039
you can still leverage the expertise of the other team
196
00:10:52.080 --> 00:10:54.919
where appropriate and say, all right, we've got to solve
197
00:10:54.960 --> 00:10:57.960
this problem. We know you have this same problem. What
198
00:10:58.000 --> 00:10:59.919
are you using And then you can have the discussion
199
00:11:00.039 --> 00:11:03.600
about what and where and why. And then when we
200
00:11:03.639 --> 00:11:06.440
look at it from our problem perspective, right, because we're
201
00:11:06.440 --> 00:11:08.440
working on a different part of the app, then we
202
00:11:08.519 --> 00:11:11.639
may say that all makes sense, and we tried to
203
00:11:11.639 --> 00:11:14.159
put it in, but it turned out these concerns lead
204
00:11:14.240 --> 00:11:16.360
us to a different solution. But then you have a
205
00:11:16.399 --> 00:11:18.440
good reason for saying this is why we're doing it
206
00:11:18.480 --> 00:11:21.639
different as opposed to the other thing. But it also
207
00:11:21.759 --> 00:11:24.279
then makes people more mobile between the teams. It makes
208
00:11:24.279 --> 00:11:26.799
it easier to talk about some of the similar issues.
209
00:11:27.159 --> 00:11:30.039
And so I think there's some nuance here, but I
210
00:11:30.200 --> 00:11:33.360
like the direction of saying, hey, at least consider what
211
00:11:33.399 --> 00:11:35.159
everybody else is doing in your organization.
212
00:11:35.559 --> 00:11:39.279
And part of my part of the concerns here is
213
00:11:39.840 --> 00:11:45.480
you really want to to even say okay. So we
214
00:11:45.559 --> 00:11:50.200
have created a way to a little module to call
215
00:11:50.399 --> 00:11:54.080
this micro service okay that is consumed by everybody okay,
216
00:11:54.600 --> 00:11:57.120
and I want to take that code and publish it
217
00:11:57.200 --> 00:12:02.879
on my internal registry because otherwise each other team is
218
00:12:02.879 --> 00:12:05.399
going to redew it, and each other team is going
219
00:12:05.399 --> 00:12:11.480
to use a different HDP library for calling it okay,
220
00:12:12.120 --> 00:12:16.720
which is bananas. I've seen this happening over and over again. Okay,
221
00:12:16.840 --> 00:12:21.120
literally time wasted due to writing API clients. But now
222
00:12:21.120 --> 00:12:24.240
we have a point there for top creating API clients.
223
00:12:24.360 --> 00:12:28.679
But this is essentially this is part of the problem.
224
00:12:29.360 --> 00:12:31.799
This is one of the problems. This happens to all
225
00:12:31.799 --> 00:12:32.720
the things okay.
226
00:12:33.240 --> 00:12:38.120
It is I need a library to validate that.
227
00:12:38.000 --> 00:12:44.480
My custom field is correct, right, and then I need
228
00:12:44.519 --> 00:12:47.919
this custom data. Well, let's put it somewhere so that
229
00:12:48.000 --> 00:12:50.840
I don't need to implement it all every every single time.
230
00:12:51.799 --> 00:12:56.279
So yeah, it just comes out of being intentional. You
231
00:12:56.320 --> 00:12:59.200
need to be more intentional than your opinion. Like engineers
232
00:12:59.240 --> 00:13:01.399
are going to have opinions. You know, I don't agree
233
00:13:01.399 --> 00:13:03.240
with the displiment right into the library. Does it a
234
00:13:03.279 --> 00:13:06.240
different way, And it's like in an organization, that's just
235
00:13:06.279 --> 00:13:09.440
not our work. You can get so far with it.
236
00:13:10.240 --> 00:13:14.159
Let's just cause more headaches and overhead. So do it once,
237
00:13:14.240 --> 00:13:16.279
publish it for everyone to use. And you know what
238
00:13:16.320 --> 00:13:17.840
if you don't agree with that one hundred percent, so
239
00:13:17.879 --> 00:13:18.639
what use it anyway?
240
00:13:19.480 --> 00:13:25.960
M Yeah, enterprise I agree, go ahead, Natalia sorry, yeah.
241
00:13:26.360 --> 00:13:29.000
Yeah, in enterprise development, I think many.
242
00:13:28.759 --> 00:13:32.440
People forget there is this intermediately year like everybody can
243
00:13:32.480 --> 00:13:34.200
consume from upstream.
244
00:13:33.799 --> 00:13:35.039
Whatever module they want.
245
00:13:35.200 --> 00:13:40.120
But again, like Matteo and James uh stay that, you
246
00:13:40.320 --> 00:13:43.080
need to be conscious of what you're building yourself and
247
00:13:43.159 --> 00:13:45.519
make it available to others. In the end, you have
248
00:13:45.600 --> 00:13:50.120
a smaller ecosystem with that within your company, your organization
249
00:13:50.519 --> 00:13:55.759
that allows you to publish to any private registry and
250
00:13:55.879 --> 00:13:59.919
also function in the same way as open source by
251
00:14:00.200 --> 00:14:02.200
within the boundaries of your organization.
252
00:14:02.320 --> 00:14:03.279
And by the way, this is.
253
00:14:04.919 --> 00:14:10.120
Definitely an organizational convenience, not so much at a metal one.
254
00:14:10.159 --> 00:14:13.279
I think in the front end, definitely try to keep
255
00:14:14.639 --> 00:14:18.480
dependencies that you're probably shipping over the wire minimum. But
256
00:14:18.559 --> 00:14:20.360
in the back end, what you want to do is
257
00:14:20.399 --> 00:14:25.559
to make sure that you have a lower maintenance requirement.
258
00:14:27.000 --> 00:14:30.279
Than when you have a lot of modules to maintain.
259
00:14:32.000 --> 00:14:36.879
One thing that I encountered with organizations thinking about reusing
260
00:14:37.120 --> 00:14:40.679
their own components within the organization. So sometimes they're very
261
00:14:40.720 --> 00:14:43.480
explicit about it. So for example, if an organization in
262
00:14:43.559 --> 00:14:47.080
the context of front and development, an organization decides they're
263
00:14:47.120 --> 00:14:50.480
going to have a design system and the implement some
264
00:14:50.519 --> 00:14:56.440
sort of a front end library that's pretty typical but working,
265
00:14:56.480 --> 00:14:59.480
and let's say in a certain project, and then coming
266
00:14:59.519 --> 00:15:02.279
to a conclude and hey, this bit of code that
267
00:15:02.360 --> 00:15:05.840
I wrote seems to be something that will be generally
268
00:15:06.000 --> 00:15:11.480
useful across the entire organizations. People have that a harm moment,
269
00:15:11.919 --> 00:15:17.480
but are sometimes hesitant to act on it because you're
270
00:15:17.519 --> 00:15:21.720
assuming a lot more responsibility than you originally had. Like
271
00:15:21.799 --> 00:15:25.240
if you're just writing something for your own use within
272
00:15:25.279 --> 00:15:28.639
your own team, that's one thing, but committing to support
273
00:15:28.720 --> 00:15:32.320
every use case within the larger organization. That's a different
274
00:15:32.360 --> 00:15:37.039
type level of commitment altogether, and making that jump can
275
00:15:37.080 --> 00:15:39.080
be you know significant.
276
00:15:40.919 --> 00:15:42.399
Yeah, that's true.
277
00:15:42.480 --> 00:15:47.679
I have sorry, go ahead, go ahead, Michael, I said.
278
00:15:47.639 --> 00:15:49.320
That seems to be the thing in life. The more
279
00:15:49.399 --> 00:15:51.320
you do, the more you pick up in terms of
280
00:15:51.360 --> 00:15:54.360
responsibility of keeping things going. So I can totally see
281
00:15:54.360 --> 00:15:56.120
people worrying about that.
282
00:15:56.679 --> 00:16:02.039
Now I have an absolute counter argument to okay, and
283
00:16:03.320 --> 00:16:05.919
I want to flag out this functional and why you
284
00:16:06.000 --> 00:16:10.440
need to be intentional when creating this kind of software,
285
00:16:10.480 --> 00:16:14.080
when when thinking about dependencies and software usability within your
286
00:16:14.120 --> 00:16:19.080
organization and enterprise and also our enterprise about absolutely sabotage
287
00:16:19.120 --> 00:16:24.159
themselves while doing so. Okay, so imagine that each team
288
00:16:24.399 --> 00:16:27.679
needs to, you know, implement a piece of functionality. Okay,
289
00:16:28.159 --> 00:16:31.639
Now one of the teams that they discuss, one of
290
00:16:31.720 --> 00:16:34.159
the teams is the first one, and they created their
291
00:16:34.159 --> 00:16:36.600
own little module to do this, and this is well
292
00:16:36.639 --> 00:16:40.879
it it is. I'm publishing it on my NPM internal
293
00:16:40.960 --> 00:16:44.639
MPM rights. Great, everybody is happy, the management is very happy.
294
00:16:44.679 --> 00:16:46.320
We saved a maunch of money, so we need to
295
00:16:46.440 --> 00:16:48.120
can reuse all these things.
296
00:16:48.159 --> 00:16:49.840
Fantastic okay.
297
00:16:50.480 --> 00:16:54.600
Now, however, a moment after that's happened, the team that
298
00:16:54.679 --> 00:17:00.320
created that module completely drops the ball on it because nope,
299
00:17:00.440 --> 00:17:03.279
it's not part of my OKR anymore. The quarter has changed,
300
00:17:03.320 --> 00:17:07.240
so I'm not maintaining this anymore. And this is the
301
00:17:07.279 --> 00:17:10.680
typical thing that happens with okay, are okay? If what
302
00:17:10.720 --> 00:17:13.759
you're doing is not part of of your okay of
303
00:17:13.920 --> 00:17:17.599
of your does not help you achieve your key results,
304
00:17:17.599 --> 00:17:20.519
you are absolute that thing it needs to be dropped, okay,
305
00:17:20.799 --> 00:17:23.119
even though it's important and you know you're saving the
306
00:17:23.160 --> 00:17:27.680
compliant of money by avoiding duplications. So, in reality, a
307
00:17:27.759 --> 00:17:32.440
lot of teams in some enterprise works a little bit
308
00:17:32.480 --> 00:17:34.279
like silos.
309
00:17:34.119 --> 00:17:35.440
And they are a little bit.
310
00:17:36.880 --> 00:17:40.319
Yeah I have Yeah, I think Natali has a few
311
00:17:40.359 --> 00:17:42.960
stories on on that, so I don't know it's.
312
00:17:44.039 --> 00:17:47.599
But yeah, after a decad as an enterprise developer, I
313
00:17:47.640 --> 00:17:51.720
have many stories. Yes, there are silos, and I do agree, mate,
314
00:17:52.200 --> 00:17:56.920
But typically enterprise projects do not work under KPIs. The
315
00:17:57.000 --> 00:18:01.759
KPI is delivering your project's a little bit different than product.
316
00:18:03.200 --> 00:18:05.119
And another thing to your.
317
00:18:05.039 --> 00:18:08.880
Favor is that if you are building something that you
318
00:18:09.039 --> 00:18:13.559
publish to a private registry and you move to another project,
319
00:18:13.680 --> 00:18:16.599
which is usually the case of developers in the context
320
00:18:16.680 --> 00:18:17.400
of enterprise.
321
00:18:17.799 --> 00:18:20.400
You are rotating, you're going to a different project.
322
00:18:20.440 --> 00:18:22.920
You can reuse it, right, you have it, you have
323
00:18:23.000 --> 00:18:26.799
it available to your new project, whereas if it's part
324
00:18:26.839 --> 00:18:29.839
of a private code base, you don't have access to
325
00:18:29.880 --> 00:18:30.440
it anymore.
326
00:18:30.920 --> 00:18:34.400
Right, And I think that there's I'm gonna sorry, sorry
327
00:18:34.400 --> 00:18:36.920
for the dogs here, but only another aspect of this
328
00:18:37.119 --> 00:18:41.319
that's completely overlooked is a lot of times these internal
329
00:18:41.359 --> 00:18:44.319
teams will look at, hey, this other team created this,
330
00:18:44.319 --> 00:18:47.039
this package that I want to use, it's their responsibility
331
00:18:47.079 --> 00:18:49.319
to maintain it so I can get the benefit from it.
332
00:18:49.880 --> 00:18:54.119
That's internally the wrong calculus. It's if if if I'm
333
00:18:54.559 --> 00:18:57.119
up to use it in my project, I'm also picking
334
00:18:57.200 --> 00:18:58.759
up the burden to help maintain it.
335
00:18:59.720 --> 00:19:00.000
Uh.
336
00:19:00.119 --> 00:19:03.319
So you know, we can't have this idea that it's like, oh,
337
00:19:03.519 --> 00:19:06.039
that other team's responsible for it. No, no, no, all
338
00:19:06.079 --> 00:19:09.519
the same company, all the same team is equally my
339
00:19:09.599 --> 00:19:10.839
responsibility to anyone else.
340
00:19:11.640 --> 00:19:15.680
Let me be plunned if your assumption is that if
341
00:19:15.720 --> 00:19:19.559
you run into a problem because your needs change and
342
00:19:19.599 --> 00:19:23.839
the current and the package doesn't properly or adequately support it,
343
00:19:23.920 --> 00:19:27.039
and you're dependent on somebody from some other team who,
344
00:19:27.160 --> 00:19:31.000
as we said, may have different OKRs, different priorities, you're
345
00:19:31.039 --> 00:19:34.720
literally screwed. I mean, you have to take the attitude
346
00:19:34.759 --> 00:19:37.599
and the approach that if you're using it, you're assuming
347
00:19:37.640 --> 00:19:38.960
responsibility for it.
348
00:19:40.119 --> 00:19:43.759
That can almost still be totally extended to every module
349
00:19:43.799 --> 00:19:47.839
you use from MPM, because in that case, the people
350
00:19:47.839 --> 00:19:51.079
who who may be maintaining it are even further away
351
00:19:51.079 --> 00:19:55.039
from you and even have less reason to necessarily prioritize
352
00:19:54.400 --> 00:19:56.640
your your requirements.
353
00:19:58.319 --> 00:20:00.079
And I a hundred percent agree with that. I'm and
354
00:20:00.160 --> 00:20:04.279
I've said before many times. Where you know, especially companies,
355
00:20:04.279 --> 00:20:07.480
if you are making use of open source, then you
356
00:20:07.519 --> 00:20:09.960
as a company have an obligation helped support that open
357
00:20:09.960 --> 00:20:15.839
source that that you're using. That includes contributing back bug fixes,
358
00:20:16.000 --> 00:20:19.519
changes or whatever, and working with those maintainers. Don't put
359
00:20:19.559 --> 00:20:22.119
that burden on them, especially if you're not paying them.
360
00:20:22.759 --> 00:20:25.640
By the way, an interesting aspect that I've seen is
361
00:20:25.640 --> 00:20:29.799
that at least for some organization, when they decided to
362
00:20:29.920 --> 00:20:34.640
share some resource across the entire organization, it was actually
363
00:20:34.759 --> 00:20:39.640
easier from the organizational perspective to turn it into an
364
00:20:39.680 --> 00:20:44.839
actual open source project. Then to try to maintain it
365
00:20:44.920 --> 00:20:49.480
as an internally shared resource, because once it was declared
366
00:20:49.480 --> 00:20:53.960
an actual open source project, it was actually allocated resources
367
00:20:54.640 --> 00:20:57.880
versus when it was just an internal thing that's shared,
368
00:20:58.359 --> 00:21:02.680
you know, ownership was met.
369
00:21:03.599 --> 00:21:06.960
Yeah. One thing that I wanted to piggyback off of
370
00:21:07.240 --> 00:21:10.640
what Matteo was talking about a little bit earlier is that,
371
00:21:10.799 --> 00:21:13.079
and this is coming from when I was working on
372
00:21:13.160 --> 00:21:17.160
integrations and it was mostly third party integrations within an
373
00:21:17.160 --> 00:21:21.200
application that I was helping maintain. But also, you know,
374
00:21:21.240 --> 00:21:24.759
between micro services, is that if you can structure your
375
00:21:25.039 --> 00:21:27.119
because he was saying, you know, if you're writing the
376
00:21:27.240 --> 00:21:29.160
micro service, you ought to be writing the library that
377
00:21:29.200 --> 00:21:32.559
consumes it and giving everybody a standard way of accessing it.
378
00:21:33.039 --> 00:21:36.880
And for me, if you can structure all of those
379
00:21:37.039 --> 00:21:39.680
the same way and make sure that they all kind
380
00:21:39.720 --> 00:21:43.480
of look and feel and are built in the same manner, again,
381
00:21:43.519 --> 00:21:46.359
it makes it easier for people across the organization to
382
00:21:46.359 --> 00:21:48.519
be able to come in and do that maintenance for
383
00:21:48.559 --> 00:21:51.839
you so that they can you know, you can move ahead.
384
00:21:51.880 --> 00:21:54.440
So then it's hey, this micro service has this feature
385
00:21:54.440 --> 00:21:56.160
that they built in, but they have an updated the
386
00:21:57.039 --> 00:22:00.559
library for it, or maybe I need to make pull
387
00:22:00.599 --> 00:22:02.119
the data in, but I need to do something a
388
00:22:02.119 --> 00:22:04.839
little bit different with it before I consume it in
389
00:22:05.039 --> 00:22:08.920
my service. You know, if it's all structured in a
390
00:22:08.960 --> 00:22:11.000
similar manner, then I know where to go to go
391
00:22:11.000 --> 00:22:14.200
ahead and add that in and then everybody else benefits
392
00:22:14.200 --> 00:22:15.759
from it and I don't have to go in and
393
00:22:15.799 --> 00:22:20.359
reverse engineer this driver or that driver, or this integration
394
00:22:20.440 --> 00:22:21.920
library and that integration library.
395
00:22:22.279 --> 00:22:27.400
I do want to I do want to. Sorry, I
396
00:22:27.440 --> 00:22:29.880
do want to push us along a little bit because
397
00:22:29.920 --> 00:22:32.279
we are We're never going to finish the pillars.
398
00:22:31.960 --> 00:22:36.000
Otherwise I want I do want them today.
399
00:22:36.400 --> 00:22:38.599
Yeah, I do want to touch on two things that
400
00:22:38.640 --> 00:22:41.640
were mentioned in the article in this context, at least briefly.
401
00:22:42.240 --> 00:22:46.880
One is that no d APIs versus Web Standard APIs,
402
00:22:47.240 --> 00:22:53.119
and the other you also mentioned Mono repost. So can
403
00:22:53.160 --> 00:22:55.839
you talk about Can someone talk about the no JS
404
00:22:55.880 --> 00:22:59.839
standard Native standard APIs versus the Web Standard APIs.
405
00:23:00.119 --> 00:23:01.519
Yeah, I can definitely talk about that. You know, we
406
00:23:01.519 --> 00:23:04.119
have a number of places in node now, you know,
407
00:23:04.720 --> 00:23:07.279
the old r L parts versus new r L, node
408
00:23:07.319 --> 00:23:11.039
streams versus web streams, old node crypto versus web crypto.
409
00:23:11.440 --> 00:23:14.000
We have a lot of these cases where we have
410
00:23:14.880 --> 00:23:17.960
you know, duplicate or overlapping APIs. Let me talk you
411
00:23:18.039 --> 00:23:19.640
know you. R L is the very first one that
412
00:23:19.680 --> 00:23:23.440
I introduced, and there was a huge controversy even within
413
00:23:23.519 --> 00:23:25.480
the project. I was actually yelled at at a conference
414
00:23:25.519 --> 00:23:29.160
by another node contributor, like actually yelled at for suggesting
415
00:23:29.240 --> 00:23:32.960
that we add this because r L parts is there
416
00:23:33.079 --> 00:23:37.160
and and it's fast. Uh. And you know when we
417
00:23:37.240 --> 00:23:39.279
added the new r L pars er, the w g
418
00:23:39.480 --> 00:23:41.440
r O parser, when it was slower, but it was
419
00:23:41.480 --> 00:23:45.000
standard and folks, we use libraries for in node in
420
00:23:45.079 --> 00:23:47.039
browsers and then you know, picked it up and that
421
00:23:47.160 --> 00:23:49.279
you know, and something. You can use this thing everywhere.
422
00:23:49.599 --> 00:23:54.160
It's it's much more portant. Now, it's faster than anything else. Well,
423
00:23:54.160 --> 00:23:59.160
we're gonna see this pattern continue. And whenever you are
424
00:24:01.000 --> 00:24:03.559
whenever you're selecting which API, do us say node streams
425
00:24:03.640 --> 00:24:07.160
versus webstreams. Be very intentional. Don't just make it an
426
00:24:07.200 --> 00:24:10.079
accidental choice. Be very intentional on how you adopt these
427
00:24:10.519 --> 00:24:12.920
node streams are going to be way more performant than webstreams,
428
00:24:13.039 --> 00:24:16.400
but webstreams are way more portable. So you need to
429
00:24:16.480 --> 00:24:20.960
balance which goals you're looking for. And make sure you're
430
00:24:20.960 --> 00:24:24.119
selecting your dependencies accordingly. The more you have to translate
431
00:24:24.240 --> 00:24:27.599
between them, I say, if you're using both note streams
432
00:24:27.640 --> 00:24:30.880
and webstreams, the more overhead and easier it's going to
433
00:24:30.960 --> 00:24:32.799
be to get it wrong. So you need to be
434
00:24:32.920 --> 00:24:35.880
very intentional about your strategy in which API is you're picking.
435
00:24:36.920 --> 00:24:40.240
But something zu pers just don't use it anymore, use new.
436
00:24:40.240 --> 00:24:45.720
Your something important is. No JS in general has added
437
00:24:45.759 --> 00:24:51.799
a lot of APIs in the last decade, okay, and
438
00:24:52.119 --> 00:24:55.079
the most people still development JS like it's twenty fourteen,
439
00:24:56.240 --> 00:25:00.519
so please stopkin take a look at work there. Okay,
440
00:25:01.079 --> 00:25:03.640
like literally, oh, we have fetch now, I was I
441
00:25:03.759 --> 00:25:08.880
was checking recently and we and you know a few
442
00:25:08.880 --> 00:25:12.160
of the top downloaded modules on MPM are high level
443
00:25:14.480 --> 00:25:17.559
HDP clients, and we had fetch for a while in
444
00:25:17.680 --> 00:25:20.400
Node okay, and you know, and.
445
00:25:20.440 --> 00:25:23.720
Even simple u u I D, the uu i D module,
446
00:25:23.799 --> 00:25:25.680
a lot of folks, you you know, pull it off
447
00:25:25.720 --> 00:25:30.119
with NPM to just generate a random u i D. Great,
448
00:25:30.240 --> 00:25:34.000
it's a great module. But compared to the API that's
449
00:25:34.039 --> 00:25:37.519
built into node and browsers, we have Web standard API,
450
00:25:37.680 --> 00:25:40.519
which is random u I D until on the crypto obbit.
451
00:25:41.200 --> 00:25:45.039
It's way faster, way simpler, and it's just the thing
452
00:25:45.079 --> 00:25:47.440
you should use. You could drop an entire dependency that's
453
00:25:47.480 --> 00:25:50.319
been in essence twenty twenty one, and folks are just
454
00:25:50.400 --> 00:25:52.559
now discovering that that exists around time.
455
00:25:52.720 --> 00:25:56.319
So I just want to point out that Mateo pointed
456
00:25:56.400 --> 00:25:59.160
out that the Node team made fetch happen, and so
457
00:25:59.279 --> 00:26:02.359
please stop trying to make fetch happen. Yeah.
458
00:26:04.200 --> 00:26:09.200
Sorry, we were actually just I think Mattel we were
459
00:26:09.319 --> 00:26:12.680
exchanging tweets about it or excess about it or what
460
00:26:12.799 --> 00:26:15.079
was this on on Blue Sky.
461
00:26:14.960 --> 00:26:15.799
I don't remember.
462
00:26:16.279 --> 00:26:22.160
More so many options, and so that's number one. So basically,
463
00:26:22.240 --> 00:26:23.319
if I'm here, I have.
464
00:26:23.359 --> 00:26:25.759
A question here is there a good place to find these?
465
00:26:26.000 --> 00:26:28.480
Right the Hey, you might be using a library for this.
466
00:26:28.640 --> 00:26:29.880
You don't need you anymore.
467
00:26:31.599 --> 00:26:35.359
Just now, just too Probably it's probably something that we
468
00:26:35.400 --> 00:26:42.039
should develop and promote a little bit. Okay, maybe like
469
00:26:42.200 --> 00:26:44.680
this can be a good a good good something that's missing.
470
00:26:44.720 --> 00:26:46.279
I don't know, this is there.
471
00:26:46.119 --> 00:26:49.559
There, this is the this is something I would actually,
472
00:26:49.720 --> 00:26:52.319
you know, Natalia, you know, you know, for like debt
473
00:26:52.359 --> 00:26:54.519
tools and like the developer experience and like that, because
474
00:26:54.519 --> 00:26:56.240
those of us are actually working on the APIs, suck
475
00:26:56.279 --> 00:26:59.079
at the documentation and actually promoting these things. But if
476
00:26:59.119 --> 00:27:02.880
we can start having the tooling to like promote some
477
00:27:03.000 --> 00:27:05.440
these things more and say, hey, there's this other thing,
478
00:27:05.880 --> 00:27:10.240
it might be interesting to look at that. Needia better
479
00:27:10.279 --> 00:27:10.440
at this.
480
00:27:11.200 --> 00:27:13.880
A certain way to go about it is to basically,
481
00:27:13.960 --> 00:27:16.680
if you're looking for certain functionality, check if there's a
482
00:27:17.079 --> 00:27:20.799
web API for it, basically, and that's really easy because
483
00:27:20.960 --> 00:27:24.319
for example, you've got MDN and then just check if
484
00:27:24.359 --> 00:27:28.799
that also exists on note that just that before you
485
00:27:29.160 --> 00:27:32.039
rush off and NPM install something.
486
00:27:33.960 --> 00:27:35.640
One of the things we are doing in the project
487
00:27:35.759 --> 00:27:39.240
is we're ramping up some ambassadors and part of that
488
00:27:39.359 --> 00:27:42.240
we're coming up with messages we want those ambassadors to
489
00:27:42.240 --> 00:27:45.279
help promote and that suggestion of like I think we've
490
00:27:45.319 --> 00:27:49.000
called it something like developing with modern no JS right,
491
00:27:49.119 --> 00:27:51.599
like to highlight here are the things that are available
492
00:27:51.640 --> 00:27:53.720
that might not have been available before. It's definitely on
493
00:27:53.839 --> 00:27:55.759
the list of things that are being brainstormed there.
494
00:27:59.079 --> 00:28:02.039
Anybody wants to say anything about mono repos before we
495
00:28:02.200 --> 00:28:03.519
move on to the next one.
496
00:28:07.519 --> 00:28:10.799
I'm just going to say, use pm PM. This is
497
00:28:10.880 --> 00:28:14.799
my preference, Okay, I am personal that this is my
498
00:28:14.960 --> 00:28:19.039
personal preference. Use MPM when you don't need mono repos,
499
00:28:19.119 --> 00:28:20.839
use PMPM when you need monor repos.
500
00:28:21.400 --> 00:28:22.759
These matches more or less.
501
00:28:22.920 --> 00:28:28.720
My yah seems to work fine for other people, but genetically,
502
00:28:28.880 --> 00:28:32.759
my current status is I'm very happy with PMPM.
503
00:28:32.880 --> 00:28:35.279
I don't know, Natalia, you what you guys use you
504
00:28:35.519 --> 00:28:35.880
have a lot of.
505
00:28:36.039 --> 00:28:39.839
Yeah, No, I second, yeah, I second that I use
506
00:28:39.960 --> 00:28:45.200
PMPM for monor repos right now, and and PM for
507
00:28:45.240 --> 00:28:45.839
all the rest.
508
00:28:47.839 --> 00:28:50.039
Yeah. I agree. There's there's out of all of them
509
00:28:50.119 --> 00:28:53.440
that's the one that handles this better. Their patterns are
510
00:28:53.480 --> 00:28:55.519
just actually makes sense.
511
00:28:57.319 --> 00:28:59.759
So Chuck, maybe move us along to the next one.
512
00:29:00.039 --> 00:29:03.119
Gonna say, sounds like we've gotten that one. So the
513
00:29:03.240 --> 00:29:05.240
next one is de risk your dependencies.
514
00:29:09.400 --> 00:29:11.599
I think it comes back to the part we were
515
00:29:11.640 --> 00:29:15.079
talking about being intentional, like I think too many people
516
00:29:15.519 --> 00:29:18.640
pull in a very deep dependency tree without thinking about it,
517
00:29:18.799 --> 00:29:22.759
and it's you know, once you once you've you've pulled
518
00:29:22.839 --> 00:29:26.079
things in. Then then we were we talked a little
519
00:29:26.079 --> 00:29:28.079
bit before, like you almost need to take on the
520
00:29:28.160 --> 00:29:31.559
approach of like, okay, I'm using this, am I ready
521
00:29:31.599 --> 00:29:34.720
to help maintain it because like as an organization not
522
00:29:34.839 --> 00:29:37.960
you know, James mentioned like you should do that because
523
00:29:38.400 --> 00:29:40.799
it's the right thing to do, but I also think
524
00:29:40.839 --> 00:29:45.119
it's an organization. It's risk management, right, and most organizations
525
00:29:45.160 --> 00:29:46.720
that's a big part of them is like how do
526
00:29:46.799 --> 00:29:49.119
we manage our risk? And as soon as you've pulled
527
00:29:49.160 --> 00:29:51.480
in the software, it's part of the things you should
528
00:29:51.480 --> 00:29:54.200
be looking at in terms of managing your risk and saying, well,
529
00:29:54.279 --> 00:29:56.279
like if we had to switch to something else, could
530
00:29:56.279 --> 00:29:58.200
we if we had to make a change, could we?
531
00:29:59.279 --> 00:30:02.319
Is it a healthy project? And you know, and I
532
00:30:02.359 --> 00:30:04.519
think in near the end there we talk about like
533
00:30:04.640 --> 00:30:07.119
one way to manage your risk is to support the project,
534
00:30:07.200 --> 00:30:10.519
either through your people or through funding. And you know,
535
00:30:10.599 --> 00:30:14.319
so most organizations should should probably invest a little bit
536
00:30:14.359 --> 00:30:16.319
more time in managing that particular risk.
537
00:30:16.519 --> 00:30:23.599
Me maybe if the maintainer gets enough support, he won't
538
00:30:23.759 --> 00:30:26.759
sell or he or she won't sell the project to
539
00:30:27.279 --> 00:30:29.319
some of the farious third party.
540
00:30:31.160 --> 00:30:35.240
That that's an extreme example of the case, right, or they.
541
00:30:35.319 --> 00:30:39.039
Just might not well Eco system Unfortunately he has been
542
00:30:39.119 --> 00:30:42.680
full of those, okay a couple of times already, So I'm.
543
00:30:42.559 --> 00:30:44.720
Fortunate, I mean, and that be sold right if the
544
00:30:44.799 --> 00:30:46.720
maintainer runs out of time to get burnt out, and
545
00:30:46.759 --> 00:30:49.920
they transition it to somebody without you know, without fully
546
00:30:50.000 --> 00:30:51.839
vetting who they are. You know that somebody else can
547
00:30:51.920 --> 00:30:54.880
come in and take care of the project, take advantage
548
00:30:54.880 --> 00:30:59.319
of the project. Anytime you add a new dependency that
549
00:30:59.400 --> 00:31:01.880
you don't control or you're not contributing to your adding risk,
550
00:31:02.759 --> 00:31:04.839
you know. And and if you're if you're bringing in
551
00:31:05.000 --> 00:31:07.720
a module that brings in you know, one hundred different dependencies,
552
00:31:08.359 --> 00:31:11.000
you're increasing your risk one hundred fold. So you know,
553
00:31:11.519 --> 00:31:14.119
you just have to be very intentional about what you're
554
00:31:14.160 --> 00:31:16.160
bringing in. You have to be very intentional about what
555
00:31:16.240 --> 00:31:19.079
you're going to support. UH and companies have to stop
556
00:31:19.200 --> 00:31:21.799
looking at open sources just free software that they don't
557
00:31:21.839 --> 00:31:25.559
have to do anything with to use. They have to
558
00:31:25.680 --> 00:31:28.039
help maintain it, or they're bringing or they're just opening
559
00:31:28.039 --> 00:31:30.440
themselves up to risk. And then if we look at
560
00:31:30.519 --> 00:31:32.880
like you know, some of the new like federal guidelines,
561
00:31:32.880 --> 00:31:34.759
you know, it's not just US, you know EU as
562
00:31:34.799 --> 00:31:37.759
well around s bombs to you know, you know, actually
563
00:31:37.799 --> 00:31:41.119
being able to produce a an audited list of these
564
00:31:41.160 --> 00:31:43.720
are the dependencies I'm using. Here's how they're maintained here,
565
00:31:43.839 --> 00:31:46.480
what the licenses are a lot of folks bring in
566
00:31:46.519 --> 00:31:48.680
these dependencies without ever thinking about that. But if this,
567
00:31:49.000 --> 00:31:51.240
if if your module ends up in some being used
568
00:31:51.240 --> 00:31:53.559
in some regulated industry, you have to be able to
569
00:31:53.559 --> 00:31:56.200
account for those things and be able to account for
570
00:31:56.240 --> 00:31:59.960
the risk. So it's it's not just a best practic
571
00:32:00.079 --> 00:32:02.119
is in some cases, it's an absolute requirement.
572
00:32:03.119 --> 00:32:05.200
And there's tooling that can help you with this, right.
573
00:32:06.160 --> 00:32:08.960
Oh yeah, I was gonna say, because it's it's not
574
00:32:09.200 --> 00:32:11.960
just tooling, but it's tooling that you'll use. Right, And
575
00:32:12.079 --> 00:32:14.279
for me, it kind of has to be automatic and
576
00:32:14.319 --> 00:32:16.279
get in my face because I'm lazy and I don't
577
00:32:16.279 --> 00:32:19.079
go look at it every however often you're supposed to do.
578
00:32:19.920 --> 00:32:22.000
It's like changing my oil. Right, it's not till the
579
00:32:22.079 --> 00:32:25.680
light comes on and I go, huh, you know.
580
00:32:26.160 --> 00:32:28.519
Well that's where I find it a bit surprising. Like
581
00:32:29.079 --> 00:32:31.160
I don't know however often it is, but every so
582
00:32:31.319 --> 00:32:36.559
often there's some high profile case where it's the extreme.
583
00:32:36.680 --> 00:32:39.519
You know, the maintainer goes off and does something to
584
00:32:39.599 --> 00:32:42.680
their module that they probably shouldn't have. But everybody seems
585
00:32:42.720 --> 00:32:46.519
surprised that this can happen, right, And like if you
586
00:32:46.960 --> 00:32:49.440
paid attention, it's sort of something you should know can
587
00:32:49.559 --> 00:32:52.359
happen in the plan, and so it shouldn't be a surprise,
588
00:32:52.440 --> 00:32:55.400
And everybody seems to get in a big fuss and
589
00:32:55.480 --> 00:32:57.680
then after a few months it tails off and it's
590
00:32:57.759 --> 00:32:59.880
not in your you know, it's not in the news anymore,
591
00:33:00.039 --> 00:33:03.599
and people forget about it again. So well, I mean,
592
00:33:03.720 --> 00:33:05.160
that's interesting.
593
00:33:05.519 --> 00:33:08.000
Just anecdotally. I'm not going to say like you know
594
00:33:08.079 --> 00:33:09.839
who or what module it was, but you know, this
595
00:33:10.000 --> 00:33:13.279
is going back and back to twenty fifteen, twenty sixteen,
596
00:33:13.680 --> 00:33:17.160
one of the most used modules on NPM, and the
597
00:33:17.200 --> 00:33:21.119
maintainer was quite upset and threatened to just delete everything,
598
00:33:21.480 --> 00:33:24.079
you know, delete everything off, get up, delete everything off NPM.
599
00:33:24.759 --> 00:33:26.720
And it came down within minutes that we were able
600
00:33:26.920 --> 00:33:28.799
to convince them not to do that, and it would
601
00:33:28.799 --> 00:33:32.240
have broken the entire ecosystem literally they had they had
602
00:33:32.279 --> 00:33:36.559
they done this, and you know it, Sometimes it just
603
00:33:36.640 --> 00:33:38.680
comes down to a maintainer being burnt out and not
604
00:33:38.759 --> 00:33:41.880
feel like they actually have the support. It doesn't have
605
00:33:41.920 --> 00:33:43.319
to be anything that various. It doesn't have to be
606
00:33:43.400 --> 00:33:45.119
selling it or somebody else taking over. It could just
607
00:33:45.160 --> 00:33:46.920
be kind I'm tired of dealing with this.
608
00:33:48.119 --> 00:33:51.119
Yeah, it is important to mention though that following what
609
00:33:51.279 --> 00:33:54.759
happened with left PAT that specifically can no longer happen
610
00:33:54.839 --> 00:33:55.400
with NPM.
611
00:33:56.559 --> 00:33:56.759
Yeah.
612
00:33:56.880 --> 00:33:59.279
But I mean I can also see, you know, because
613
00:33:59.279 --> 00:34:01.240
you guys have talked to about you know, you hand
614
00:34:01.319 --> 00:34:04.000
it off to a new maintainer or you know, somebody
615
00:34:04.160 --> 00:34:06.720
otherwise takes it over. But I could see somebody just
616
00:34:06.839 --> 00:34:10.599
being tired and you know, they know they have a
617
00:34:10.679 --> 00:34:12.840
problem in their package, and they know they want it fixed,
618
00:34:12.840 --> 00:34:14.719
and they get a PR that looks like it solves it,
619
00:34:15.119 --> 00:34:18.119
and it's got something problematic in it. I mean, you know,
620
00:34:18.400 --> 00:34:20.079
just that easy, you've got something in there that you
621
00:34:20.119 --> 00:34:20.480
don't want.
622
00:34:22.039 --> 00:34:22.239
Yeah.
623
00:34:22.239 --> 00:34:25.719
I think back to Dan's comment, like the I think
624
00:34:25.760 --> 00:34:28.559
that this has been a challenge or a feature of
625
00:34:28.719 --> 00:34:32.079
the NOES ecosystem for quite a long time. So things
626
00:34:32.159 --> 00:34:34.320
have improved, Like you know, the MPM you can no
627
00:34:34.440 --> 00:34:37.239
longer delete things, and so a lot of that learning
628
00:34:37.280 --> 00:34:40.719
has actually helped to improve the ecosystem over time. That
629
00:34:40.920 --> 00:34:44.280
other sort of language ecosystems may be relearning some of
630
00:34:44.360 --> 00:34:45.559
those lessons along the way.
631
00:34:47.360 --> 00:34:51.400
So beyond sort of being aware, right, hey, there's an announcement.
632
00:34:51.559 --> 00:34:54.320
This package where is going to cause you this problem? Right,
633
00:34:54.400 --> 00:34:56.360
it's got you know, somebody put a back door in it,
634
00:34:56.679 --> 00:34:59.199
or hey we discovered a zero day, Right, it doesn't
635
00:34:59.199 --> 00:35:02.559
even have to be that farious, right, you know, the
636
00:35:02.679 --> 00:35:05.559
best practice has changed and they haven't kept up with it, right,
637
00:35:05.679 --> 00:35:08.079
and so you know you just need to update it
638
00:35:08.199 --> 00:35:11.519
or whatever. Beyond that, I mean, I know there's like
639
00:35:11.719 --> 00:35:14.920
NPM audit, but I kind of have to just run
640
00:35:15.000 --> 00:35:17.360
that on my machine when I'm running stuff. And you know,
641
00:35:17.519 --> 00:35:20.719
sometimes I see the notification, sometimes I don't. But are
642
00:35:20.960 --> 00:35:24.039
there are there tools that while I'm working, are going
643
00:35:24.119 --> 00:35:25.960
to tell me, hey, you have a problem, like I
644
00:35:26.039 --> 00:35:28.440
may not have seen the Twitter post or I may
645
00:35:28.519 --> 00:35:32.079
not have seen the blog post or the announcement or whatever.
646
00:35:32.440 --> 00:35:33.960
That's going to help me stay up on.
647
00:35:36.639 --> 00:35:38.360
Depend is the first.
648
00:35:38.159 --> 00:35:41.519
One, right, the first one you should be looking at,
649
00:35:43.920 --> 00:35:47.800
and it's going to automatically unless you say, but you shouldn't.
650
00:35:48.280 --> 00:35:50.360
I don't think that's something you should do.
651
00:35:52.079 --> 00:35:56.519
And I've that's when I've also become been becoming a
652
00:35:56.599 --> 00:36:04.280
big fan of the socket stuff, the new process company.
653
00:36:05.719 --> 00:36:06.000
Soccer.
654
00:36:06.599 --> 00:36:09.920
I think, yeah, we had them on I'll find the
655
00:36:10.000 --> 00:36:12.559
episode number and we can put it out there.
656
00:36:13.920 --> 00:36:14.119
Yeah.
657
00:36:14.119 --> 00:36:16.400
I think the first part that Italian mentioned is just
658
00:36:16.679 --> 00:36:19.000
keeping up to date, and there's tools that will basically
659
00:36:19.519 --> 00:36:21.480
like those keep you help you keep up to date.
660
00:36:21.880 --> 00:36:24.320
And then there's other tools like the socket one or
661
00:36:24.599 --> 00:36:27.760
or snack who helped look more specifically.
662
00:36:27.320 --> 00:36:27.880
At well.
663
00:36:30.880 --> 00:36:36.239
Mike is not true, depend on also recent discounts for cvs. Okay, yes,
664
00:36:36.440 --> 00:36:42.039
so g tab will if will push if attacks that
665
00:36:42.079 --> 00:36:45.440
there was a vulnerability it. Whenever you push commits to
666
00:36:45.559 --> 00:36:47.920
the report, it will show you that there is there's
667
00:36:48.000 --> 00:36:49.719
been security problems.
668
00:36:50.119 --> 00:36:53.679
Okay, to know fantastic.
669
00:36:54.280 --> 00:36:54.440
You know.
670
00:36:55.800 --> 00:36:58.880
The important part is that it just works. Okay, you
671
00:36:58.960 --> 00:37:02.480
don't you have to think you just detects it automatic.
672
00:37:02.519 --> 00:37:05.119
You just need to use get up. Well if you're
673
00:37:05.280 --> 00:37:08.519
if you're a developer, you're not developing guitub well you know, okay.
674
00:37:09.199 --> 00:37:12.400
I think you have to build a habit of not
675
00:37:12.559 --> 00:37:15.000
ignoring it. I think a lot of folks you know,
676
00:37:15.320 --> 00:37:18.239
you know, turned on, they're like, okay, it's there, I'm
677
00:37:18.280 --> 00:37:20.679
not you know, and they just don't act on it
678
00:37:20.679 --> 00:37:23.519
at all. So I think there, Yes, it can require
679
00:37:23.599 --> 00:37:25.760
building a new habit.
680
00:37:26.880 --> 00:37:29.559
Yeah, I guess that comes with a lot of stuff.
681
00:37:31.920 --> 00:37:37.280
We know a lot of stuff. Yeah, go ahead.
682
00:37:39.679 --> 00:37:42.440
Back because the CBS are not that great, right, so
683
00:37:43.480 --> 00:37:46.719
you can get a lot of noise we aren't issues,
684
00:37:46.760 --> 00:37:49.599
and that that sort of unfortunately reduces the benefits.
685
00:37:49.960 --> 00:37:54.440
That looks people people ignore medical conditions, like what do
686
00:37:54.519 --> 00:37:56.920
you expect? You know, people like to ignore things.
687
00:37:58.119 --> 00:37:59.679
My car has been complaining that it needs and all
688
00:37:59.760 --> 00:38:01.519
change the past month and I haven't.
689
00:38:01.360 --> 00:38:01.719
Done it yet.
690
00:38:01.800 --> 00:38:12.559
So yeah, hm, anything else you want to look. But
691
00:38:13.199 --> 00:38:19.119
to be fair, people like use MP stuff on NPM
692
00:38:19.239 --> 00:38:22.440
because they want to reduce their their their workload and
693
00:38:22.679 --> 00:38:27.280
and they don't consider the the load that they're assuming
694
00:38:27.440 --> 00:38:30.960
when they do that, and they are sometimes resentful even
695
00:38:31.039 --> 00:38:34.199
of it. So it is what it is. But yeah, definitely,
696
00:38:34.719 --> 00:38:37.360
if you're going to be using packages, you need to
697
00:38:37.480 --> 00:38:40.679
assume responsibility for the packages that you're using.
698
00:38:41.519 --> 00:38:43.159
And I'll just say, you know, it's not just the
699
00:38:43.199 --> 00:38:45.320
people get resentful of it. You know, some people look
700
00:38:45.360 --> 00:38:47.639
at what's published on NPM and they're saying, hey, you
701
00:38:47.719 --> 00:38:50.480
gave me this thing for free. Cool, You're now obligated
702
00:38:50.519 --> 00:38:53.639
to support me forever and answer every question I have advancement.
703
00:38:54.079 --> 00:38:56.360
So no, there is no such thing as enclinement here.
704
00:38:57.639 --> 00:39:00.760
If you if you're using a package, if it doesn't
705
00:39:00.800 --> 00:39:03.360
work for you, help me, don't demand that I do
706
00:39:03.440 --> 00:39:04.280
it for you for free.
707
00:39:05.480 --> 00:39:08.599
I just want to say that anybody who's listening to
708
00:39:08.760 --> 00:39:12.199
this podcast and rather than watching it, you're losing half
709
00:39:12.280 --> 00:39:14.599
of Mattel's.
710
00:39:18.920 --> 00:39:23.760
I call them vampires. Okay, they have the vampires of
711
00:39:23.880 --> 00:39:27.920
open source. Okay, and you know your vampires can be
712
00:39:28.719 --> 00:39:30.719
you know, you need to put out garlic, and you
713
00:39:30.840 --> 00:39:33.159
can stab them in the heart with a piece of wound, right,
714
00:39:33.960 --> 00:39:38.559
so that's what you do with them. Okay, So basically
715
00:39:38.719 --> 00:39:41.480
that isn't I have zero tolerance for vampires in any
716
00:39:41.519 --> 00:39:42.159
of my records.
717
00:39:42.679 --> 00:39:45.719
Okay, Yeah. The problem really is that Racula was that
718
00:39:45.920 --> 00:39:49.000
one vampire and there with the whole world full of humans,
719
00:39:49.079 --> 00:39:51.599
and here in the open source community it's the reverse
720
00:39:51.679 --> 00:39:54.320
the majority.
721
00:39:55.000 --> 00:39:57.559
Fine, but I have zero tolerance like the one that
722
00:39:57.679 --> 00:40:00.840
they get really toxic about it when you tell you no,
723
00:40:01.039 --> 00:40:01.599
it's your bug.
724
00:40:01.639 --> 00:40:02.360
It's not my bug.
725
00:40:03.199 --> 00:40:08.039
Okay, it's your problem. It's your problem that production, Your
726
00:40:08.039 --> 00:40:10.239
production is broken, not mine.
727
00:40:11.079 --> 00:40:12.639
Yes, but the train it's.
728
00:40:12.559 --> 00:40:13.840
A cultural problem.
729
00:40:14.079 --> 00:40:17.199
I don't just think it's a cultural problematatic system level
730
00:40:17.760 --> 00:40:20.920
like we were discussing earlier that developers are not used
731
00:40:20.960 --> 00:40:26.679
to sharing and sharing the responsibility and the probably we need.
732
00:40:27.280 --> 00:40:32.400
Yeah, it's a cultural problem that the majority of humanity
733
00:40:32.480 --> 00:40:33.119
are whiners.
734
00:40:34.920 --> 00:40:37.239
All right, I'm gonna I'm gonna derail us back to
735
00:40:37.360 --> 00:40:40.800
our note pillars here and and we're going to move
736
00:40:40.840 --> 00:40:44.400
along to avoid global variables can figs or singletons.
737
00:40:46.079 --> 00:40:50.679
Yes, this is a big one. This catches a lot
738
00:40:50.679 --> 00:40:53.119
of people. And it's not just no I understanding like
739
00:40:53.199 --> 00:40:55.679
you know, for for for workers a completely different environment.
740
00:40:56.280 --> 00:40:57.519
It's programming.
741
00:41:00.559 --> 00:41:01.960
It's a global problem.
742
00:41:04.159 --> 00:41:06.400
Because global you know, individual like iOS tied to an
743
00:41:06.400 --> 00:41:11.079
individual request and historical related to requests from another request,
744
00:41:11.159 --> 00:41:14.360
and it's gonna work. So like here we may explicit
745
00:41:14.519 --> 00:41:16.639
like don't do this, but yeah, you know we run
746
00:41:16.719 --> 00:41:20.239
into this all damn time that people just trip themselves up.
747
00:41:22.320 --> 00:41:27.360
How how is NOE different than than general development? Like
748
00:41:27.760 --> 00:41:30.960
I like, I've been writing code for I don't know
749
00:41:31.440 --> 00:41:35.440
thirty years. I remember when I started feeling people were
750
00:41:35.480 --> 00:41:39.280
telling me my teachers, my my mentors, whatever. Don't use
751
00:41:39.360 --> 00:41:43.480
globals like what's what's new node? That kind of changes
752
00:41:43.599 --> 00:41:44.440
the dynamic here.
753
00:41:45.239 --> 00:41:51.840
A significant portion of the developers that arrive in node Okay,
754
00:41:54.480 --> 00:41:59.679
it comes from a front end background okay, and or
755
00:41:59.719 --> 00:42:03.199
reach in aly historically okay, let's put it in the
756
00:42:03.400 --> 00:42:06.800
jquity days. Okay, all the state was handled in a
757
00:42:06.880 --> 00:42:07.599
global fashion.
758
00:42:08.840 --> 00:42:12.679
That don't and yeah they don't. That that comes well
759
00:42:12.760 --> 00:42:13.239
to the don't.
760
00:42:13.360 --> 00:42:13.679
Okay.
761
00:42:14.159 --> 00:42:17.400
The problem is it's one user, okay, one one browser,
762
00:42:17.519 --> 00:42:18.880
one user, one state.
763
00:42:19.559 --> 00:42:26.079
Okay, to some extent, it's super simple, Okay, makes total sense. Okay.
764
00:42:28.039 --> 00:42:29.760
Not JS is not a browser okay.
765
00:42:30.440 --> 00:42:32.719
One not JS process can handle more than one state
766
00:42:33.159 --> 00:42:35.400
with one exception, if you deploy on a w S
767
00:42:35.480 --> 00:42:38.760
lambda or so that you or or workers where one
768
00:42:38.880 --> 00:42:42.559
request is one state and one user. So you could
769
00:42:42.719 --> 00:42:45.400
potentially achieat that. And that's what you know, those kinds
770
00:42:45.400 --> 00:42:48.760
of ens gives it to you because in fact, Javaski
771
00:42:48.840 --> 00:42:51.280
developer don't seem to be able to understand this principle.
772
00:42:52.239 --> 00:42:54.639
But if it's not the jobs developers. So when we
773
00:42:54.719 --> 00:43:00.199
see people, no matter what language you're in, mistakes, yeah,
774
00:43:01.320 --> 00:43:03.639
and I don't think there's anything you need to know.
775
00:43:04.519 --> 00:43:07.440
It's probably not. But anyway, the.
776
00:43:10.000 --> 00:43:12.719
The a lot of a lot of people also a
777
00:43:12.840 --> 00:43:16.639
part of them they never know anything different.
778
00:43:16.800 --> 00:43:19.199
They come from a diverse byground. They didn't study any
779
00:43:19.199 --> 00:43:20.400
of this stuff. Okay.
780
00:43:21.159 --> 00:43:23.760
The other part is a group of people that we
781
00:43:23.880 --> 00:43:27.760
used to do all software engineering and do a lot
782
00:43:27.880 --> 00:43:30.880
of interface and a lot of things come from a
783
00:43:31.000 --> 00:43:33.920
javaor dot m background that when they swop to know
784
00:43:34.119 --> 00:43:36.639
they throw package at all of that and throw it away.
785
00:43:37.159 --> 00:43:39.360
And when you show them how you can you know,
786
00:43:39.719 --> 00:43:42.639
you can actually use this pattern to build a system
787
00:43:42.760 --> 00:43:45.960
that is modular. And oh so I can do all
788
00:43:46.000 --> 00:43:48.599
the things that I was used to do in Java
789
00:43:48.679 --> 00:43:51.559
or dot nety No, yes you can, and they're just
790
00:43:52.639 --> 00:43:53.280
I didn't know.
791
00:43:56.880 --> 00:44:00.599
So so my question is like, what exactly is a
792
00:44:00.639 --> 00:44:01.239
solution here?
793
00:44:01.320 --> 00:44:01.440
Right?
794
00:44:01.599 --> 00:44:01.719
Is it?
795
00:44:02.559 --> 00:44:05.320
Is it like importing environment variables is.
796
00:44:07.719 --> 00:44:07.880
Right?
797
00:44:08.559 --> 00:44:10.480
But I mean I mean some things you do have
798
00:44:10.599 --> 00:44:12.840
to bring in through configus, right, I mean they are
799
00:44:13.039 --> 00:44:16.639
essentially going to be globally available. Yeah, I strike keys
800
00:44:16.719 --> 00:44:19.440
or API keys or you know you set node and
801
00:44:19.840 --> 00:44:21.800
to production and right, and that.
802
00:44:21.960 --> 00:44:25.559
Kind of changes the game. So so stuff like that, Yeah,
803
00:44:26.039 --> 00:44:30.480
what big one Pensy intection is the big one for modules.
804
00:44:30.840 --> 00:44:32.679
You know, like a lot of some modules and stuff.
805
00:44:32.719 --> 00:44:34.519
You know, when you go to require something, you get
806
00:44:34.559 --> 00:44:37.039
back some single thing rather than that is your return
807
00:44:37.159 --> 00:44:39.800
a factory that you know that you can use to
808
00:44:39.880 --> 00:44:43.719
create your state management. So I think I think there
809
00:44:43.760 --> 00:44:45.840
are a number of things. Some of these are discussed
810
00:44:45.880 --> 00:44:51.079
in the in the blog post and tailor about them,
811
00:44:51.199 --> 00:44:54.400
but the actually is the big one. You want to
812
00:44:54.480 --> 00:44:56.920
actually say, you know, for this particular bit of code,
813
00:44:57.280 --> 00:44:59.199
this is what I want to make available to that,
814
00:44:59.599 --> 00:45:01.880
not just have it generally available for everyone to access.
815
00:45:05.239 --> 00:45:10.360
Also, you know, if if all your objects are singletones,
816
00:45:10.480 --> 00:45:15.440
it's not object oriented programming. And all the data within
817
00:45:15.559 --> 00:45:18.119
a global single tone, all the fields within a global
818
00:45:18.199 --> 00:45:20.920
single tone, certainly all the public properties within a global
819
00:45:20.960 --> 00:45:26.079
signal tones are affectually all globals. So if I'm saying no,
820
00:45:26.199 --> 00:45:28.960
I don't have a hundred globals, I have just one global,
821
00:45:29.119 --> 00:45:32.400
but it has one hundred public properties, then you've got
822
00:45:32.440 --> 00:45:33.280
one hundred globals.
823
00:45:34.199 --> 00:45:37.320
Yes, And in.
824
00:45:37.360 --> 00:45:42.360
Genera where and in general beware also mutable state, it's
825
00:45:42.400 --> 00:45:43.239
certainly global.
826
00:45:43.320 --> 00:45:44.079
Mutable states.
827
00:45:45.079 --> 00:45:47.559
Avoid it all costs if you can. And this is
828
00:45:47.599 --> 00:45:50.880
the problem things like you know process do you know whatever?
829
00:45:51.079 --> 00:45:54.280
In node it's a global, it's a global. A lot
830
00:45:54.320 --> 00:45:57.559
of folks will find it are using that for feature detection. Right,
831
00:45:57.639 --> 00:46:01.519
they'll say, hey, if process exists and obviously i'm running
832
00:46:01.519 --> 00:46:04.199
a note, Well no, because process now exists and you know,
833
00:46:04.320 --> 00:46:07.519
and it just and find it exists in workers. Okay,
834
00:46:07.559 --> 00:46:09.599
Well instead of using process, let me look at you know,
835
00:46:09.719 --> 00:46:13.320
process dot whatever property. Well, if the run times start,
836
00:46:13.679 --> 00:46:17.239
these other run times start. Also adding that relying on
837
00:46:17.320 --> 00:46:20.119
these globals, just the existence of these globals, just to
838
00:46:20.440 --> 00:46:23.119
depend on where you're at, everything still breaks. You're just
839
00:46:23.239 --> 00:46:26.199
shifting the problem. It's going to break somewhere else. So
840
00:46:26.239 --> 00:46:28.000
there's lots of problems with these, with these ideas of
841
00:46:28.079 --> 00:46:31.760
having these globals. And it's not just whether you're storing state,
842
00:46:31.840 --> 00:46:34.920
it's but decisions are you making based on existence.
843
00:46:34.519 --> 00:46:37.400
Of the global it's us their agent strings all over again.
844
00:46:37.840 --> 00:46:41.760
Yeah, only maybe even worse because there's so many different
845
00:46:41.760 --> 00:46:42.320
ways of doing it.
846
00:46:46.280 --> 00:46:51.880
Oh man, So the way the worst pattern here is
847
00:46:52.039 --> 00:46:56.400
those applications that then they are fully configurable US using
848
00:46:56.519 --> 00:47:00.599
environment variables. Okay, and the environment variables are pride into
849
00:47:00.679 --> 00:47:04.320
a thousand different files, so you don't know what are
850
00:47:04.360 --> 00:47:07.079
the confusion, and each one has a different default, and
851
00:47:07.199 --> 00:47:12.199
you don't know what each of anyone controls and the
852
00:47:12.320 --> 00:47:14.719
only way to know is just grab the full codebase.
853
00:47:15.719 --> 00:47:16.119
Mm hmm.
854
00:47:16.480 --> 00:47:20.880
It's a nightmare, okay, and I don't you know there's
855
00:47:20.880 --> 00:47:21.360
a nightmare.
856
00:47:21.400 --> 00:47:24.719
So you want to take when you're your application starts,
857
00:47:24.760 --> 00:47:26.280
you want to take your environment variable.
858
00:47:26.360 --> 00:47:27.039
So you're conflict.
859
00:47:27.119 --> 00:47:30.119
You pass the thing you'd get the values, and then
860
00:47:30.159 --> 00:47:32.679
you pass it down each single application.
861
00:47:34.800 --> 00:47:38.119
Now you've got a recommendation especially sorry.
862
00:47:38.800 --> 00:47:42.719
Especially, do not use schools if you're going to publish,
863
00:47:42.880 --> 00:47:46.159
like we were suggesting earlier, for everyone to consume.
864
00:47:47.159 --> 00:47:49.199
Yes, let's try.
865
00:47:51.320 --> 00:47:55.440
Yeah, you're just spreading your bad habits around and impacting everybody.
866
00:47:56.840 --> 00:47:59.400
I would say that module, you know, any dependencies that
867
00:47:59.400 --> 00:48:02.320
you're bringing in, do not touch globals. I mean, if
868
00:48:02.320 --> 00:48:06.440
you're consuming globals like global APIs like URL, fine, do
869
00:48:06.679 --> 00:48:09.159
not mu take global state from the module. Period.
870
00:48:13.199 --> 00:48:16.679
So you kind of said that there might be configures
871
00:48:16.840 --> 00:48:19.719
throughout your app. That is the issue that you have
872
00:48:19.840 --> 00:48:22.639
your configurations that may be spread across different places where
873
00:48:22.639 --> 00:48:26.760
you get them from. Or is the issue that you
874
00:48:26.920 --> 00:48:28.480
have a lot of places where it changes the way
875
00:48:28.480 --> 00:48:29.119
your code works.
876
00:48:32.119 --> 00:48:37.960
We're both I think both Socially, you manage sort to interrupt,
877
00:48:38.079 --> 00:48:41.199
but I'm really am trying to to understand, James, where
878
00:48:41.199 --> 00:48:43.960
you get what you're getting at? If I've got like
879
00:48:44.440 --> 00:48:48.719
what I like effectively global configuration, Like there are certain
880
00:48:49.519 --> 00:48:53.400
configuration flags that impact the behavior of my entire application.
881
00:48:54.320 --> 00:48:59.159
Would you rather have one module responsible for all that
882
00:48:59.440 --> 00:49:03.519
global figuration and everybody gets injected with it, or would
883
00:49:03.559 --> 00:49:07.119
you rather that each model is just responsible for the
884
00:49:07.239 --> 00:49:11.440
configuration that directly pertains to what that module does, Like,
885
00:49:11.599 --> 00:49:13.280
what would be your approach here?
886
00:49:14.639 --> 00:49:18.440
My approach would be that the application should collect whatever
887
00:49:18.599 --> 00:49:24.039
configuration is available and inject that into the modules. So
888
00:49:24.159 --> 00:49:27.559
the module itself should not be looking at processing. It
889
00:49:27.599 --> 00:49:30.360
should be relying on what arguments are passed to it
890
00:49:30.719 --> 00:49:31.519
from the application.
891
00:49:34.039 --> 00:49:37.679
So I'm just going to ask, because if there are
892
00:49:37.679 --> 00:49:40.519
a lot of places where your configuration can change the
893
00:49:40.599 --> 00:49:45.599
way that the code flows through your application, it almost
894
00:49:45.719 --> 00:49:48.639
sounds like feature flags, And I know a lot of
895
00:49:48.679 --> 00:49:52.159
people use those. So are you arguing against feature flags
896
00:49:52.239 --> 00:49:52.880
or do you see those.
897
00:49:52.760 --> 00:49:55.639
Differently the same different I think it comes down to
898
00:49:55.760 --> 00:49:57.039
how they're injected into the module.
899
00:49:57.320 --> 00:49:57.599
Okay.
900
00:50:00.119 --> 00:50:05.159
The problem is that sometimes it can lead to having
901
00:50:05.280 --> 00:50:11.039
to pass things through a lot of function calls, like
902
00:50:11.239 --> 00:50:15.400
You're trying to get a flag way down, and now
903
00:50:15.480 --> 00:50:18.599
you've got to pass it through a lot of you know,
904
00:50:18.760 --> 00:50:20.760
a colls B, colls C. Now I have to add
905
00:50:20.800 --> 00:50:23.239
the parameter to all of these functions which really don't
906
00:50:23.320 --> 00:50:25.239
care about this feature flag just to get it all
907
00:50:25.280 --> 00:50:27.320
the way down. So I'm saying, hey, I'm going to
908
00:50:27.400 --> 00:50:30.480
clean the code by just making it global. Uh, and
909
00:50:30.639 --> 00:50:34.199
now I can access it from from wherever I need to.
910
00:50:34.239 --> 00:50:36.480
It's kind of like the problem that React tries to
911
00:50:36.559 --> 00:50:38.039
solve with context in a way.
912
00:50:38.519 --> 00:50:40.480
Yeah, well, I mean we have the same Like that's
913
00:50:40.519 --> 00:50:43.920
also where acinc Global storage kind of kind of comes
914
00:50:43.920 --> 00:50:46.280
into play, where you can use acent local storage to
915
00:50:46.360 --> 00:50:49.400
avoid that, you know, having to pass it through each layer,
916
00:50:50.719 --> 00:50:52.800
but you still have to make the acinc local storage
917
00:50:52.840 --> 00:50:56.719
variable itself available, you know, to the various places that
918
00:50:56.760 --> 00:50:59.960
are So how do you do that? It's it's it's
919
00:51:00.199 --> 00:51:03.960
not a problem free approach. It has its own challenges.
920
00:51:04.079 --> 00:51:06.840
Whether you have to pass this thing down or make
921
00:51:06.960 --> 00:51:09.800
some you know, make some things global and other things not.
922
00:51:10.159 --> 00:51:11.960
You have to be very intentional and plant it out
923
00:51:12.039 --> 00:51:16.679
very carefully. But as a whole overall, right, relying on
924
00:51:16.760 --> 00:51:20.480
dependency injection is going to be far better a pattern
925
00:51:20.920 --> 00:51:23.840
in a far more maintainable pattern free application than allowing
926
00:51:24.000 --> 00:51:26.920
modules to just arbitrarily access and modified level state.
927
00:51:27.719 --> 00:51:31.159
Yeah for sure, then you need to somebody modified my
928
00:51:31.280 --> 00:51:32.840
state and I have no idea who.
929
00:51:34.559 --> 00:51:35.000
My cheese?
930
00:51:35.760 --> 00:51:38.280
Yeah, yeah, I do want Before we move on to
931
00:51:38.400 --> 00:51:41.280
the next one, you kind of made an interesting assertion
932
00:51:41.639 --> 00:51:44.760
in this pillar which is always set no d V
933
00:51:44.920 --> 00:51:49.119
to production. Can you elaborate why? What's you know? Why?
934
00:51:49.360 --> 00:51:50.000
And why is it?
935
00:51:50.719 --> 00:51:50.760
Like?
936
00:51:51.639 --> 00:51:54.320
This is an old battle, This is an old battle
937
00:51:54.400 --> 00:52:00.280
of mine? Okay. Now all of these comes from one problem. Okay,
938
00:52:00.440 --> 00:52:01.199
for developers.
939
00:52:02.119 --> 00:52:06.960
If I ask ten developers what the development environment is,
940
00:52:09.360 --> 00:52:17.400
they tell Mike Black. If if you ask ten ops people,
941
00:52:19.039 --> 00:52:22.639
they say, oh, it's some service running somewhere where the
942
00:52:22.719 --> 00:52:23.800
developer test that code.
943
00:52:23.960 --> 00:52:27.760
Okay, that's the source of the problem. Okay. They we
944
00:52:27.880 --> 00:52:31.599
use the same the same terms for two different things. Okay.
945
00:52:32.840 --> 00:52:38.480
Now this means that somebody, somebody bright mind started to
946
00:52:38.519 --> 00:52:47.039
put published a module called muh config in MPM and
947
00:52:47.760 --> 00:52:51.480
then that loads you the now the score environment variable
948
00:52:52.239 --> 00:52:57.119
for loading up the conflict file. However, some libraries in
949
00:52:58.039 --> 00:53:02.840
like Express for example, React, than others changes their behavior
950
00:53:02.920 --> 00:53:04.079
based on the northern.
951
00:53:03.840 --> 00:53:06.280
The score en of environment variable being set to production.
952
00:53:07.360 --> 00:53:10.800
Now, if you're loading the conflict for your service environment
953
00:53:10.880 --> 00:53:14.719
based on that variable, you are essentially your staging environment
954
00:53:14.880 --> 00:53:16.320
or anything that is not production.
955
00:53:17.840 --> 00:53:21.280
Absolutely you will have massive issues.
956
00:53:21.719 --> 00:53:25.199
And that confic module is downloaded so many times, okay,
957
00:53:25.719 --> 00:53:27.840
which is unbelievable.
958
00:53:28.679 --> 00:53:31.800
And frankly, it should not be used. Okay.
959
00:53:32.639 --> 00:53:36.000
I'm very happy to stand here making these recommendation. So
960
00:53:36.079 --> 00:53:37.760
don't use that module if possible.
961
00:53:37.840 --> 00:53:38.119
Okay.
962
00:53:38.320 --> 00:53:41.880
So when you say always you mean in development as well?
963
00:53:42.679 --> 00:53:44.880
Yeah, no, I mean in development is the only moment
964
00:53:44.920 --> 00:53:47.360
where you don't set it very often. But whenever you
965
00:53:47.400 --> 00:53:49.519
want to do any testing that is relevant to what
966
00:53:49.760 --> 00:53:52.880
production looks like, you need to set it to production, even.
967
00:53:52.679 --> 00:53:53.960
If it's a staging environment.
968
00:53:54.639 --> 00:53:57.599
So oh wait a three, I am using something that
969
00:53:58.079 --> 00:54:00.840
controls my environment. That's called an environment. I said it
970
00:54:00.880 --> 00:54:05.320
to production even if it's a staging environment. Yes, this
971
00:54:05.719 --> 00:54:09.880
was such a bad term to begin with, okay, and
972
00:54:10.039 --> 00:54:13.920
such a massive headache pain that unfortunately.
973
00:54:14.960 --> 00:54:19.280
We're stuck with. So and I'm sorry, like, please.
974
00:54:19.079 --> 00:54:23.480
Don't use again, don't use, don't cload the configuration based
975
00:54:23.519 --> 00:54:25.559
on that valuable because it's a bad idea.
976
00:54:26.000 --> 00:54:28.400
I've had that bite me squarely in the rear end before.
977
00:54:28.519 --> 00:54:31.760
So all right, just in the interest of time, we're
978
00:54:31.760 --> 00:54:33.599
going to move to the next one. It's handled errors
979
00:54:33.639 --> 00:54:38.000
and provide meaningful logs. I'd stand up and screen yes,
980
00:54:39.719 --> 00:54:41.920
because I had this one hurt me too. But where
981
00:54:42.000 --> 00:54:42.840
where you guys.
982
00:54:50.840 --> 00:54:51.239
For me that?
983
00:54:51.280 --> 00:54:53.239
I mean just the title of this one is is
984
00:54:54.159 --> 00:54:58.559
I think? So it's like, that's that's good enough the
985
00:54:58.679 --> 00:55:03.360
provide meaningful logs. I think I think this is not
986
00:55:03.480 --> 00:55:05.599
specific to note. You know, we've all had examples of
987
00:55:05.679 --> 00:55:09.239
run times where it's just like, hey, error happened. Cool?
988
00:55:09.559 --> 00:55:10.960
Where how?
989
00:55:11.280 --> 00:55:11.920
What? What? What?
990
00:55:12.079 --> 00:55:16.079
Actually is that take the time? People have to understand
991
00:55:16.119 --> 00:55:19.400
that the errors that their their system produces is part
992
00:55:19.440 --> 00:55:22.079
of the contract, part of the a P. I need
993
00:55:22.159 --> 00:55:25.800
to be as intentional about the design of errors as
994
00:55:25.800 --> 00:55:29.159
they are about the the syntax or the or the
995
00:55:29.599 --> 00:55:32.800
signature of the functions that the calling they're exposing errors
996
00:55:32.880 --> 00:55:34.639
are a PI I designed them accordingly.
997
00:55:38.519 --> 00:55:40.800
If your server crashes in the middle of the night
998
00:55:41.800 --> 00:55:44.960
and you're told about it in the morning after it's
999
00:55:45.000 --> 00:55:48.119
been restarted, will you able to you will you be
1000
00:55:48.159 --> 00:55:51.360
able to do anything about it. If your answer is no,
1001
00:55:51.679 --> 00:55:52.679
then you've got the problem.
1002
00:55:56.079 --> 00:55:58.440
Yeah, it's.
1003
00:55:59.800 --> 00:56:02.400
It's it's so rough when you yeah, you have this issue.
1004
00:56:03.000 --> 00:56:05.159
And then essentially you have to go keep going back
1005
00:56:05.239 --> 00:56:07.599
and modifying what gets logged to try and figure it out,
1006
00:56:07.639 --> 00:56:11.320
because you can't duplicate it in development and you don't
1007
00:56:11.320 --> 00:56:13.239
have enough information in your logs to figure out how
1008
00:56:13.280 --> 00:56:17.639
it happened in production. And sometimes there are going to
1009
00:56:17.679 --> 00:56:19.639
be bugs that way, no matter how good at this
1010
00:56:19.760 --> 00:56:23.920
you are. But for heaven's sake, you know, if you
1011
00:56:24.159 --> 00:56:27.800
if you know that something unexpected might happen there, you
1012
00:56:27.920 --> 00:56:30.760
know you can set yourself up for success by just
1013
00:56:30.840 --> 00:56:34.440
being aware and then having a good API and a
1014
00:56:34.519 --> 00:56:36.440
good approach to logging errors.
1015
00:56:36.880 --> 00:56:40.960
Look, you might not have the proper, the sufficient logs
1016
00:56:41.000 --> 00:56:44.559
the first time around, because you know, obviously there's a
1017
00:56:44.679 --> 00:56:46.880
limit on how much you can log and how and
1018
00:56:47.000 --> 00:56:50.360
you don't want to be, you know, excessively verbose, and
1019
00:56:50.400 --> 00:56:56.039
they're usually also costs associated with logging. But you know,
1020
00:56:56.119 --> 00:56:58.079
at the very least you want to be able to
1021
00:56:58.280 --> 00:57:01.360
change log level on some so that the next time
1022
00:57:01.440 --> 00:57:04.639
it crashes at least then you'll you'll you'll have sufficient
1023
00:57:04.760 --> 00:57:08.559
context if you now have to start adding new logs.
1024
00:57:10.360 --> 00:57:11.400
It's going to be a pain.
1025
00:57:12.039 --> 00:57:15.360
M oh yeah, definitely. In this In the in the
1026
00:57:15.440 --> 00:57:18.920
post it there's a section provide meaningful logs. Again, it
1027
00:57:19.000 --> 00:57:22.320
goes back to being intentional, treating this as part of
1028
00:57:22.400 --> 00:57:25.920
your API, in a part of your contract. It's possible
1029
00:57:26.039 --> 00:57:29.480
to go way overboard logging completely useless information that completely
1030
00:57:29.559 --> 00:57:33.119
drowns out the useful bits of information. So it's like
1031
00:57:33.760 --> 00:57:35.679
it's as much of a decision of what not to
1032
00:57:35.840 --> 00:57:38.320
log as it is what to log and where and where.
1033
00:57:40.639 --> 00:57:42.519
You know, there's a whole science to it, but it
1034
00:57:42.880 --> 00:57:45.280
takes time to get right. But you have to put
1035
00:57:45.360 --> 00:57:47.679
a lot under this point, and most people don't.
1036
00:57:48.559 --> 00:57:51.480
And you need to think about what logs at what levels,
1037
00:57:51.639 --> 00:57:56.239
and can you control levels like globally or for module
1038
00:57:56.360 --> 00:57:59.360
and stuff like that, or at least per service and
1039
00:57:59.440 --> 00:57:59.880
stuff like.
1040
00:57:59.880 --> 00:58:03.519
That, and provide details, provide enough details that you can
1041
00:58:03.639 --> 00:58:07.840
filter out the noise that's not relevant to a particular investigation.
1042
00:58:09.599 --> 00:58:13.360
I was going to say, there are libraries that give
1043
00:58:13.400 --> 00:58:15.719
you kind of a default format to start from that
1044
00:58:15.840 --> 00:58:19.519
are typically better than the default logging deal that you
1045
00:58:19.639 --> 00:58:22.719
get from what you're beginning with. And so you know,
1046
00:58:22.840 --> 00:58:25.199
have a look at those, figure out what they're doing,
1047
00:58:25.400 --> 00:58:27.760
and then just just be intentional. From there, I may
1048
00:58:27.800 --> 00:58:28.639
also need to know this.
1049
00:58:31.119 --> 00:58:36.760
Yeah, if you're a developer tool developer, you also need
1050
00:58:36.840 --> 00:58:40.400
to make sure your logs are not two verbals that
1051
00:58:41.079 --> 00:58:44.000
go back to the developer with the right feedback and
1052
00:58:44.159 --> 00:58:47.599
not a lot of noise that is useless to.
1053
00:58:48.119 --> 00:58:50.199
Trouble shoot anything else.
1054
00:58:50.280 --> 00:58:53.400
On that one, I will say, talking about the cost
1055
00:58:53.440 --> 00:58:55.599
of logging, it's a it's a fairly old article at
1056
00:58:55.639 --> 00:58:59.440
this point, but when Mattel and Avemark Clemens and Supper
1057
00:58:59.639 --> 00:59:02.800
Working then started on Pinot, there's some research on the
1058
00:59:03.000 --> 00:59:06.360
cost of logging and performance cost of blogging that even
1059
00:59:06.400 --> 00:59:08.760
though the exact numbers and stuff may be different today
1060
00:59:08.800 --> 00:59:11.800
than what they were back then, it is still an excellent,
1061
00:59:12.079 --> 00:59:14.800
excellent read. Mattel, you can provide me with a link
1062
00:59:14.880 --> 00:59:16.239
to that. I don't have a handy, but.
1063
00:59:17.880 --> 00:59:21.360
Of course I can. It's very old, it's very old, but.
1064
00:59:21.400 --> 00:59:24.159
I consider it. I consider it kind of part of
1065
00:59:24.239 --> 00:59:28.320
the must read collection of stuff for understanding a lot
1066
00:59:28.360 --> 00:59:32.119
of this stuff. It really breaks down why there's the
1067
00:59:32.199 --> 00:59:34.719
cost of why you have to be intentional about this stuff.
1068
00:59:35.840 --> 00:59:41.079
It is so uh. And one more thing I see
1069
00:59:41.119 --> 00:59:45.960
in the article Mattel that you recommend the Pino as
1070
00:59:46.039 --> 00:59:47.719
a library to use for logging.
1071
00:59:48.480 --> 00:59:49.400
Yeah, well that's what.
1072
00:59:53.039 --> 00:59:56.840
They David myself wrote all those year backs, so that
1073
00:59:57.000 --> 01:00:00.800
logging was the major bottoneck of most more the applications,
1074
01:00:01.079 --> 01:00:05.920
which is incredible. Like you know, it's so the first
1075
01:00:05.960 --> 01:00:09.760
one was logging, okay, and the second one was was expressed.
1076
01:00:10.599 --> 01:00:16.559
So I created Pino and then I created Fastify okay.
1077
01:00:17.039 --> 01:00:21.400
So that that was my journey and the optimizing the ecosystem.
1078
01:00:22.000 --> 01:00:24.239
So I started getting one, then I move, I moved
1079
01:00:24.280 --> 01:00:28.800
from there, moved to the next one. Okay, done essentially,
1080
01:00:29.000 --> 01:00:31.639
And no, it's it's very problematic. Okay, there's a lot
1081
01:00:31.719 --> 01:00:35.039
of like clogging is very hard. It's a very hard topic. Okay,
1082
01:00:35.679 --> 01:00:39.000
either it's a big problem, is a big pain, or
1083
01:00:39.079 --> 01:00:42.159
it's absolutely not okay, if you have a certain scale,
1084
01:00:42.280 --> 01:00:42.920
is a massive pain.
1085
01:00:43.639 --> 01:00:48.599
Oh yeah, for sure. Like I I three the three
1086
01:00:48.719 --> 01:00:52.039
latest companies that I've worked, including the latest one size
1087
01:00:52.039 --> 01:00:54.440
and so I currently work I. You know, you you've
1088
01:00:54.480 --> 01:00:56.960
got the develops person coming up to you and saying,
1089
01:00:57.679 --> 01:01:01.559
why have we got a billion logs every day? Do
1090
01:01:01.679 --> 01:01:03.320
you really need all those logs.
1091
01:01:06.400 --> 01:01:11.360
Yeah, pretty much. But it's also it's actually it's actually
1092
01:01:11.519 --> 01:01:11.920
very hard.
1093
01:01:12.000 --> 01:01:15.239
It's a very hard problem to fix, okay, and to
1094
01:01:15.320 --> 01:01:18.119
be able to achieve the right level of granularity and everything.
1095
01:01:18.280 --> 01:01:22.960
So with Pino we have reached a very good I
1096
01:01:23.039 --> 01:01:25.320
think good balance. It works very well out of the
1097
01:01:25.360 --> 01:01:28.199
bobs with good defaults, okay. But it can also be
1098
01:01:28.400 --> 01:01:33.000
tuned down for your app to the exact what you need, okay.
1099
01:01:33.840 --> 01:01:36.159
And you know, it has very very you know, fine
1100
01:01:36.280 --> 01:01:40.880
grained configuration that you can put it in, and it's
1101
01:01:41.199 --> 01:01:43.559
very important that you do those things when once you
1102
01:01:43.639 --> 01:01:45.039
reach a certain level of production.
1103
01:01:46.519 --> 01:01:48.679
For me, though, you know, using the tool with one
1104
01:01:48.679 --> 01:01:51.920
thing and I would recommend, you know, absolutely hands down.
1105
01:01:52.000 --> 01:01:55.239
But for me, it mostly comes down to being aware
1106
01:01:55.280 --> 01:01:58.039
of what you're logging and where the costs are. If
1107
01:01:58.119 --> 01:02:01.400
what you're logging or a bunch of large objects areting
1108
01:02:01.440 --> 01:02:05.960
it Jason serialized, understand that there's a cost to Jason serialization, right,
1109
01:02:06.039 --> 01:02:08.440
and if you're sending these massive objects into this.
1110
01:02:08.519 --> 01:02:12.679
Thing, come on, marshaling. Marshaling is not free.
1111
01:02:15.280 --> 01:02:17.760
But you know, we end up with these with with
1112
01:02:17.920 --> 01:02:20.159
with this code. I've seen this time and time again
1113
01:02:20.400 --> 01:02:23.880
where you have the this this logging logic and like, hey,
1114
01:02:23.880 --> 01:02:26.280
we're following the best practice. We're logging on these levels.
1115
01:02:26.800 --> 01:02:29.360
Well okay, that level is not activated. Why are you
1116
01:02:29.440 --> 01:02:32.960
still constructing this massive object, you know, unconditionally passing it
1117
01:02:33.039 --> 01:02:34.760
off to their understand you know, when that has its
1118
01:02:34.800 --> 01:02:37.199
own costs, and you know, folks need to stop and
1119
01:02:37.280 --> 01:02:40.360
think about what they're looking and why and how not
1120
01:02:40.559 --> 01:02:43.559
just what tool they're using, and understand this stuff has.
1121
01:02:43.679 --> 01:02:45.679
That's a definitive cost.
1122
01:02:47.039 --> 01:02:50.199
I'm sometimes so analo on those things, but I guess
1123
01:02:50.280 --> 01:02:53.800
it's my mentality going back to the good old days
1124
01:02:53.880 --> 01:02:58.119
of C and C plus plus and stuff like that. Uh,
1125
01:02:59.679 --> 01:03:02.719
it's it really bugs me when I see something being
1126
01:03:02.840 --> 01:03:05.760
computed for no for absolutely no reason.
1127
01:03:07.000 --> 01:03:09.519
My brain sack faulted. When you said the good old
1128
01:03:09.599 --> 01:03:10.920
days with C and C plus plus.
1129
01:03:15.159 --> 01:03:18.760
Guys, I have to I have to drop off because
1130
01:03:18.840 --> 01:03:23.639
there are sirens here. So thank you.
1131
01:03:25.719 --> 01:03:33.119
All right, let's let's talk API specifications here real quick. So, yeah,
1132
01:03:33.159 --> 01:03:34.280
who wants to tackle this one?
1133
01:03:36.119 --> 01:03:36.320
Yeah?
1134
01:03:36.760 --> 01:03:40.039
I'm pretty opinionated on this, and mostly because of what
1135
01:03:40.320 --> 01:03:41.159
James just said.
1136
01:03:43.480 --> 01:03:44.800
The contract is essential.
1137
01:03:45.119 --> 01:03:45.920
You need to have it.
1138
01:03:46.239 --> 01:03:50.440
You need to understand how you're going to collaborate with
1139
01:03:50.559 --> 01:03:51.360
other people.
1140
01:03:52.920 --> 01:03:56.880
Mostly now that that everyone is on the couple services
1141
01:03:57.840 --> 01:04:01.119
or a lot of the applications. Fully, you're moving into
1142
01:04:01.239 --> 01:04:06.400
that kind of architecture. To to make sure that you
1143
01:04:06.559 --> 01:04:09.960
have the right governance, you need to have API contracts first.
1144
01:04:11.599 --> 01:04:13.679
So that's one hundred.
1145
01:04:15.880 --> 01:04:16.320
It must.
1146
01:04:18.119 --> 01:04:20.800
Yeah, So you you guys in this one, you recommend
1147
01:04:20.840 --> 01:04:23.280
either open API or graph ql. You said that they
1148
01:04:23.440 --> 01:04:28.440
it depends on what you want, right, They have different strengths.
1149
01:04:29.239 --> 01:04:33.239
So yeah, do you do you want to kind of
1150
01:04:33.320 --> 01:04:37.320
talk a little bit about that, and then I'm really
1151
01:04:37.400 --> 01:04:42.360
curious about generating clients and types because anyway, go ahead
1152
01:04:42.360 --> 01:04:43.880
and answered that first part and then and then we
1153
01:04:43.920 --> 01:04:45.960
can get into the clients and types of questions there.
1154
01:04:46.119 --> 01:04:47.960
Let me take that very very briefly.
1155
01:04:48.159 --> 01:04:50.280
Then I probably passed the ball to Natalie because she
1156
01:04:50.320 --> 01:04:51.559
has a different opinion for me.
1157
01:04:52.320 --> 01:04:54.559
So it's a nerd fight.
1158
01:04:55.280 --> 01:04:55.519
Yeah.
1159
01:04:56.320 --> 01:04:57.679
So the.
1160
01:05:00.079 --> 01:05:04.280
An API is great. It provides the map to rest okay.
1161
01:05:04.920 --> 01:05:09.920
So if you know how your systems are going to
1162
01:05:10.000 --> 01:05:14.840
be composed and used, okay, this is great. However, they
1163
01:05:14.920 --> 01:05:19.280
still suffer from, you know, the level of granduality that
1164
01:05:19.400 --> 01:05:23.840
you're doing with rest okay. So it means that in
1165
01:05:24.000 --> 01:05:26.840
order to achieve a certain a certain function, a certain
1166
01:05:27.079 --> 01:05:31.440
central behavior, they will need to developer using those APIs,
1167
01:05:31.480 --> 01:05:34.599
we need to issue two, three, four or five different calls, okay,
1168
01:05:35.360 --> 01:05:37.800
especially from and these adds a lot, can add a
1169
01:05:37.840 --> 01:05:38.639
lot of latency.
1170
01:05:39.119 --> 01:05:42.639
That's the problem in to fights the data that they need.
1171
01:05:43.239 --> 01:05:45.199
To get the data that they need will graph you
1172
01:05:45.360 --> 01:05:48.119
l you can actually do that with one single pass
1173
01:05:48.199 --> 01:05:51.800
and have that logic done on the server side, okay,
1174
01:05:53.039 --> 01:05:55.360
which I don't want to go into the intricacy of
1175
01:05:55.440 --> 01:06:00.880
implementing that correctly. But the different news case is if
1176
01:06:00.960 --> 01:06:03.719
you know, if you don't know how your system is
1177
01:06:03.800 --> 01:06:06.920
going to be read and accessed, graphical is a great system,
1178
01:06:07.199 --> 01:06:10.679
great way to provide all discoverability and easy way to
1179
01:06:10.760 --> 01:06:11.480
consume the data.
1180
01:06:11.679 --> 01:06:11.960
Okay.
1181
01:06:12.920 --> 01:06:18.039
While my undergeneric understanding is that using open API can
1182
01:06:18.199 --> 01:06:22.760
lead to more performance implementations and that are easier to
1183
01:06:24.159 --> 01:06:28.320
scale genetically, so at the cost of latency. So you see,
1184
01:06:28.440 --> 01:06:31.599
there is there is a trade and Natalian, I know
1185
01:06:31.719 --> 01:06:34.719
that you prefer you have a different opinions to you.
1186
01:06:36.519 --> 01:06:39.360
No, No, I mostly agree with what you say, like
1187
01:06:40.440 --> 01:06:45.480
I like with everything else. You need to evaluate your
1188
01:06:45.599 --> 01:06:46.119
trade offs.
1189
01:06:46.559 --> 01:06:51.440
What are you what do you want to have cashing?
1190
01:06:51.800 --> 01:06:56.679
Do you want to have a more granular or underfetching, yes,
1191
01:06:57.519 --> 01:07:00.199
then go with with a certain pattern or an other.
1192
01:07:01.239 --> 01:07:03.519
I am I am one hundred percent.
1193
01:07:05.719 --> 01:07:09.920
Sure that even even if you're doing graph cul, you
1194
01:07:10.079 --> 01:07:15.679
need to have a contract no matter what and generating
1195
01:07:15.800 --> 01:07:17.639
your clients. It's right now.
1196
01:07:19.440 --> 01:07:20.960
A possibility.
1197
01:07:22.880 --> 01:07:28.159
Generating your client on top of the contract is very affections.
1198
01:07:31.119 --> 01:07:34.400
So that that kind of leads right into this next part,
1199
01:07:34.440 --> 01:07:39.679
which is generating clients and types. So I have to
1200
01:07:39.719 --> 01:07:44.599
admit I've mostly unrest where I've done graph ql, Like
1201
01:07:44.760 --> 01:07:47.000
I had to build the resolvers and stuff like that.
1202
01:07:47.159 --> 01:07:49.039
It just felt like a lot of extra work to
1203
01:07:49.159 --> 01:07:51.440
get that graph qu all the work. I mean, if
1204
01:07:51.480 --> 01:07:53.639
I was doing front end that consumed graph ql a
1205
01:07:53.679 --> 01:07:56.559
lot of times it was just magic, right, And so
1206
01:07:56.679 --> 01:07:59.360
I felt like the trade off may or may not
1207
01:07:59.440 --> 01:08:03.760
have been worth it. Am I looking at this wrong?
1208
01:08:04.159 --> 01:08:06.760
Or is there something I just haven't seen there?
1209
01:08:07.360 --> 01:08:11.880
Graphql okay removes removes a lot of the like if
1210
01:08:11.920 --> 01:08:16.199
you okay with graph ql, which is something it's a
1211
01:08:16.319 --> 01:08:19.520
fantastic system. If you have a lot of disjunted teams
1212
01:08:20.319 --> 01:08:24.800
that do not talk with anyonet to minimize the incommunication
1213
01:08:24.960 --> 01:08:25.399
between them.
1214
01:08:26.159 --> 01:08:30.520
Okay. Essentially it's a tool that enables Okay, it is
1215
01:08:30.560 --> 01:08:31.680
your graph celent point.
1216
01:08:32.000 --> 01:08:34.840
It's my problem to maintain that, the team that produces it,
1217
01:08:34.960 --> 01:08:38.560
maintaining and keeping it up and keeping it performance, which
1218
01:08:38.800 --> 01:08:40.640
it might be very much in trouble in doing so.
1219
01:08:41.039 --> 01:08:44.279
But it's a business choice, okay. And then consumers can
1220
01:08:44.359 --> 01:08:48.359
get that. The consumers can just you know, they feel
1221
01:08:48.359 --> 01:08:51.319
the magic. Okay, somebody feel the pain. Somebody else feel
1222
01:08:51.359 --> 01:08:51.720
the magic.
1223
01:08:52.319 --> 01:08:52.640
Okay.
1224
01:08:53.319 --> 01:08:58.880
With with the rest and open API, you you probably
1225
01:08:59.319 --> 01:09:01.199
it's less my That's what I'm saying.
1226
01:09:01.399 --> 01:09:01.800
You can.
1227
01:09:04.079 --> 01:09:07.000
Yeah, yeah, get a little bit of tighter coupling with.
1228
01:09:07.119 --> 01:09:10.760
The genetically leads to tighter couple.
1229
01:09:13.560 --> 01:09:16.880
Which is which, which is ironic given REST was originally
1230
01:09:16.920 --> 01:09:20.119
intended to avoid the tighter coupling, but you still end
1231
01:09:20.199 --> 01:09:20.439
up with that.
1232
01:09:22.439 --> 01:09:22.640
Yeah.
1233
01:09:23.039 --> 01:09:26.840
So, but I think I think to the highest point,
1234
01:09:27.199 --> 01:09:31.600
the most important thing is having a contract. And you know,
1235
01:09:31.720 --> 01:09:35.000
if you can generate code from that contract automatically, cool,
1236
01:09:36.079 --> 01:09:39.479
all the better. But you have to start with the contract,
1237
01:09:39.720 --> 01:09:42.800
whatever that is. And you can write the API contract
1238
01:09:42.960 --> 01:09:44.760
just in a markdown document and say this is how
1239
01:09:44.800 --> 01:09:47.079
the thing works, but you have to start with the
1240
01:09:47.159 --> 01:09:47.920
contract first.
1241
01:09:49.640 --> 01:09:54.680
Yeah, is there anything you wanted to add on those points?
1242
01:09:54.840 --> 01:09:59.920
Or I think in Italian that they covered it perfectly.
1243
01:10:01.439 --> 01:10:05.000
You know, there are trade offs you can generate. Cool,
1244
01:10:05.800 --> 01:10:09.600
it's gonna be better for everyone. Whichever one you use
1245
01:10:09.680 --> 01:10:11.359
depends on what your specific requirements are.
1246
01:10:13.279 --> 01:10:16.960
Gotcha. There was a section here about API first versus
1247
01:10:17.079 --> 01:10:22.079
code first, so that.
1248
01:10:22.479 --> 01:10:24.600
Is a different in pattern.
1249
01:10:25.479 --> 01:10:28.720
So uh, there's a lots of debate between all the
1250
01:10:28.800 --> 01:10:32.880
people that do contract based development that they should start
1251
01:10:33.359 --> 01:10:38.119
with this design the side big design session where the
1252
01:10:38.279 --> 01:10:43.039
contract of the API is defined, okay, and then the
1253
01:10:43.119 --> 01:10:47.520
people writing consuming it go their merry way, and then
1254
01:10:47.600 --> 01:10:50.800
the people writing the the API go their merry way.
1255
01:10:51.640 --> 01:10:54.439
Oh and that said, okay, bye, Natalia, I don't.
1256
01:10:54.319 --> 01:10:57.079
Know, she's gone, and she said she had a hard stop.
1257
01:10:57.560 --> 01:11:01.239
Yeah, and basically one when one way, the other one
1258
01:11:01.319 --> 01:11:06.399
when the other way. Okay uh, and then when they
1259
01:11:06.520 --> 01:11:08.920
try to meet in the end, it never works.
1260
01:11:10.399 --> 01:11:13.079
Okay, I I.
1261
01:11:14.560 --> 01:11:14.840
Don't know.
1262
01:11:15.199 --> 01:11:15.439
I have.
1263
01:11:17.399 --> 01:11:19.720
Person, and I'll work back to the A P I.
1264
01:11:19.960 --> 01:11:21.399
But then I won't finish the code until the A
1265
01:11:21.720 --> 01:11:23.800
contract is figured out so it can work.
1266
01:11:24.960 --> 01:11:30.520
It's yeah, my genetically recommend My my experience is the
1267
01:11:30.720 --> 01:11:34.760
contract is ready when the implementation that implement that contract
1268
01:11:35.960 --> 01:11:40.039
is ready is final. Okay, you cannot finalize that, and
1269
01:11:40.960 --> 01:11:44.720
therefore I am more or less saying that you know
1270
01:11:45.279 --> 01:11:45.800
that and that.
1271
01:11:45.960 --> 01:11:47.960
But the key challenge there is you need to keep
1272
01:11:48.039 --> 01:11:49.479
to uphold the contract. Okay.
1273
01:11:49.560 --> 01:11:51.840
Once you stubish the contract, you need to not break
1274
01:11:51.880 --> 01:11:55.000
the contract. Very important because if you start breaking that.
1275
01:11:55.079 --> 01:11:57.920
This is one of the bigger process of downtime. Somebody
1276
01:11:58.039 --> 01:12:01.079
changed an API and said, oh, but these these things
1277
01:12:01.119 --> 01:12:04.960
is now required it's not. Or these things was optional
1278
01:12:05.079 --> 01:12:09.079
before and now well these things was required before is
1279
01:12:09.159 --> 01:12:12.720
now optional whatever? Okay, and then the crash that starts
1280
01:12:12.760 --> 01:12:15.560
opening all over the system, and one little change in
1281
01:12:15.600 --> 01:12:18.720
a tiny micro service can bring down the full the
1282
01:12:18.800 --> 01:12:19.279
full fleet.
1283
01:12:19.680 --> 01:12:21.359
Either that or you end up with tons of technical
1284
01:12:21.439 --> 01:12:23.640
debt and outdated code and obsolute stuff that you have
1285
01:12:23.680 --> 01:12:24.159
to keep around.
1286
01:12:27.399 --> 01:12:30.920
All right. Well, just to wrap up, is is there
1287
01:12:31.000 --> 01:12:35.279
kind of an overarching theme or any messages that you
1288
01:12:35.399 --> 01:12:38.479
want to kind of add to this or do we
1289
01:12:38.640 --> 01:12:39.680
just for me? For me?
1290
01:12:39.840 --> 01:12:43.239
The overarching theme is be intentional, be aware, like like
1291
01:12:43.479 --> 01:12:46.520
pay closed attention to thing you're doing, whether it's breaking
1292
01:12:46.560 --> 01:12:48.439
down the tasks so you don't let in the event loop,
1293
01:12:48.479 --> 01:12:52.880
to whether it's bringing in a new dependency to you know,
1294
01:12:52.920 --> 01:12:55.640
how you're designing your API. You have to stop and
1295
01:12:55.680 --> 01:12:56.640
think about what you're doing.
1296
01:12:58.319 --> 01:13:00.399
Yeah, and pretty much all the ones in the list
1297
01:13:00.840 --> 01:13:03.000
that's the like, think about what you're doing. And this
1298
01:13:03.119 --> 01:13:06.239
is almost a nice checklist to go through to say, like,
1299
01:13:06.359 --> 01:13:08.920
have we been intentional enough to we plan what we're
1300
01:13:08.960 --> 01:13:12.479
doing in each of these places and go from there.
1301
01:13:14.960 --> 01:13:18.439
Yeah, all right, good deal. I'm not sure if mateo
1302
01:13:18.600 --> 01:13:19.199
is frozen or.
1303
01:13:23.880 --> 01:13:27.039
And I need really need to drop now, Okay, I.
1304
01:13:28.960 --> 01:13:29.760
Break conversational.
1305
01:13:31.159 --> 01:13:36.119
Yeah, well I'm gonna throw in some picks. I don't
1306
01:13:36.159 --> 01:13:41.079
know if you want to do that too, Michael, but yeah,
1307
01:13:41.399 --> 01:13:43.199
let me jump in here real quick with my picks,
1308
01:13:43.199 --> 01:13:44.640
and then you can go ahead and throw in yours,
1309
01:13:46.439 --> 01:13:47.920
or if James is going to stick around, he can
1310
01:13:48.159 --> 01:13:49.600
do that too. But I got like, I got like
1311
01:13:49.680 --> 01:13:52.840
three minutes, so okay, well maybe you can go first.
1312
01:13:53.359 --> 01:13:54.760
I'm guessing you did picks last time.
1313
01:13:55.680 --> 01:13:56.439
Yeah, it didn't.
1314
01:13:56.439 --> 01:13:56.760
Watch time.
1315
01:13:56.800 --> 01:13:59.479
I'm miss going to say something, you know, super simple,
1316
01:14:00.039 --> 01:14:02.960
step away from the computer, go outside, talk to people,
1317
01:14:03.520 --> 01:14:06.319
you know, you know, don't get too wrapped up and stuff,
1318
01:14:06.880 --> 01:14:09.239
especially folks in the US. You know, things are kind
1319
01:14:09.239 --> 01:14:16.039
of still, you know, you know, kind of rather there's
1320
01:14:16.079 --> 01:14:18.199
quite a bit of turmoil and stuff. So just step away,
1321
01:14:18.319 --> 01:14:18.800
take a break.
1322
01:14:19.640 --> 01:14:23.479
That's it. Yep, It's good advice anytime of the year.
1323
01:14:24.920 --> 01:14:25.600
I'm gonna go ahead.
1324
01:14:26.680 --> 01:14:30.039
Okay, thanks for coming, James. All right, I'm gonna throw
1325
01:14:30.159 --> 01:14:34.840
in my picks here. So my first pick I always
1326
01:14:34.840 --> 01:14:37.880
do a board game pick. This last weekend, I was
1327
01:14:37.920 --> 01:14:41.760
at a board game convention and I was teaching people
1328
01:14:42.159 --> 01:14:45.199
the hot games. So my friend picked the games and
1329
01:14:45.319 --> 01:14:47.600
we taught them at you know, for free, at the
1330
01:14:47.680 --> 01:14:52.079
tables at the game at the game convention. So I'm
1331
01:14:52.119 --> 01:14:54.039
just gonna pick one of those games. The game that
1332
01:14:54.119 --> 01:14:58.319
I'm picking, And this was a super fun game. It's
1333
01:15:00.079 --> 01:15:07.079
it was relatively simple to pick up. You know, I
1334
01:15:07.159 --> 01:15:09.079
could explain it to people in like ten minutes, and
1335
01:15:09.600 --> 01:15:11.239
you know, it takes about forty five minutes to play.
1336
01:15:11.279 --> 01:15:13.479
You can play two to four players. It's called Gnome
1337
01:15:13.600 --> 01:15:17.479
Hollow and effectively, I'm not going to give you the
1338
01:15:17.560 --> 01:15:18.960
ten minute spiel. I'm going to give you the two
1339
01:15:18.960 --> 01:15:20.560
minute spiel. And then if you want to go learn it,
1340
01:15:20.600 --> 01:15:23.760
you can. Board game Geek weights it at two point
1341
01:15:24.119 --> 01:15:29.039
one seven, so it's it's a fairly easy casual game
1342
01:15:29.119 --> 01:15:33.119
or game. The way you play it is you are
1343
01:15:33.399 --> 01:15:41.439
making like circles of like mushroom circles, right, so you
1344
01:15:41.520 --> 01:15:44.840
know there's the kind of mythological you find a circle
1345
01:15:44.880 --> 01:15:47.439
of mushrooms and it's you know, fairy something I don't
1346
01:15:47.600 --> 01:15:50.359
I don't know, but anyway, so you're making mushroom rings
1347
01:15:50.359 --> 01:15:53.039
and then you harvest the mushrooms from the rings, you
1348
01:15:53.199 --> 01:15:55.000
take them to the market, you sell them for points.
1349
01:15:57.680 --> 01:16:00.600
As you create more rings, you also just cover different
1350
01:16:00.680 --> 01:16:03.840
kinds of wildflowers, and so you can collect the wild
1351
01:16:03.920 --> 01:16:07.319
flowers and those are worth points. And then as you
1352
01:16:08.640 --> 01:16:12.439
complete rings, you also move markers down onto your board.
1353
01:16:12.520 --> 01:16:17.920
That gives you rewards, and the number of markers you've
1354
01:16:17.960 --> 01:16:21.000
moved down is also a way of scoring points. Those
1355
01:16:21.039 --> 01:16:22.760
are the three things that score at the end of
1356
01:16:22.840 --> 01:16:25.479
the game. The points you've bought, or the points you've
1357
01:16:25.479 --> 01:16:29.920
sold your mushrooms for the amount of wildflowers different wildflowers
1358
01:16:29.960 --> 01:16:33.680
you've brought into your board, and then the number of
1359
01:16:33.760 --> 01:16:39.359
rings you've completed. Basically it was super fun. Once you
1360
01:16:39.439 --> 01:16:41.800
play around or two, it's like, oh, okay, I totally
1361
01:16:41.840 --> 01:16:43.880
get how this goes. And so the rest of it
1362
01:16:44.039 --> 01:16:47.279
is just figuring out which strategies you want to go for, Right,
1363
01:16:47.359 --> 01:16:52.119
Am I going to maximize on flowers on rings or
1364
01:16:52.399 --> 01:16:59.399
on you harvesting and selling mushrooms? And yeah, it was
1365
01:16:59.479 --> 01:17:01.760
really really fun. Of all the games that we taught,
1366
01:17:02.920 --> 01:17:05.439
this one was probably my favorite. I did buy one
1367
01:17:05.479 --> 01:17:08.279
of the other games before the Game Board Game Convention
1368
01:17:08.359 --> 01:17:11.239
because I liked it so much, but I've picked it
1369
01:17:11.279 --> 01:17:14.640
on the show before. It's Challengers, So anyway, I'm gonna
1370
01:17:14.640 --> 01:17:18.640
pick that one. No im hollow, And like I said,
1371
01:17:18.680 --> 01:17:22.880
it's forty five minutes to an hour game, and yeah,
1372
01:17:23.039 --> 01:17:25.159
the artwork on it is amazing. That always makes it
1373
01:17:25.199 --> 01:17:26.760
more fun if it's got a good theme and it
1374
01:17:26.840 --> 01:17:30.039
all kind of is cohesive. A couple of other things
1375
01:17:30.079 --> 01:17:33.920
I'm gonna pick. I've been watching the show Reacher and
1376
01:17:34.000 --> 01:17:38.079
I've been enjoying that. I just like the way that
1377
01:17:39.319 --> 01:17:43.319
Jack Reacher essentially is I'm gonna do the right thing
1378
01:17:43.520 --> 01:17:45.640
that I think is the right thing, and you can
1379
01:17:45.680 --> 01:17:48.239
all just go pounce end and you know, if you
1380
01:17:48.279 --> 01:17:49.920
get in my way, I'm gonna make you wish you
1381
01:17:50.000 --> 01:17:54.880
hadn't you know, I just I don't know. I like
1382
01:17:54.960 --> 01:17:57.760
to take no prisoners. I'm gonna find the truth approach
1383
01:17:57.880 --> 01:18:00.359
to life. So you know, this kind of takes it
1384
01:18:00.399 --> 01:18:02.399
to an extreme. It's kind of a violent show. So
1385
01:18:03.399 --> 01:18:05.399
if that's not your cup of tea, don't watch it.
1386
01:18:06.760 --> 01:18:10.880
You're right, it gets a little bit. Yeah, just violent.
1387
01:18:11.000 --> 01:18:14.119
So I'm gonna pick that and then the last pick
1388
01:18:14.319 --> 01:18:17.279
along the lines of what James was picking. You know,
1389
01:18:17.359 --> 01:18:19.279
we just had the elections here in the United States.
1390
01:18:19.800 --> 01:18:21.479
I know a lot of people have feelings about it.
1391
01:18:21.560 --> 01:18:24.119
I've taught you know. I live in Utah, where red state.
1392
01:18:24.520 --> 01:18:26.119
A lot of people are pretty happy that you know,
1393
01:18:26.279 --> 01:18:28.720
Trump won and that you know, the House and the Senate.
1394
01:18:30.319 --> 01:18:33.319
But then I see people kind of taking to task
1395
01:18:33.439 --> 01:18:36.359
or making fun of people who are sad because you know,
1396
01:18:36.439 --> 01:18:40.520
theirs I didn't win, and I'm not about that. I
1397
01:18:40.640 --> 01:18:42.880
think some of the ways that people are reacting or
1398
01:18:42.920 --> 01:18:46.279
overreacting to it is amusing. But I just keep that
1399
01:18:46.399 --> 01:18:48.720
to myself because at the end of the day, it's
1400
01:18:48.840 --> 01:18:52.199
not worth it to demonize or you know, make somebody
1401
01:18:52.279 --> 01:18:54.800
feel bad because their side didn't win. So I just
1402
01:18:54.920 --> 01:18:57.039
encourage everybody to be kind to each other. And then
1403
01:18:57.079 --> 01:18:58.800
the folks on the other side, because I do see
1404
01:18:58.800 --> 01:19:01.199
the posts where it's like, you know, my my family
1405
01:19:01.279 --> 01:19:02.760
all voted for Trump and I'm not ever going to
1406
01:19:02.800 --> 01:19:04.760
talk to him again. It's like, guys, don't do that,
1407
01:19:04.960 --> 01:19:08.680
right either side, don't do that. You know, everybody has
1408
01:19:08.760 --> 01:19:11.520
reasons why they voted the way they voted. Some of
1409
01:19:11.520 --> 01:19:14.119
them are good, some of them are bad. You know,
1410
01:19:14.760 --> 01:19:17.039
you think that they see what you see and then
1411
01:19:17.039 --> 01:19:19.880
they voted the other way. Anyway, that's generally not true.
1412
01:19:20.199 --> 01:19:23.479
I think we all mostly want to be you know,
1413
01:19:23.880 --> 01:19:26.039
prosperous and happy and be able to take care of
1414
01:19:26.119 --> 01:19:30.119
our families and things like that. So, you know, just
1415
01:19:31.479 --> 01:19:34.399
give everybody the benefit of the doubt. And you know,
1416
01:19:34.560 --> 01:19:36.560
if you're not up for having the conversation with the
1417
01:19:36.600 --> 01:19:40.359
people you care about, then don't. But if you can,
1418
01:19:40.520 --> 01:19:42.239
and you can come to understand a little bit more
1419
01:19:42.279 --> 01:19:43.960
of I was really scared that this was going to
1420
01:19:44.000 --> 01:19:47.000
happen if Trump or Harris got elected, you know, or
1421
01:19:47.319 --> 01:19:49.399
I really care about this issue, and so I voted
1422
01:19:49.479 --> 01:19:51.560
you know, maybe a single issue or mostly a single
1423
01:19:51.600 --> 01:19:53.960
issue at least, then you can kind of see where
1424
01:19:54.000 --> 01:19:55.520
people are coming from, and a lot of times you
1425
01:19:55.560 --> 01:19:58.840
see the humanity in them anyway. So I'm just going
1426
01:19:58.880 --> 01:20:02.880
to encourage that I'm not really shy about where I
1427
01:20:03.000 --> 01:20:04.760
come down on this stuff, so you can I'll probably
1428
01:20:04.840 --> 01:20:07.840
guess it, but that's not what this show is about.
1429
01:20:07.920 --> 01:20:09.680
And I really feel like the best thing we can
1430
01:20:09.720 --> 01:20:12.039
do at this point is just kind of come together,
1431
01:20:12.119 --> 01:20:14.079
make sure we understand each other, and then take care
1432
01:20:14.119 --> 01:20:17.439
of each other. So anyway, Michael, what are your picks?
1433
01:20:18.039 --> 01:20:20.119
I'm just going to have one really quick one. Over
1434
01:20:20.159 --> 01:20:23.880
the years, I've always wished I could like print you know,
1435
01:20:24.079 --> 01:20:26.159
heads for the little Lego.
1436
01:20:26.000 --> 01:20:28.520
Man, you know, to play around with, and uh, that
1437
01:20:28.640 --> 01:20:29.239
sounds awesome.
1438
01:20:29.600 --> 01:20:29.800
Yeah.
1439
01:20:30.000 --> 01:20:33.279
Maker World, which is from Bamboo Labs. They actually have
1440
01:20:33.720 --> 01:20:36.960
recently they've got like, uh I think it's probably Ai
1441
01:20:37.079 --> 01:20:39.159
based or something, but they've got like a new a
1442
01:20:39.239 --> 01:20:42.039
new offering where if you if you log in, you
1443
01:20:42.079 --> 01:20:44.319
can upload a picture and it basically will create you
1444
01:20:44.399 --> 01:20:48.560
a three D printable, uh you know, head of head
1445
01:20:48.560 --> 01:20:50.680
of that you can then adjust and tinker with just
1446
01:20:50.760 --> 01:20:52.960
like any other three D print. So pretty cool.
1447
01:20:54.279 --> 01:20:55.840
I want to do that for all my kids.
1448
01:20:55.960 --> 01:20:58.760
Now, there you go. Well, now go to maker World
1449
01:20:58.840 --> 01:21:01.119
and you can. They've got they make it easy, so
1450
01:21:01.199 --> 01:21:01.840
it's pretty cool.
1451
01:21:02.399 --> 01:21:08.159
Yeah, we're a Lego family here for sure. So awesome. Well, Michael,
1452
01:21:08.239 --> 01:21:09.840
I was going to ask this of everybody else, but
1453
01:21:09.840 --> 01:21:12.920
they're all gone. If people want to connect with you,
1454
01:21:13.239 --> 01:21:13.960
where do they find you?
1455
01:21:14.520 --> 01:21:16.880
I you can follow me on Twitter MH Dawson one.
1456
01:21:17.119 --> 01:21:19.880
Also on Blue Sky at MH d Austin without the
1457
01:21:19.920 --> 01:21:22.680
one because I managed to get that one first, and
1458
01:21:23.920 --> 01:21:25.880
or you know, in Getthub very active in that the
1459
01:21:25.960 --> 01:21:26.920
no project GetUp.
1460
01:21:27.039 --> 01:21:28.319
So that's the best places.
1461
01:21:28.960 --> 01:21:31.840
Awesome. I just barely joined Blue Sky. I'm cmax w
1462
01:21:32.159 --> 01:21:35.359
just like I am on Twitter. I will say that
1463
01:21:35.479 --> 01:21:38.840
I am looking to set up accounts for the shows,
1464
01:21:39.319 --> 01:21:41.760
so keep an eye out for JavaScript Jamber. It'll probably
1465
01:21:41.840 --> 01:21:47.720
be jass Jamber unless that's taken. So anyway, I know,
1466
01:21:47.800 --> 01:21:50.439
people are you know again kind of the political whatever
1467
01:21:50.760 --> 01:21:52.399
for you know, I want to be off Twitter and
1468
01:21:52.520 --> 01:21:55.399
on Blue Sky as long as I can reach you
1469
01:21:55.640 --> 01:21:59.479
and you're happy to get our stuff, you know, I'm
1470
01:21:59.479 --> 01:22:03.079
happy to stay at either place so you know, or
1471
01:22:03.159 --> 01:22:05.439
be of whatever place right, So as long as we
1472
01:22:05.520 --> 01:22:08.039
can connect, I guess is what I care about. Yeah,
1473
01:22:08.199 --> 01:22:11.439
definitely stay in touch there and until next time, folks
1474
01:22:11.600 --> 01:22:12.079
max out
1475
01:22:14.840 --> 01:22:15.239
M hm.