WEBVTT

1
00:00:05.240 --> 00:00:08.599
<v Speaker 1>Hey, Welcome to React Round Up, the podcast where we

2
00:00:08.679 --> 00:00:11.759
<v Speaker 1>keep you updated on all things React related. This show

3
00:00:11.800 --> 00:00:15.480
<v Speaker 1>is produced by Dpendeves and Onvoid. Topendeves is where you

4
00:00:15.599 --> 00:00:18.320
<v Speaker 1>create top and Eves. We get top and pay and recognition.

5
00:00:18.359 --> 00:00:22.079
<v Speaker 1>We're working on interesting problems in making meaningful community contributions

6
00:00:22.320 --> 00:00:26.440
<v Speaker 1>an Onvoid, which offers remote design and software development services

7
00:00:26.760 --> 00:00:30.160
<v Speaker 1>on the most client friendly business model, so clients only

8
00:00:30.239 --> 00:00:34.920
<v Speaker 1>pay after tasks are delivered and true. In today's episode,

9
00:00:35.000 --> 00:00:38.280
<v Speaker 1>we will be talking all about event searcing and the

10
00:00:38.320 --> 00:00:42.359
<v Speaker 1>differences between what is considered event surcing in the front end,

11
00:00:42.520 --> 00:00:47.560
<v Speaker 1>such as using reducts versus event searcing in the back end,

12
00:00:47.640 --> 00:00:52.399
<v Speaker 1>which is a completely different game. My name is Lucas Paganini.

13
00:00:52.439 --> 00:00:55.479
<v Speaker 1>Your hosts and the podcast. Joining me in today's episode

14
00:00:55.759 --> 00:01:02.119
<v Speaker 1>are the also hosts, Chris Fruan, Hello everybody, Peter Ossa,

15
00:01:02.880 --> 00:01:08.359
<v Speaker 1>Hi Evoon, and our very special guest which was also

16
00:01:08.799 --> 00:01:12.400
<v Speaker 1>on our last episode of Adventures and Angler, another podcast

17
00:01:12.519 --> 00:01:15.120
<v Speaker 1>also produced by Onvoid and Top and OUs if you're

18
00:01:15.159 --> 00:01:18.840
<v Speaker 1>interested in that, which is Louise Galias, the CEO and

19
00:01:19.000 --> 00:01:23.840
<v Speaker 1>founder of Onoid. Oh good, sorry, dude, I think you've

20
00:01:23.879 --> 00:01:27.319
<v Speaker 1>got my company by mistake so the CEO and founder

21
00:01:27.359 --> 00:01:27.959
<v Speaker 1>of Umbar.

22
00:01:28.840 --> 00:01:34.400
<v Speaker 2>Yeah, we're not doing acquisitions at this time. Sorry. Yeah,

23
00:01:34.480 --> 00:01:36.480
<v Speaker 2>hi everyone. My name is Louis Galias.

24
00:01:36.519 --> 00:01:38.840
<v Speaker 3>I'm an engineer, even though i'm the CEO of the company.

25
00:01:39.359 --> 00:01:43.120
<v Speaker 3>We help companies distribute data uh and do it in

26
00:01:43.159 --> 00:01:45.879
<v Speaker 3>a way that's very easy and it has great applications

27
00:01:45.879 --> 00:01:49.120
<v Speaker 3>and events sourcing, which is our current market focus.

28
00:01:49.480 --> 00:01:56.599
<v Speaker 1>Awesome, awesome. Yes, Louise really is a mastermind behind events searching.

29
00:01:57.280 --> 00:02:01.239
<v Speaker 1>He actually offers a free online core about event sourcing,

30
00:02:01.519 --> 00:02:03.359
<v Speaker 1>So for those of you that are interested, you can

31
00:02:03.400 --> 00:02:08.400
<v Speaker 1>go to mbar dot cloud slash EESC which stands for

32
00:02:08.520 --> 00:02:12.439
<v Speaker 1>Event Sercing Course. And I met him because I did

33
00:02:12.479 --> 00:02:14.840
<v Speaker 1>this course and I can vouch for it. It is

34
00:02:15.120 --> 00:02:18.639
<v Speaker 1>really good. It is really well made, and I learned

35
00:02:18.680 --> 00:02:21.599
<v Speaker 1>a tom from him, and I just thought, hey, dude,

36
00:02:21.919 --> 00:02:24.400
<v Speaker 1>let's bring you to the podcast because I'm sure that

37
00:02:24.479 --> 00:02:27.879
<v Speaker 1>this is going to be beneficial to a lot of developers.

38
00:02:28.000 --> 00:02:31.759
<v Speaker 1>A lot of people don't have this context of how

39
00:02:31.840 --> 00:02:34.080
<v Speaker 1>event searcing is done. It a lot of people don't

40
00:02:34.080 --> 00:02:36.960
<v Speaker 1>even know what event searcing is like in fact and

41
00:02:37.039 --> 00:02:39.599
<v Speaker 1>applied to the back end. So I think this is

42
00:02:39.680 --> 00:02:42.280
<v Speaker 1>going to be really relevant for those of you that

43
00:02:43.000 --> 00:02:45.759
<v Speaker 1>want to know more about the back end side of things.

44
00:02:46.039 --> 00:02:49.680
<v Speaker 1>So just an FYII, this podcast episode is not going

45
00:02:49.680 --> 00:02:51.840
<v Speaker 1>to be a lot about REACT, but we're going to

46
00:02:51.879 --> 00:02:56.159
<v Speaker 1>do a lot of comparisons between event sercing and using

47
00:02:56.319 --> 00:03:00.719
<v Speaker 1>reducts and all the flux patterns which are very commonly

48
00:03:00.840 --> 00:03:03.560
<v Speaker 1>used alongwid REACT. But you will see that it's pretty

49
00:03:03.560 --> 00:03:06.879
<v Speaker 1>different when you're doing that in the back end. All right,

50
00:03:07.080 --> 00:03:11.599
<v Speaker 1>So Louise, let's start with some concepts. What do you

51
00:03:11.639 --> 00:03:15.159
<v Speaker 1>think is relevant for us to define to the audience

52
00:03:15.199 --> 00:03:19.080
<v Speaker 1>before we start talking about the rest of the subject.

53
00:03:19.759 --> 00:03:22.599
<v Speaker 3>So I think it's a good idea to start with events, right,

54
00:03:22.639 --> 00:03:25.520
<v Speaker 3>and the inversion that we have in events sourcing and

55
00:03:25.840 --> 00:03:29.960
<v Speaker 3>similarly in redoucts as well, when you're using this in

56
00:03:29.960 --> 00:03:33.560
<v Speaker 3>the front end, right, So as opposed to having an

57
00:03:33.560 --> 00:03:37.360
<v Speaker 3>application where you are tracking state and modifying state in place,

58
00:03:37.599 --> 00:03:39.439
<v Speaker 3>what you're doing is you're recording events, right, So if

59
00:03:39.439 --> 00:03:44.439
<v Speaker 3>somebody makes a click, then you react to that event

60
00:03:44.599 --> 00:03:47.560
<v Speaker 3>by saying, I'm going to modify my state in this way.

61
00:03:47.879 --> 00:03:52.800
<v Speaker 3>So in this case, the state is really the primary, sorry,

62
00:03:52.800 --> 00:03:55.400
<v Speaker 3>the secondary part of your application, and your events are

63
00:03:55.439 --> 00:03:56.439
<v Speaker 3>the primary part.

64
00:03:56.719 --> 00:03:56.879
<v Speaker 4>And.

65
00:03:58.680 --> 00:04:02.439
<v Speaker 3>There are similarities in this regard, but there are definitely

66
00:04:02.439 --> 00:04:05.840
<v Speaker 3>differences because in the front end, your application is very ephemeral. Right,

67
00:04:06.159 --> 00:04:08.759
<v Speaker 3>if you have a browser window open right now, you

68
00:04:08.800 --> 00:04:11.240
<v Speaker 3>close it, great, that's it, right, You don't Maybe you

69
00:04:11.280 --> 00:04:15.280
<v Speaker 3>store some things in local storage, but beyond that everything

70
00:04:15.319 --> 00:04:17.800
<v Speaker 3>is stored in the server. When you're using this pattern

71
00:04:17.800 --> 00:04:21.000
<v Speaker 3>in the server, it's much different because now you have

72
00:04:21.079 --> 00:04:23.240
<v Speaker 3>to think about storing those events and being able to

73
00:04:23.279 --> 00:04:27.480
<v Speaker 3>build your state and keep track of it. So again

74
00:04:28.040 --> 00:04:30.800
<v Speaker 3>the concepts to summarize what I've said, right, is that

75
00:04:31.040 --> 00:04:35.560
<v Speaker 3>it's a similar inversion of the concepts, where now instead

76
00:04:35.600 --> 00:04:38.240
<v Speaker 3>of having state as your source of truth, your events

77
00:04:38.240 --> 00:04:40.319
<v Speaker 3>are your sorts of truth, and a state is a derivation.

78
00:04:40.839 --> 00:04:44.480
<v Speaker 3>But despite those similarities, it's very different because you have

79
00:04:44.519 --> 00:04:48.920
<v Speaker 3>to track your events in a permanent way as opposed

80
00:04:48.920 --> 00:04:50.399
<v Speaker 3>to in a e firmeral way where you can do

81
00:04:50.399 --> 00:04:53.000
<v Speaker 3>it in the front end with a single server, single core,

82
00:04:53.680 --> 00:04:56.120
<v Speaker 3>single threat of JavaScript running perfect.

83
00:04:56.240 --> 00:04:58.639
<v Speaker 1>Yeah, so there are like all the complexities that go

84
00:04:58.720 --> 00:05:04.920
<v Speaker 1>along with dealing with those limitations, right, And okay, so

85
00:05:05.079 --> 00:05:09.199
<v Speaker 1>Peter Chris, do you guys think there's any fundamentals that

86
00:05:09.199 --> 00:05:11.839
<v Speaker 1>we should cover before we get into event sourcing. By

87
00:05:11.839 --> 00:05:15.839
<v Speaker 1>the way, do YouTube feel comfortable with events sourcing any

88
00:05:16.120 --> 00:05:21.120
<v Speaker 1>particular basic questions about it? We can definitely tackle that now. Yeah.

89
00:05:21.199 --> 00:05:24.839
<v Speaker 5>So for me, I think the idea, I think I'm

90
00:05:24.920 --> 00:05:27.920
<v Speaker 5>just trying to create like a parallel or like copy

91
00:05:27.920 --> 00:05:33.240
<v Speaker 5>and contrasts. Yeah, so I think maybe maybe I may

92
00:05:33.279 --> 00:05:36.600
<v Speaker 5>want to ask like the question. I think that's probably

93
00:05:36.639 --> 00:05:41.600
<v Speaker 5>regarding like the principle behind events sourcing, maybe like maybe

94
00:05:42.120 --> 00:05:45.000
<v Speaker 5>just another view kind of Yeah, I get that, yet

95
00:05:45.199 --> 00:05:48.000
<v Speaker 5>it's it's at all maybe in the way that maybe

96
00:05:48.079 --> 00:05:51.759
<v Speaker 5>like Fontain developers will relate to Yeah, I know you

97
00:05:51.839 --> 00:05:55.800
<v Speaker 5>gave one about widows, but maybe something I don't say

98
00:05:55.800 --> 00:05:57.879
<v Speaker 5>it's close to low level maybe could but is it

99
00:05:58.000 --> 00:06:01.000
<v Speaker 5>like an event ball so those is eventv in yeah,

100
00:06:01.040 --> 00:06:02.079
<v Speaker 5>this kind of concepts.

101
00:06:02.120 --> 00:06:02.600
<v Speaker 3>Yeah, I.

102
00:06:05.240 --> 00:06:05.519
<v Speaker 2>Yeah.

103
00:06:05.560 --> 00:06:08.040
<v Speaker 3>So there are moving parts when you're doing this pattern

104
00:06:08.079 --> 00:06:09.959
<v Speaker 3>in the back end, right, because when you're doing everything

105
00:06:10.079 --> 00:06:12.759
<v Speaker 3>in the front and you can just do everything in memory,

106
00:06:12.759 --> 00:06:14.879
<v Speaker 3>like I was saying, So when you think about how

107
00:06:14.920 --> 00:06:17.360
<v Speaker 3>you're handling your events and how you're queuing them, when

108
00:06:17.399 --> 00:06:18.879
<v Speaker 3>you are doing this in the front and right, you

109
00:06:18.879 --> 00:06:22.680
<v Speaker 3>just have a you know, first in, first out queue

110
00:06:22.680 --> 00:06:25.160
<v Speaker 3>and you handle messages like that, and then you apply

111
00:06:25.199 --> 00:06:27.240
<v Speaker 3>them against your state. Right, okay, but how do you

112
00:06:27.279 --> 00:06:28.839
<v Speaker 3>do that when you actually need them for search of

113
00:06:28.879 --> 00:06:29.319
<v Speaker 3>that does this?

114
00:06:29.720 --> 00:06:31.759
<v Speaker 2>There are equivalent parts on the back end.

115
00:06:31.800 --> 00:06:35.000
<v Speaker 3>So for example, on your queue events that you have

116
00:06:35.040 --> 00:06:35.720
<v Speaker 3>in the front and.

117
00:06:35.639 --> 00:06:37.600
<v Speaker 2>You need a similar queue that is.

118
00:06:37.560 --> 00:06:41.199
<v Speaker 3>More permanent infrastructure on the back end, there are differences

119
00:06:41.199 --> 00:06:44.360
<v Speaker 3>where they are not quite the same the same things

120
00:06:44.360 --> 00:06:46.399
<v Speaker 3>on the back end. So for example, in the back

121
00:06:46.480 --> 00:06:50.079
<v Speaker 3>end you need to you need to store your events permanently, right,

122
00:06:50.120 --> 00:06:52.079
<v Speaker 3>so you can quite draw the same parallels.

123
00:06:53.360 --> 00:06:57.439
<v Speaker 2>Now, what I would say is from a benefit perspective, I.

124
00:06:57.399 --> 00:06:59.639
<v Speaker 3>Think this is where I can draw the most parallels

125
00:06:59.639 --> 00:07:02.720
<v Speaker 3>that when you have to reason about how your application

126
00:07:02.839 --> 00:07:06.959
<v Speaker 3>is changing, it's easier to reason about the delta themselves

127
00:07:07.279 --> 00:07:08.439
<v Speaker 3>than the state as a whole.

128
00:07:08.639 --> 00:07:11.120
<v Speaker 2>So when you can isolate, hey, I'm only changing this

129
00:07:11.319 --> 00:07:14.120
<v Speaker 2>one particular thing and it's going to affect my state.

130
00:07:13.920 --> 00:07:17.120
<v Speaker 3>In this particularly defined way. Where your functions are essentially

131
00:07:17.160 --> 00:07:19.399
<v Speaker 3>pure functions. Right, you have your state input, you have

132
00:07:19.439 --> 00:07:21.480
<v Speaker 3>a state output, and then you have a pure function.

133
00:07:21.519 --> 00:07:23.720
<v Speaker 3>That is, for me, state input is to state output

134
00:07:23.959 --> 00:07:28.439
<v Speaker 3>with the delta. And this process of take going from

135
00:07:28.519 --> 00:07:33.480
<v Speaker 3>state transitions from one to another and using that delta

136
00:07:33.680 --> 00:07:37.480
<v Speaker 3>as the primary player in your system. This is what

137
00:07:37.519 --> 00:07:39.959
<v Speaker 3>eventsourcing is all about, instead of focusing on the state

138
00:07:40.000 --> 00:07:42.040
<v Speaker 3>as a whole and having this kind of weird thing

139
00:07:42.079 --> 00:07:44.639
<v Speaker 3>where you have a giant function that is trying to

140
00:07:44.680 --> 00:07:46.959
<v Speaker 3>do all sorts of crazy things and having all sorts

141
00:07:46.959 --> 00:07:50.439
<v Speaker 3>of different case switch statements of you know, maybe.

142
00:07:50.240 --> 00:07:51.600
<v Speaker 2>I want to do this, maybe I want to do that,

143
00:07:51.680 --> 00:07:53.240
<v Speaker 2>maybe I want to use the service or the combination

144
00:07:53.279 --> 00:07:54.240
<v Speaker 2>of the thing.

145
00:07:54.439 --> 00:07:56.639
<v Speaker 3>No, just think about everything as a pure function where

146
00:07:56.639 --> 00:07:59.279
<v Speaker 3>you have state input, state output and some delta in

147
00:07:59.360 --> 00:08:01.399
<v Speaker 3>between and a function that is going to help because

148
00:08:01.439 --> 00:08:04.399
<v Speaker 3>from that delta into the state input to state output transition.

149
00:08:05.480 --> 00:08:07.839
<v Speaker 5>I think I think that's I think that's way much.

150
00:08:07.879 --> 00:08:10.720
<v Speaker 5>So it's more like from what you describe, it's more

151
00:08:10.800 --> 00:08:16.680
<v Speaker 5>like it's more like a permanent more like you permanent

152
00:08:17.040 --> 00:08:21.360
<v Speaker 5>like we of like constantly getting like information that you

153
00:08:21.399 --> 00:08:24.079
<v Speaker 5>may kind of put in your states. So it's just

154
00:08:24.160 --> 00:08:27.399
<v Speaker 5>like I really say, is it this obviously like it's

155
00:08:27.600 --> 00:08:29.720
<v Speaker 5>moll stop kind of right? Does it seem like that?

156
00:08:30.399 --> 00:08:30.560
<v Speaker 1>Yeah?

157
00:08:32.000 --> 00:08:36.240
<v Speaker 5>All right, all right, I think that makes sense. Yeah, yeah, Chris,

158
00:08:36.240 --> 00:08:38.360
<v Speaker 5>do you have a new question on that? Bybe to

159
00:08:38.639 --> 00:08:41.039
<v Speaker 5>create like parallel with that sound like you wanted.

160
00:08:42.840 --> 00:08:45.200
<v Speaker 4>Yeah, I was laughing a bit back there when when

161
00:08:45.399 --> 00:08:47.559
<v Speaker 4>Lucas mentioned there's people who probably don't even know what

162
00:08:47.600 --> 00:08:51.679
<v Speaker 4>event sourcing is, and maybe one of those. So now

163
00:08:51.840 --> 00:08:55.159
<v Speaker 4>I guess to not like just to be a total

164
00:08:55.240 --> 00:08:57.720
<v Speaker 4>new but but maybe to relate to to kind of

165
00:08:57.759 --> 00:09:00.039
<v Speaker 4>the front end and things like that. I guess the

166
00:09:00.080 --> 00:09:03.679
<v Speaker 4>only the only thing like the buzzword I think of,

167
00:09:03.960 --> 00:09:06.080
<v Speaker 4>but it's maybe not the exact same thing is I

168
00:09:06.120 --> 00:09:10.679
<v Speaker 4>know there's these like these event I'm not even sure

169
00:09:10.720 --> 00:09:13.639
<v Speaker 4>what they called, like event databases, but I feel like

170
00:09:13.679 --> 00:09:16.799
<v Speaker 4>what you're doing is even more generalized then you don't.

171
00:09:17.600 --> 00:09:20.360
<v Speaker 4>It may be just the architecture itself and you maybe

172
00:09:20.399 --> 00:09:23.440
<v Speaker 4>don't need like a database and all this event driven thing.

173
00:09:24.200 --> 00:09:26.559
<v Speaker 4>But but maybe what we could touch on a few

174
00:09:26.559 --> 00:09:29.600
<v Speaker 4>times throughout the podcast is is like how it relates

175
00:09:29.600 --> 00:09:31.519
<v Speaker 4>to the front end. I what I do know with

176
00:09:31.600 --> 00:09:37.200
<v Speaker 4>the whole flux thing and the event event sourcing, why

177
00:09:37.440 --> 00:09:39.639
<v Speaker 4>really it was made is kind of what you mentioned already.

178
00:09:40.399 --> 00:09:42.279
<v Speaker 4>There's a great talk. Maybe I'll look it up and

179
00:09:42.320 --> 00:09:44.320
<v Speaker 4>post it at the end of the show, but from

180
00:09:44.440 --> 00:09:47.679
<v Speaker 4>why Facebook kind of came up with this and They

181
00:09:47.720 --> 00:09:49.840
<v Speaker 4>probably didn't. They weren't the ones who invented it. But

182
00:09:50.360 --> 00:09:53.000
<v Speaker 4>there when they were working on their chat, they had

183
00:09:53.039 --> 00:09:56.200
<v Speaker 4>all these you know, a chat is super like state intensive.

184
00:09:56.279 --> 00:10:00.279
<v Speaker 4>You have how many messages, you're are unread, number of people,

185
00:10:00.320 --> 00:10:04.159
<v Speaker 4>all the stuff. And they found you know, doing it

186
00:10:04.759 --> 00:10:08.360
<v Speaker 4>like without pure functions, without without event sourcing. Every time

187
00:10:08.360 --> 00:10:09.960
<v Speaker 4>they tried to add a new feature, they would get

188
00:10:10.000 --> 00:10:15.559
<v Speaker 4>regressions elsewhere in the state. But yeah, that's that's my

189
00:10:16.159 --> 00:10:19.480
<v Speaker 4>to my extent of what I know about event sourcing,

190
00:10:19.559 --> 00:10:22.879
<v Speaker 4>and and yeah, I don't know, I'm just kind of

191
00:10:22.960 --> 00:10:25.720
<v Speaker 4>rambling on. Probably reflects how how little I know about this.

192
00:10:27.240 --> 00:10:29.360
<v Speaker 3>No, but that's I think that's pretty much in line

193
00:10:29.399 --> 00:10:30.720
<v Speaker 3>with the proposition of.

194
00:10:30.639 --> 00:10:33.480
<v Speaker 2>It, right, because there is a there is a payment

195
00:10:33.480 --> 00:10:34.039
<v Speaker 2>that you have to do.

196
00:10:34.120 --> 00:10:35.759
<v Speaker 3>You have to pay the piper upfront, right, You have

197
00:10:35.840 --> 00:10:38.240
<v Speaker 3>to put in some work to understand these concepts and

198
00:10:38.399 --> 00:10:40.919
<v Speaker 3>get the infrastructure in place. I mean, if you think

199
00:10:40.960 --> 00:10:43.440
<v Speaker 3>about it from the fronto perspective, right, imagine that you're

200
00:10:43.440 --> 00:10:46.360
<v Speaker 3>transitioning from you know, some application that was built with

201
00:10:46.399 --> 00:10:49.480
<v Speaker 3>pure HTML and some jQuery and it's you know, this

202
00:10:49.639 --> 00:10:53.879
<v Speaker 3>giant monolith like mass, right, and then you say to

203
00:10:53.919 --> 00:10:55.919
<v Speaker 3>the team, Hey, you know what, let's move this to

204
00:10:56.159 --> 00:10:57.080
<v Speaker 3>a single page.

205
00:10:56.840 --> 00:10:59.919
<v Speaker 2>Application based on reacting redox. Right. If you're doing that,

206
00:11:00.080 --> 00:11:01.480
<v Speaker 2>you're going to have to pay some cost up front.

207
00:11:01.480 --> 00:11:02.039
<v Speaker 2>You're going to have to.

208
00:11:02.120 --> 00:11:05.440
<v Speaker 3>Educate people or get people that are already educated, and

209
00:11:05.519 --> 00:11:08.399
<v Speaker 3>you're going to have to have some guardrails in some

210
00:11:09.440 --> 00:11:11.759
<v Speaker 3>libraries and some abstractions that are going to help you

211
00:11:11.799 --> 00:11:12.279
<v Speaker 3>deploy this.

212
00:11:12.519 --> 00:11:14.159
<v Speaker 2>It's not something that you're going to do overnight.

213
00:11:14.679 --> 00:11:17.440
<v Speaker 3>So the proposition with event sourcing, though, is that once

214
00:11:17.480 --> 00:11:20.480
<v Speaker 3>you have paid that cost that you go. You essentially

215
00:11:20.559 --> 00:11:23.120
<v Speaker 3>go slow at first, to go fast later at a

216
00:11:23.200 --> 00:11:25.759
<v Speaker 3>sustainable rate where you're not eventually going to hit a wall.

217
00:11:25.919 --> 00:11:28.360
<v Speaker 2>Because with these big applications where.

218
00:11:28.159 --> 00:11:30.360
<v Speaker 3>You have a ball of a band aid on top

219
00:11:30.399 --> 00:11:33.039
<v Speaker 3>of a ball of band aid, you essentially hit a

220
00:11:33.080 --> 00:11:35.240
<v Speaker 3>wall at some point where you get so many regressions

221
00:11:35.279 --> 00:11:37.879
<v Speaker 3>that you cannot develop anything. You have diminishing returns every

222
00:11:37.919 --> 00:11:40.039
<v Speaker 3>time you ad a feature. So the proposition with event

223
00:11:40.080 --> 00:11:43.279
<v Speaker 3>sourcing is that similarly, you have a cost to pay upfront,

224
00:11:43.480 --> 00:11:46.840
<v Speaker 3>but with the benefit that after you've paid that cost,

225
00:11:47.039 --> 00:11:49.639
<v Speaker 3>you'll be able to go very quickly because the system

226
00:11:49.840 --> 00:11:55.279
<v Speaker 3>is easy to reason about. Despite the system growing disproportionately

227
00:11:55.679 --> 00:11:56.759
<v Speaker 3>in the number of features.

228
00:11:57.080 --> 00:12:00.320
<v Speaker 1>Now, how is that actually done in prect to this,

229
00:12:00.519 --> 00:12:03.240
<v Speaker 1>because like interurity, this sounds great, This sounds like this

230
00:12:03.279 --> 00:12:05.879
<v Speaker 1>will solve a lot of the complexities that big code

231
00:12:05.919 --> 00:12:09.600
<v Speaker 1>bases have, which I think most of us know how

232
00:12:09.639 --> 00:12:11.879
<v Speaker 1>that goes. Like most of us have work in a

233
00:12:11.919 --> 00:12:16.360
<v Speaker 1>big co base, and despite all the good intentions of

234
00:12:16.399 --> 00:12:20.320
<v Speaker 1>everyone of keeping the code organized, is just natural for

235
00:12:20.480 --> 00:12:23.480
<v Speaker 1>things to get outdated because there are new patterns and

236
00:12:23.519 --> 00:12:26.480
<v Speaker 1>you don't always come back to reflector the entire thing,

237
00:12:27.120 --> 00:12:32.159
<v Speaker 1>and then you start getting parts that are considered legacy. Right,

238
00:12:33.240 --> 00:12:38.720
<v Speaker 1>How in practice does what you were saying would work

239
00:12:38.879 --> 00:12:42.480
<v Speaker 1>to avoid this complexity building up over time.

240
00:12:44.120 --> 00:12:46.919
<v Speaker 3>So that's a great question because the reality of it,

241
00:12:47.000 --> 00:12:49.039
<v Speaker 3>like with anything right, is that you get these promises

242
00:12:49.080 --> 00:12:50.480
<v Speaker 3>and you have to know how these are going to

243
00:12:50.480 --> 00:12:51.480
<v Speaker 3>come true.

244
00:12:51.600 --> 00:12:53.000
<v Speaker 2>If they can come true in the first place.

245
00:12:53.360 --> 00:12:56.679
<v Speaker 3>So firstly, I would highlight that, you know, I mean,

246
00:12:56.720 --> 00:12:58.720
<v Speaker 3>I'm an engineer, I'm all about trade offs. I don't

247
00:12:58.759 --> 00:13:00.559
<v Speaker 3>just preach and you know say you know this is

248
00:13:00.559 --> 00:13:01.799
<v Speaker 3>going to be a silver bullet.

249
00:13:02.000 --> 00:13:04.320
<v Speaker 2>There are no such things in engineering. Everybody who with

250
00:13:04.399 --> 00:13:05.039
<v Speaker 2>some degree.

251
00:13:04.840 --> 00:13:09.399
<v Speaker 3>Of experience knows that But that being said, when if

252
00:13:09.399 --> 00:13:12.399
<v Speaker 3>you truly want to.

253
00:13:12.320 --> 00:13:16.159
<v Speaker 2>Walk to the promised land, there are two aspects that

254
00:13:16.200 --> 00:13:17.000
<v Speaker 2>you have to cover.

255
00:13:17.120 --> 00:13:19.679
<v Speaker 3>One is a technical aspect, where you have your infrastructure

256
00:13:19.720 --> 00:13:21.799
<v Speaker 3>and you have to know how to deploy that, how

257
00:13:21.840 --> 00:13:23.399
<v Speaker 3>to set up your ci how to set up the

258
00:13:23.440 --> 00:13:26.279
<v Speaker 3>different components that you need, like a place to store

259
00:13:26.320 --> 00:13:28.279
<v Speaker 3>your events, a way to hew your events, a way

260
00:13:28.320 --> 00:13:31.159
<v Speaker 3>to process your events, a way to react to your events,

261
00:13:31.200 --> 00:13:33.559
<v Speaker 3>and you have to know how you're going to do

262
00:13:33.600 --> 00:13:35.919
<v Speaker 3>that and make a plan for it. And second of all,

263
00:13:36.200 --> 00:13:38.879
<v Speaker 3>it's the people aspect where you have to imboard people,

264
00:13:38.919 --> 00:13:41.720
<v Speaker 3>introduce new way of thinking, perhaps on learn some of

265
00:13:41.720 --> 00:13:44.440
<v Speaker 3>the patterns that they've been using. Everybody loves doing this

266
00:13:44.600 --> 00:13:47.360
<v Speaker 3>great read of the delete kind of application because it's simple.

267
00:13:47.559 --> 00:13:51.039
<v Speaker 3>There are a ton of frameworks like rails in Ruby.

268
00:13:51.960 --> 00:13:56.679
<v Speaker 3>You know, you have frameworks in JavaScript as well. You

269
00:13:56.679 --> 00:13:59.919
<v Speaker 3>have frameworks in PhD like Symphony and Larval that just

270
00:14:00.120 --> 00:14:02.639
<v Speaker 3>help you do this great readup of the delete right.

271
00:14:02.879 --> 00:14:05.159
<v Speaker 3>But if you're changing your way of thinking into thinking

272
00:14:05.159 --> 00:14:07.519
<v Speaker 3>about the delta, doesn't thinking in pure functions. You need

273
00:14:07.559 --> 00:14:10.440
<v Speaker 3>new obstructions and it's not just the technical implementation of

274
00:14:10.440 --> 00:14:14.399
<v Speaker 3>those abtractions it's the convincing the people right, and luckily

275
00:14:14.679 --> 00:14:17.480
<v Speaker 3>with events sourcing, once you do you know a modicum

276
00:14:17.519 --> 00:14:20.159
<v Speaker 3>of training, you know, maybe two three weeks where you

277
00:14:20.240 --> 00:14:23.320
<v Speaker 3>put in some serious time into studying it, you can

278
00:14:23.360 --> 00:14:26.879
<v Speaker 3>get quite good. And assuming that you've set up the infrastructure,

279
00:14:27.279 --> 00:14:29.600
<v Speaker 3>and if you've done that, and you do it with

280
00:14:29.679 --> 00:14:31.879
<v Speaker 3>an initial part of your system, so you don't move

281
00:14:31.919 --> 00:14:32.600
<v Speaker 3>everything at once.

282
00:14:32.639 --> 00:14:35.320
<v Speaker 2>Of course, you don't do a big binary right, you move.

283
00:14:35.200 --> 00:14:38.200
<v Speaker 3>A specific part of your system, and then once you're done,

284
00:14:38.360 --> 00:14:40.399
<v Speaker 3>you'll be in a position where you.

285
00:14:40.039 --> 00:14:41.799
<v Speaker 2>Turned your team to use events sourcing.

286
00:14:42.200 --> 00:14:44.600
<v Speaker 3>You have moved a part of your system to eventsurcing

287
00:14:44.600 --> 00:14:47.360
<v Speaker 3>because you thought it would deliver some business value, and

288
00:14:47.399 --> 00:14:51.799
<v Speaker 3>hopefully you've set up the technical infrastructure concerns as well.

289
00:14:52.120 --> 00:14:55.320
<v Speaker 3>Depending on how much you want to implement yourself, you

290
00:14:55.320 --> 00:14:57.159
<v Speaker 3>can go from deploying things as quickly as you know,

291
00:14:57.320 --> 00:14:59.679
<v Speaker 3>two to three weeks in terms of the infrastructure, plus

292
00:14:59.679 --> 00:15:02.720
<v Speaker 3>pseudo three weeks in terms of training yourself and developing

293
00:15:02.759 --> 00:15:05.279
<v Speaker 3>the first couple of features, to going over a year

294
00:15:05.399 --> 00:15:07.360
<v Speaker 3>or two years if you really want to do everything

295
00:15:07.360 --> 00:15:09.360
<v Speaker 3>from the ground up right. So, for example, when it

296
00:15:09.399 --> 00:15:12.200
<v Speaker 3>comes to the infrastructure, you can build your own events store,

297
00:15:12.240 --> 00:15:14.799
<v Speaker 3>and I know people that have actually interacted with the

298
00:15:14.799 --> 00:15:18.440
<v Speaker 3>file system built the whole entire library to address the

299
00:15:18.480 --> 00:15:20.120
<v Speaker 3>concern of the events store, and then they have to

300
00:15:20.159 --> 00:15:22.919
<v Speaker 3>add in all these features like indexing, which if you

301
00:15:23.039 --> 00:15:27.120
<v Speaker 3>just wrapped a traditional database you could get it essentially

302
00:15:27.120 --> 00:15:30.120
<v Speaker 3>almost for free. Right when it comes to queuing systems,

303
00:15:30.159 --> 00:15:32.399
<v Speaker 3>there are people that implement their own queuing systems.

304
00:15:32.399 --> 00:15:36.440
<v Speaker 2>They use things like Rabin and Q and they customize

305
00:15:36.440 --> 00:15:39.360
<v Speaker 2>on top of it, and there are abstractions out there.

306
00:15:39.960 --> 00:15:42.240
<v Speaker 3>There's a range of obstructions and different sides of the

307
00:15:42.279 --> 00:15:44.960
<v Speaker 3>spectrum in terms of how much you need to know. We,

308
00:15:45.159 --> 00:15:48.559
<v Speaker 3>of course at Amber, we make it essentially as easy.

309
00:15:48.600 --> 00:15:50.679
<v Speaker 3>We're on one side of the spectrum. It's as easy

310
00:15:50.679 --> 00:15:52.120
<v Speaker 3>as it gets, right, but of course that comes at

311
00:15:52.159 --> 00:15:53.240
<v Speaker 3>a cost where you have to pay for it.

312
00:15:53.320 --> 00:15:55.080
<v Speaker 2>Right, But the.

313
00:15:55.120 --> 00:15:59.440
<v Speaker 3>More you are comfortable with using the existing tooling, that's

314
00:15:59.440 --> 00:16:03.840
<v Speaker 3>how they're like using posters, using my sequel, or using ambar,

315
00:16:04.200 --> 00:16:07.840
<v Speaker 3>or using technologies to deploy web servers like cloud run

316
00:16:07.960 --> 00:16:10.840
<v Speaker 3>or far Gate and not complicating your life, you know,

317
00:16:10.919 --> 00:16:14.120
<v Speaker 3>doing your own Kubernetes deployment. If you just do it

318
00:16:14.240 --> 00:16:18.120
<v Speaker 3>the simplest, the simplest way, and using system cooling, you

319
00:16:18.159 --> 00:16:19.600
<v Speaker 3>can get set up in about a month and a

320
00:16:19.639 --> 00:16:21.799
<v Speaker 3>half including technical time and training time.

321
00:16:23.120 --> 00:16:24.799
<v Speaker 2>And I think that's quite and I've.

322
00:16:24.559 --> 00:16:26.840
<v Speaker 3>Seen that in practice, and I think that's quite impressive

323
00:16:26.840 --> 00:16:30.039
<v Speaker 3>for something where you need to flip everything. But people like,

324
00:16:30.080 --> 00:16:32.200
<v Speaker 3>because we're engineers, we fall into the trap of, you know,

325
00:16:32.279 --> 00:16:34.000
<v Speaker 3>I need to understand absolutely everything.

326
00:16:34.840 --> 00:16:35.399
<v Speaker 2>We don't do this.

327
00:16:35.519 --> 00:16:37.759
<v Speaker 3>If we're implementing a file storage, right, we don't need

328
00:16:37.759 --> 00:16:39.080
<v Speaker 3>to understand how S three works.

329
00:16:39.080 --> 00:16:39.759
<v Speaker 2>We just use it.

330
00:16:40.559 --> 00:16:43.279
<v Speaker 3>So I would my general advice, after giving you the

331
00:16:43.279 --> 00:16:45.159
<v Speaker 3>details of how to go about it, is pick your

332
00:16:45.240 --> 00:16:47.840
<v Speaker 3>battles in what you need to learn, and learn the

333
00:16:47.879 --> 00:16:49.480
<v Speaker 3>things that are going to make a difference for you

334
00:16:49.519 --> 00:16:52.159
<v Speaker 3>as a business, not the things that are just you know,

335
00:16:52.320 --> 00:16:53.519
<v Speaker 3>problems that are already sold.

336
00:16:53.799 --> 00:16:57.159
<v Speaker 1>Okay, that's that does make sense. It is still a

337
00:16:57.200 --> 00:17:02.759
<v Speaker 1>bit scary, but I think I agree with you, like

338
00:17:02.879 --> 00:17:08.599
<v Speaker 1>we allow so many abstractions, especially JavaScript developers. We are

339
00:17:08.680 --> 00:17:12.440
<v Speaker 1>so used to frameworks. There are just layers on top

340
00:17:12.480 --> 00:17:16.640
<v Speaker 1>of layers and layers and layers of abstraction, and for

341
00:17:16.680 --> 00:17:20.240
<v Speaker 1>some reason I still find it a bit weird to

342
00:17:20.319 --> 00:17:23.079
<v Speaker 1>abstract and events fersaal layer. But I think this is

343
00:17:23.200 --> 00:17:26.200
<v Speaker 1>more about the fact that I don't feel as comfortable

344
00:17:26.319 --> 00:17:30.839
<v Speaker 1>with it doing natively to be okay with an abstraction,

345
00:17:31.000 --> 00:17:37.680
<v Speaker 1>almost like I first wanted to understand the fundamentals of

346
00:17:38.119 --> 00:17:41.759
<v Speaker 1>front end development before I went into frameworks that would

347
00:17:41.759 --> 00:17:45.960
<v Speaker 1>abstract that way, so that I have the knowledge of

348
00:17:46.079 --> 00:17:49.119
<v Speaker 1>what's going on under the hood. But you're also correct

349
00:17:49.119 --> 00:17:51.880
<v Speaker 1>in the sense that I use mongo deb without knowing

350
00:17:51.960 --> 00:17:55.279
<v Speaker 1>how it actually stores the data. I just use it.

351
00:17:55.279 --> 00:17:58.960
<v Speaker 1>It almost feels like MongoDB is the lowest level, but

352
00:17:59.039 --> 00:18:03.680
<v Speaker 1>it's not. It's like still a high level abstraction. Sequel

353
00:18:03.880 --> 00:18:08.400
<v Speaker 1>is still a high level abstraction within how the data

354
00:18:08.519 --> 00:18:12.480
<v Speaker 1>is actually stored and retrieved internally in the SQL database.

355
00:18:12.960 --> 00:18:15.559
<v Speaker 1>So I think you touched on a good point from

356
00:18:15.559 --> 00:18:19.559
<v Speaker 1>your experience dealing with people that are starting out with

357
00:18:19.759 --> 00:18:24.319
<v Speaker 1>events sourcing. Is it also very common to have people

358
00:18:24.359 --> 00:18:29.480
<v Speaker 1>that fear this abstraction layer and why do you think

359
00:18:30.039 --> 00:18:35.559
<v Speaker 1>that is the case versus other abstractions that already exist

360
00:18:35.640 --> 00:18:38.599
<v Speaker 1>and people are comfortable with. I think graph ql can

361
00:18:38.640 --> 00:18:43.119
<v Speaker 1>be a good analogy because in a way, people are

362
00:18:43.279 --> 00:18:49.480
<v Speaker 1>very comfortable with just creating rest API routes and just

363
00:18:49.559 --> 00:18:53.240
<v Speaker 1>doing it, but express it. Although express is an abstraction,

364
00:18:53.480 --> 00:18:58.759
<v Speaker 1>it does feel low level enough. I know that somebody

365
00:18:58.799 --> 00:19:00.920
<v Speaker 1>is gonna hate on me because saying low level for

366
00:19:01.039 --> 00:19:05.200
<v Speaker 1>something like express as whatever, but it does feel because

367
00:19:05.240 --> 00:19:09.000
<v Speaker 1>you have a lot of control over how the handlers

368
00:19:09.000 --> 00:19:13.440
<v Speaker 1>are being created versus if you're using an abstraction on

369
00:19:13.480 --> 00:19:17.960
<v Speaker 1>top of Graphql. There are some very very opinionated ones,

370
00:19:18.119 --> 00:19:20.839
<v Speaker 1>like a pole server being maybe one of the most

371
00:19:20.880 --> 00:19:26.079
<v Speaker 1>opinionated ones. So maybe event sourcing can be compared to it,

372
00:19:26.279 --> 00:19:29.200
<v Speaker 1>like events and abstractions in the back end could be

373
00:19:29.279 --> 00:19:33.279
<v Speaker 1>compared to Graphql abstractions in the sense that you want

374
00:19:33.319 --> 00:19:36.599
<v Speaker 1>to know how it's working under the hood, but at

375
00:19:36.599 --> 00:19:39.519
<v Speaker 1>the same time, why do you need it? You know?

376
00:19:40.319 --> 00:19:41.720
<v Speaker 2>Yeah, I think so.

377
00:19:42.000 --> 00:19:46.000
<v Speaker 3>I mean it as everything, there's new ones always right,

378
00:19:46.079 --> 00:19:50.200
<v Speaker 3>and I think it's a fair fair thing to call

379
00:19:50.240 --> 00:19:52.599
<v Speaker 3>out graphql.

380
00:19:52.440 --> 00:19:55.279
<v Speaker 2>Because yeah, you know, people like to understand it two

381
00:19:55.279 --> 00:19:56.079
<v Speaker 2>different degrees.

382
00:19:56.640 --> 00:20:00.680
<v Speaker 3>I would point out that in general, where I see

383
00:20:00.720 --> 00:20:03.480
<v Speaker 3>people that are most excited about events sourcing and that

384
00:20:03.559 --> 00:20:04.680
<v Speaker 3>spend the most.

385
00:20:04.400 --> 00:20:06.640
<v Speaker 2>Time in learning it are people that are.

386
00:20:06.599 --> 00:20:09.319
<v Speaker 3>Closer to the beginning of their careers, because it seems like,

387
00:20:09.359 --> 00:20:12.319
<v Speaker 3>oh my gosh, there's so much technical content here. Right,

388
00:20:12.359 --> 00:20:15.319
<v Speaker 3>some subjects you can only go so far before it

389
00:20:15.359 --> 00:20:16.799
<v Speaker 3>starts feeling a little bit too abstract.

390
00:20:16.799 --> 00:20:17.440
<v Speaker 2>There's too much.

391
00:20:17.359 --> 00:20:19.759
<v Speaker 3>Mathematics and it so it's maybe a bit discouraging, Whereas

392
00:20:19.799 --> 00:20:22.119
<v Speaker 3>event sourcing is quite rich in that there's a lot

393
00:20:22.160 --> 00:20:26.680
<v Speaker 3>to learn, especially because today, and it's something we're trying

394
00:20:26.680 --> 00:20:30.400
<v Speaker 3>to solve with our free course today. Learning events sourcing

395
00:20:30.480 --> 00:20:36.000
<v Speaker 3>still feels like going to that planet that Luke Skywalker

396
00:20:36.039 --> 00:20:40.240
<v Speaker 3>goes to in Star Wars to find Master Yoda, where it's,

397
00:20:40.279 --> 00:20:42.400
<v Speaker 3>oh my gosh, I'm going to go and find some hermit.

398
00:20:42.119 --> 00:20:43.599
<v Speaker 2>That's going to teach me all about this stuff.

399
00:20:43.680 --> 00:20:46.640
<v Speaker 3>And that feels exciting, right because it feels quite unique,

400
00:20:47.000 --> 00:20:50.119
<v Speaker 3>and I think that's the reason that people are wanting to,

401
00:20:50.599 --> 00:20:54.720
<v Speaker 3>you know, dive deeper into it. But you know, I mean,

402
00:20:54.799 --> 00:20:56.599
<v Speaker 3>I've been around for a bit and I can tell

403
00:20:56.599 --> 00:20:59.680
<v Speaker 3>you that the most successful engineers that I know have

404
00:20:59.799 --> 00:21:02.400
<v Speaker 3>all always known how to balance that out right, understand

405
00:21:02.519 --> 00:21:04.799
<v Speaker 3>just enough and perhaps a little bit more to be

406
00:21:04.839 --> 00:21:07.599
<v Speaker 3>able to judge that you know just enough so that

407
00:21:07.640 --> 00:21:10.559
<v Speaker 3>you can then build something for your business, right, and

408
00:21:10.599 --> 00:21:13.279
<v Speaker 3>you keep both of those in check. You obviously don't

409
00:21:13.279 --> 00:21:15.079
<v Speaker 3>want to accrue too much technical debt, but at the

410
00:21:15.079 --> 00:21:17.480
<v Speaker 3>same time you don't want to crue too much business.

411
00:21:17.480 --> 00:21:19.200
<v Speaker 3>Then it's something that we talk about very little, right,

412
00:21:19.240 --> 00:21:21.920
<v Speaker 3>Like what about there's technical that's sure, but there's business

413
00:21:21.960 --> 00:21:24.440
<v Speaker 3>that as well, right where you're spending some time implementing

414
00:21:25.039 --> 00:21:28.799
<v Speaker 3>some technical things that are pretty great, but at the

415
00:21:28.839 --> 00:21:30.680
<v Speaker 3>cost of slowing down in the business, right, So you

416
00:21:30.720 --> 00:21:32.599
<v Speaker 3>need to balance both of them now, And I would

417
00:21:32.640 --> 00:21:34.759
<v Speaker 3>say that the engineers who will be the most successful

418
00:21:34.759 --> 00:21:36.839
<v Speaker 3>of event sourcing are the ones that can make the

419
00:21:36.880 --> 00:21:42.079
<v Speaker 3>distinction and understand that they need to get a little

420
00:21:42.079 --> 00:21:44.920
<v Speaker 3>bit of both. Now, in the sense of the comparison

421
00:21:45.559 --> 00:21:48.039
<v Speaker 3>to graph you out, I think something similar happens there

422
00:21:48.119 --> 00:21:52.680
<v Speaker 3>right where there are engineers that understand how the how

423
00:21:52.680 --> 00:21:56.319
<v Speaker 3>the runtime engine works and understand that and use it

424
00:21:56.359 --> 00:21:58.599
<v Speaker 3>to for the better of their applications.

425
00:21:58.839 --> 00:22:00.079
<v Speaker 2>But maybe you don't need.

426
00:22:00.240 --> 00:22:01.720
<v Speaker 3>Right like maybe you need to understand it just to

427
00:22:01.720 --> 00:22:03.480
<v Speaker 3>a degree, or maybe you only need one person in

428
00:22:03.519 --> 00:22:04.480
<v Speaker 3>your team to understand that.

429
00:22:04.680 --> 00:22:04.839
<v Speaker 2>Right.

430
00:22:05.119 --> 00:22:09.200
<v Speaker 3>So there are parallels there, I'd say, And I would

431
00:22:09.359 --> 00:22:11.920
<v Speaker 3>suggest with event sourcing to learn more about the parts

432
00:22:11.920 --> 00:22:14.240
<v Speaker 3>that are relevant to the business and not the parts

433
00:22:14.240 --> 00:22:18.160
<v Speaker 3>that are implementation details for which there are plenty of things,

434
00:22:18.519 --> 00:22:21.599
<v Speaker 3>plenty of resources out there that could help you implement it.

435
00:22:21.759 --> 00:22:24.039
<v Speaker 3>My recommendation is that maybe you get one person on

436
00:22:24.039 --> 00:22:27.200
<v Speaker 3>your team to understand that very deeply and guide the

437
00:22:27.279 --> 00:22:27.599
<v Speaker 3>rest of.

438
00:22:27.559 --> 00:22:29.519
<v Speaker 2>It the team, but the rest of the team should

439
00:22:29.759 --> 00:22:31.519
<v Speaker 2>just understand the.

440
00:22:31.480 --> 00:22:34.559
<v Speaker 3>Business concepts and core building blocks from a coding perspective.

441
00:22:34.839 --> 00:22:37.480
<v Speaker 1>Yeah, that does make it a lot of sense. Okay,

442
00:22:37.680 --> 00:22:40.960
<v Speaker 1>let's talk a little bit more about the possible abstractions

443
00:22:41.000 --> 00:22:43.920
<v Speaker 1>that exist to simplify the lives of people that are

444
00:22:43.960 --> 00:22:47.880
<v Speaker 1>getting into events servicing. Of course, there's unbar right, and

445
00:22:47.960 --> 00:22:51.640
<v Speaker 1>it solves a lot of a lot of problems. But

446
00:22:52.000 --> 00:22:54.319
<v Speaker 1>besides that, and I think we can also talk a

447
00:22:54.359 --> 00:22:57.200
<v Speaker 1>little bit more about that, like which exact problems this

448
00:22:57.640 --> 00:23:00.359
<v Speaker 1>umbar would solve versus how you would do it work

449
00:23:00.480 --> 00:23:05.000
<v Speaker 1>without it, But also are there other abstractions that you

450
00:23:05.000 --> 00:23:08.119
<v Speaker 1>would recommend? And keep in mind that for people that

451
00:23:08.200 --> 00:23:11.880
<v Speaker 1>are doing React on the front end, they are most usually,

452
00:23:12.000 --> 00:23:15.000
<v Speaker 1>not always, but most usually also doing no JS in

453
00:23:15.039 --> 00:23:18.400
<v Speaker 1>the back end. That is definitely the most popular stack

454
00:23:18.559 --> 00:23:24.799
<v Speaker 1>for those for front end developers, So do you recommend

455
00:23:24.920 --> 00:23:28.640
<v Speaker 1>any frameworks or libraries for those running no JASS in

456
00:23:28.680 --> 00:23:32.119
<v Speaker 1>the back end? That would allow them to more quickly

457
00:23:33.240 --> 00:23:36.799
<v Speaker 1>jumpstart an event sourcing back end.

458
00:23:37.759 --> 00:23:41.319
<v Speaker 3>So I know that there are some frameworks that abstract

459
00:23:41.960 --> 00:23:44.839
<v Speaker 3>events sourcing as a whole right, but unfortunately they can

460
00:23:44.880 --> 00:23:47.680
<v Speaker 3>be quite opinionated and restrict you. What I would say

461
00:23:47.720 --> 00:23:49.799
<v Speaker 3>that you should go and grab from a framework, and

462
00:23:49.799 --> 00:23:53.799
<v Speaker 3>it doesn't necessarily have to be a framework for typescript,

463
00:23:54.160 --> 00:23:56.440
<v Speaker 3>you can grab it from essentially any framework is the

464
00:23:56.440 --> 00:23:59.839
<v Speaker 3>schema that you need for your event store, and you

465
00:23:59.880 --> 00:24:02.960
<v Speaker 3>can either do something very similar to the schema that

466
00:24:03.359 --> 00:24:06.880
<v Speaker 3>specialized events sourcing database like events for deb or axnic do,

467
00:24:07.759 --> 00:24:11.000
<v Speaker 3>or you can go and look at certain really great

468
00:24:11.039 --> 00:24:17.720
<v Speaker 3>libraries like message TV for example, UH or there's a

469
00:24:17.759 --> 00:24:22.160
<v Speaker 3>proof in pH B, there's h events stalls, there is

470
00:24:23.839 --> 00:24:27.119
<v Speaker 3>ecotne UH, and there's there are quite a few libraries

471
00:24:27.119 --> 00:24:29.160
<v Speaker 3>that at least give you the schema and give you

472
00:24:29.200 --> 00:24:31.400
<v Speaker 3>the patterns that you need. Beyond that, you don't need

473
00:24:31.480 --> 00:24:33.960
<v Speaker 3>very much. Everything in events sourceing intends to be just

474
00:24:34.440 --> 00:24:38.480
<v Speaker 3>a UH you know, implementing the same for patterns, or

475
00:24:38.519 --> 00:24:44.119
<v Speaker 3>you're writing, reading, UH, processing or reacting with other events,

476
00:24:44.200 --> 00:24:46.279
<v Speaker 3>and you don't really need.

477
00:24:46.200 --> 00:24:46.960
<v Speaker 2>A framework for that.

478
00:24:47.079 --> 00:24:48.799
<v Speaker 3>So what I say is the most important thing is

479
00:24:48.839 --> 00:24:51.839
<v Speaker 3>just grabbing the schema uh and making that correct for

480
00:24:51.880 --> 00:24:55.519
<v Speaker 3>the place where you're storing your events, and use a

481
00:24:55.839 --> 00:24:58.839
<v Speaker 3>you know, pick up, pick a good good database, right,

482
00:24:58.839 --> 00:25:02.680
<v Speaker 3>don't implement your own events or yourself. Just pick postcrists,

483
00:25:02.799 --> 00:25:07.079
<v Speaker 3>pick my sequel, pick SQL server in jascript is probably

484
00:25:07.160 --> 00:25:09.559
<v Speaker 3>very unlikely to pick seckl server maybe if you're doing

485
00:25:09.640 --> 00:25:13.960
<v Speaker 3>dot net. But yeah, you can also pick no sequel

486
00:25:14.680 --> 00:25:17.039
<v Speaker 3>events stores. I generally don't recommend those because they are

487
00:25:17.039 --> 00:25:18.279
<v Speaker 3>a little bit harder to maintain.

488
00:25:18.519 --> 00:25:19.359
<v Speaker 2>I recommend that.

489
00:25:19.400 --> 00:25:23.440
<v Speaker 3>On the other side, when you're processing your events, you

490
00:25:23.480 --> 00:25:26.559
<v Speaker 3>can also pick an event stor like AXNIC or events

491
00:25:26.640 --> 00:25:29.759
<v Speaker 3>or dB that specialize in event sourcing.

492
00:25:29.880 --> 00:25:32.200
<v Speaker 2>But the problem that is that sometimes you might.

493
00:25:32.079 --> 00:25:35.279
<v Speaker 3>Want to have some cheat codes and they limit the

494
00:25:35.279 --> 00:25:37.039
<v Speaker 3>functionality of the set of things that you can do.

495
00:25:37.240 --> 00:25:38.200
<v Speaker 2>So if you ask me for.

496
00:25:38.359 --> 00:25:40.799
<v Speaker 3>You know, as you know, classic stack, how I would

497
00:25:40.799 --> 00:25:43.039
<v Speaker 3>do it today. I would just go and look at

498
00:25:43.079 --> 00:25:47.240
<v Speaker 3>a schema and from one of these big libraries. I

499
00:25:47.359 --> 00:25:51.400
<v Speaker 3>would use something like post christ to commit my events.

500
00:25:51.759 --> 00:25:56.480
<v Speaker 3>I would use something like Ambar to do my messaging.

501
00:25:56.759 --> 00:26:00.759
<v Speaker 3>And I would use Dynamo dB or COSMOSDB or whatever

502
00:26:01.160 --> 00:26:02.240
<v Speaker 3>or Mongo DEB whatever.

503
00:26:03.680 --> 00:26:06.519
<v Speaker 2>No sequel flavor you want for your processing.

504
00:26:06.079 --> 00:26:08.160
<v Speaker 3>Because something key that I don't think I quite mentioned

505
00:26:08.200 --> 00:26:10.160
<v Speaker 3>is that in events stressying, right, you need to build

506
00:26:10.200 --> 00:26:13.279
<v Speaker 3>your state. In that state, you might need to rebuild it.

507
00:26:13.599 --> 00:26:15.680
<v Speaker 2>So imagine and if you in your.

508
00:26:16.880 --> 00:26:19.720
<v Speaker 3>In your application in the front end, I asked you

509
00:26:19.799 --> 00:26:22.559
<v Speaker 3>take all the historical events and build the state from

510
00:26:22.559 --> 00:26:25.240
<v Speaker 3>scratch and apply all those fear functions again and again

511
00:26:25.240 --> 00:26:27.599
<v Speaker 3>and again and again. The place where you're depositing and

512
00:26:27.599 --> 00:26:32.079
<v Speaker 3>storing that state needs to be very scalable. And but

513
00:26:32.160 --> 00:26:36.240
<v Speaker 3>it doesn't need to have some consistency guarantees that you

514
00:26:36.279 --> 00:26:39.799
<v Speaker 3>would need on your writing because you don't need You

515
00:26:40.160 --> 00:26:41.039
<v Speaker 3>simply don't need those.

516
00:26:41.039 --> 00:26:43.599
<v Speaker 2>So the easiest thing to do is just to use

517
00:26:43.599 --> 00:26:45.359
<v Speaker 2>a no SQL database on that other end.

518
00:26:45.400 --> 00:26:47.920
<v Speaker 3>So again, to summarize, take a nice schema by looking

519
00:26:47.920 --> 00:26:49.960
<v Speaker 3>at the great libraries that are out there.

520
00:26:50.799 --> 00:26:51.839
<v Speaker 2>You can just look them up.

521
00:26:52.240 --> 00:26:55.039
<v Speaker 3>And I think stars of GitHub is a is a decent,

522
00:26:55.960 --> 00:27:00.599
<v Speaker 3>decent heuristic. Pick Postcris, pick Amber or system that does

523
00:27:00.599 --> 00:27:02.519
<v Speaker 3>something like Umbar if you take our course will tell

524
00:27:02.519 --> 00:27:04.799
<v Speaker 3>you how to implement it yourself, and then pick Dynamo

525
00:27:04.839 --> 00:27:07.759
<v Speaker 3>deb for your read model storage.

526
00:27:08.000 --> 00:27:13.160
<v Speaker 1>Okay, perfect. I think this is a pretty good for

527
00:27:14.119 --> 00:27:19.160
<v Speaker 1>people that want to start and try it out. What

528
00:27:19.240 --> 00:27:23.599
<v Speaker 1>about you, Peter creates any specific questions this far?

529
00:27:24.519 --> 00:27:26.880
<v Speaker 5>Yeah, no really, I think it is kind of will

530
00:27:26.960 --> 00:27:31.079
<v Speaker 5>explain actually the uses the use kiss on then like

531
00:27:31.599 --> 00:27:34.000
<v Speaker 5>also advice on when to use it, on how to

532
00:27:34.119 --> 00:27:36.119
<v Speaker 5>use it. I think that was kind of core.

533
00:27:36.319 --> 00:27:39.640
<v Speaker 2>Yeah, that's fair. So I'd say that you need to

534
00:27:39.759 --> 00:27:40.640
<v Speaker 2>so in our.

535
00:27:40.559 --> 00:27:42.799
<v Speaker 3>Course we cover the pros and cons right, and we

536
00:27:42.880 --> 00:27:45.279
<v Speaker 3>cover benefits and drawbacks and when it's a good idea

537
00:27:45.319 --> 00:27:47.240
<v Speaker 3>to use it. If your application is going to be

538
00:27:47.319 --> 00:27:50.480
<v Speaker 3>changing very often, so if your requirements change all the time.

539
00:27:50.920 --> 00:27:51.920
<v Speaker 2>Consider eventsurcing.

540
00:27:52.359 --> 00:27:58.400
<v Speaker 3>If your application has a process driven feature set, so

541
00:27:58.559 --> 00:28:01.680
<v Speaker 3>you know you're handling money and your state is changing

542
00:28:01.680 --> 00:28:03.759
<v Speaker 3>all the time, you're shipping items.

543
00:28:03.400 --> 00:28:04.759
<v Speaker 2>You need to track where things are.

544
00:28:06.079 --> 00:28:10.160
<v Speaker 3>Consider event sourcing if you need to have auditability just

545
00:28:10.519 --> 00:28:13.759
<v Speaker 3>by design, so if you're financial services, event surcing is

546
00:28:13.839 --> 00:28:15.200
<v Speaker 3>almost a requirement.

547
00:28:15.319 --> 00:28:17.039
<v Speaker 2>You need to have some sort of leisure, like when

548
00:28:17.039 --> 00:28:18.440
<v Speaker 2>you're doing accounting.

549
00:28:19.160 --> 00:28:19.240
<v Speaker 4>And.

550
00:28:20.839 --> 00:28:25.279
<v Speaker 3>If you think that you need to have a capability

551
00:28:25.319 --> 00:28:29.359
<v Speaker 3>to debug more easily and you want that speed.

552
00:28:29.920 --> 00:28:32.359
<v Speaker 2>If all of those things line up, then events sourcing

553
00:28:32.799 --> 00:28:34.960
<v Speaker 2>is for you. However, there are some drawbacks. The community

554
00:28:35.039 --> 00:28:36.920
<v Speaker 2>is small, so you don't.

555
00:28:36.720 --> 00:28:39.279
<v Speaker 3>Have a lot of help if you want to get

556
00:28:39.319 --> 00:28:44.000
<v Speaker 3>people to actually collaborate with you so they answer your questions.

557
00:28:44.039 --> 00:28:46.279
<v Speaker 2>It's not like every it's not like react or.

558
00:28:47.079 --> 00:28:50.079
<v Speaker 3>The community is very small, So I recommend that you

559
00:28:50.119 --> 00:28:52.720
<v Speaker 3>know that upfront and that you educate yourself. But if

560
00:28:52.720 --> 00:28:55.119
<v Speaker 3>you can get past that initial cost of education and

561
00:28:55.160 --> 00:28:57.880
<v Speaker 3>a little bit of infrastructure setup, and you have a

562
00:28:57.960 --> 00:29:02.920
<v Speaker 3>changing application, you have auditability requirements, or you have a

563
00:29:03.000 --> 00:29:05.720
<v Speaker 3>very complex feature set that is very process driven, then

564
00:29:05.880 --> 00:29:08.960
<v Speaker 3>consider event sourcing. But as with everything, the devil's and

565
00:29:09.000 --> 00:29:11.160
<v Speaker 3>details and you should use critical thinking.

566
00:29:11.200 --> 00:29:12.319
<v Speaker 2>Now, as for how to.

567
00:29:12.279 --> 00:29:15.640
<v Speaker 3>Do it well, the recommendation would be talk to people

568
00:29:15.640 --> 00:29:16.559
<v Speaker 3>that have done it before.

569
00:29:17.119 --> 00:29:21.440
<v Speaker 5>Yeah, that's that's for size grouds. That's weird. Do you

570
00:29:21.440 --> 00:29:22.680
<v Speaker 5>have any question as well?

571
00:29:23.119 --> 00:29:26.880
<v Speaker 4>Yeah, Louis who basically kind of answered my question already

572
00:29:27.240 --> 00:29:30.319
<v Speaker 4>now I was going to ask. So we talked about

573
00:29:30.559 --> 00:29:33.640
<v Speaker 4>kind of how it can event sourcing can kind of

574
00:29:33.680 --> 00:29:37.119
<v Speaker 4>simplify or at least make it easier for your organization

575
00:29:37.240 --> 00:29:41.319
<v Speaker 4>to reduce regressions or over complex functions, and then you

576
00:29:41.480 --> 00:29:44.279
<v Speaker 4>kind of I was thinking that, of course, auditing is

577
00:29:44.799 --> 00:29:47.960
<v Speaker 4>naturally easier you have you have an event for everything

578
00:29:47.960 --> 00:29:52.759
<v Speaker 4>that happens. Are there any other I guess like easy

579
00:29:52.839 --> 00:29:56.240
<v Speaker 4>wins or advantages you could mention that you can think

580
00:29:56.319 --> 00:30:01.680
<v Speaker 4>of with event sourcing versus something like the traditional monolith

581
00:30:01.960 --> 00:30:03.599
<v Speaker 4>crud application.

582
00:30:04.240 --> 00:30:07.319
<v Speaker 3>Yeah. So it helps you decouple things as well, and

583
00:30:07.359 --> 00:30:09.599
<v Speaker 3>it helps you read, so it helps you reason about things, right,

584
00:30:09.599 --> 00:30:11.039
<v Speaker 3>it helps you decouple.

585
00:30:11.160 --> 00:30:15.400
<v Speaker 2>Your teams, and it just really.

586
00:30:16.880 --> 00:30:22.000
<v Speaker 3>It really as an organization, right when you're a certain size,

587
00:30:22.039 --> 00:30:24.119
<v Speaker 3>it means that you don't have to bother other people.

588
00:30:24.400 --> 00:30:26.519
<v Speaker 3>So it's not only about the capability that you have

589
00:30:26.559 --> 00:30:29.039
<v Speaker 3>to reason about it just yourself, but also the capability

590
00:30:29.039 --> 00:30:32.000
<v Speaker 3>that you have to reason about it independently from others.

591
00:30:32.519 --> 00:30:37.920
<v Speaker 1>Awesome. Yeah, Okay, of course, guys, we only really touch

592
00:30:38.000 --> 00:30:41.079
<v Speaker 1>the surface. There is a lot more that we could

593
00:30:41.119 --> 00:30:45.200
<v Speaker 1>talk about in terms of event sourcing, especially like how

594
00:30:45.240 --> 00:30:49.160
<v Speaker 1>to scale it, and like the common structures that companies

595
00:30:49.400 --> 00:30:55.240
<v Speaker 1>like big companies use to scale their their distributed systems,

596
00:30:55.279 --> 00:30:58.319
<v Speaker 1>and also some of the other drawbacks of distributed systems,

597
00:30:58.359 --> 00:31:02.920
<v Speaker 1>like the fact that you don't get consistency immediately, so

598
00:31:03.039 --> 00:31:05.400
<v Speaker 1>it might take a little while for the entire system

599
00:31:05.440 --> 00:31:09.200
<v Speaker 1>to process the request. So once you Right now, we

600
00:31:09.240 --> 00:31:12.319
<v Speaker 1>are very used to making a post request and then

601
00:31:12.400 --> 00:31:16.240
<v Speaker 1>making a gut right immediately after that and expecting the

602
00:31:16.319 --> 00:31:19.960
<v Speaker 1>data to be there because we just made a post request.

603
00:31:20.119 --> 00:31:24.440
<v Speaker 1>With distributed systems, that might not be the case, at

604
00:31:24.559 --> 00:31:27.839
<v Speaker 1>least immediately, because you basically send the event and it

605
00:31:27.920 --> 00:31:31.440
<v Speaker 1>takes a while for everything to process that event and

606
00:31:31.640 --> 00:31:35.200
<v Speaker 1>update the read layers so that the data is actually

607
00:31:35.240 --> 00:31:39.279
<v Speaker 1>there for you to retrieve. So there are definitely some

608
00:31:39.279 --> 00:31:43.799
<v Speaker 1>some other complexities that go with that go with this approach,

609
00:31:44.079 --> 00:31:49.279
<v Speaker 1>but there's also a lot of scalability benefits as well,

610
00:31:49.359 --> 00:31:55.000
<v Speaker 1>and we didn't even touched on that yet, but I

611
00:31:55.119 --> 00:31:58.720
<v Speaker 1>wanted to know if this is a subject that you

612
00:31:58.759 --> 00:32:02.480
<v Speaker 1>guys think we can we can briefly touch upon before

613
00:32:02.519 --> 00:32:06.000
<v Speaker 1>wrapping up, because I'm also looking at the time and

614
00:32:06.039 --> 00:32:10.200
<v Speaker 1>I don't want to make this too extensive for the audience,

615
00:32:10.279 --> 00:32:13.400
<v Speaker 1>but perhaps we could at least touch upon that, just

616
00:32:13.440 --> 00:32:16.759
<v Speaker 1>so that people are aware of the drawbacks of going

617
00:32:16.799 --> 00:32:17.640
<v Speaker 1>in that route.

618
00:32:18.759 --> 00:32:22.839
<v Speaker 3>So let me perhaps at least get the party started

619
00:32:22.880 --> 00:32:26.200
<v Speaker 3>and try to be succinct and short and sweet with it.

620
00:32:26.799 --> 00:32:34.119
<v Speaker 3>So with events or thing you are picking where your scalability, how.

621
00:32:33.960 --> 00:32:35.359
<v Speaker 2>To implement your scalability.

622
00:32:35.400 --> 00:32:38.000
<v Speaker 3>So if you think about scalability, right, if you need

623
00:32:38.039 --> 00:32:40.279
<v Speaker 3>to do things in parallel, you cannot do it in

624
00:32:40.319 --> 00:32:42.880
<v Speaker 3>such a way. Parallel is the opposite of sequential, right.

625
00:32:43.039 --> 00:32:45.559
<v Speaker 3>So if you're doing you know, the hash of a

626
00:32:45.599 --> 00:32:47.279
<v Speaker 3>hash of a hash of a hash of a hash

627
00:32:47.279 --> 00:32:49.480
<v Speaker 3>of a hash, well, you need the results in order

628
00:32:49.519 --> 00:32:51.240
<v Speaker 3>to be able to calculate the next hash, right, and

629
00:32:51.279 --> 00:32:53.839
<v Speaker 3>so on and so forth. So if you are just

630
00:32:53.920 --> 00:32:57.680
<v Speaker 3>doing an eternal hash of the same thing, you can't

631
00:32:57.720 --> 00:32:59.720
<v Speaker 3>really scale them, right, because it's just the same I

632
00:32:59.720 --> 00:33:01.279
<v Speaker 3>think that you have to do in a single thread.

633
00:33:01.640 --> 00:33:05.119
<v Speaker 2>Now, in events sorting, you're essentially picking.

634
00:33:04.759 --> 00:33:07.440
<v Speaker 3>Where those boundaries are, right, and you say, you know

635
00:33:07.519 --> 00:33:08.000
<v Speaker 3>what I have.

636
00:33:08.400 --> 00:33:10.000
<v Speaker 2>I'm going to simplify it and just call it an.

637
00:33:10.000 --> 00:33:13.920
<v Speaker 3>Entity, but you specify where those scalability boundaries are.

638
00:33:14.000 --> 00:33:15.799
<v Speaker 2>So, for example, you say, you know what, I'm going.

639
00:33:15.799 --> 00:33:19.599
<v Speaker 3>To process all the events for a user profile, not

640
00:33:19.680 --> 00:33:22.200
<v Speaker 3>just for a user for a user profile, just in

641
00:33:22.240 --> 00:33:24.880
<v Speaker 3>the same stream. I'm going to process all the events

642
00:33:24.920 --> 00:33:30.119
<v Speaker 3>for a certain dispatchment from the warehouse, all in the

643
00:33:30.119 --> 00:33:33.559
<v Speaker 3>same stream. I'm going to process a bank account all

644
00:33:33.599 --> 00:33:35.400
<v Speaker 3>in the same stream. Or maybe I don't want to

645
00:33:35.400 --> 00:33:37.279
<v Speaker 3>process the bank account in the same stream. Maybe what

646
00:33:37.359 --> 00:33:39.960
<v Speaker 3>I want to do is process all the events for

647
00:33:40.039 --> 00:33:44.240
<v Speaker 3>the same account cycle for the month in the same stream.

648
00:33:44.680 --> 00:33:47.559
<v Speaker 3>And it essentially makes you think from the get go

649
00:33:47.960 --> 00:33:51.279
<v Speaker 3>of where those boundaries lie, so that you can know

650
00:33:51.599 --> 00:33:55.039
<v Speaker 3>where you can paralyze the work and which events will

651
00:33:55.079 --> 00:33:58.440
<v Speaker 3>be a synchronous and which ones will be asynchronous. So

652
00:33:58.720 --> 00:34:01.119
<v Speaker 3>if you have something that's happening side the same user profile,

653
00:34:01.200 --> 00:34:04.319
<v Speaker 3>for example, you might have some validation rules that allow

654
00:34:04.359 --> 00:34:08.239
<v Speaker 3>you to say, hey, I can only you know, become

655
00:34:08.400 --> 00:34:11.920
<v Speaker 3>a I can only add a secondary email if I

656
00:34:12.079 --> 00:34:14.119
<v Speaker 3>verified my first or for example, that's you know, a

657
00:34:14.119 --> 00:34:17.519
<v Speaker 3>simple validation rule that you could do transactionally. Now you

658
00:34:17.559 --> 00:34:21.639
<v Speaker 3>cannot quite do a validation against, you know, something that

659
00:34:21.719 --> 00:34:24.440
<v Speaker 3>is not in that same stream of events and an

660
00:34:24.480 --> 00:34:26.719
<v Speaker 3>events sorting. You essentially are asked from the get go

661
00:34:27.119 --> 00:34:29.239
<v Speaker 3>think about where your boundaries are so that.

662
00:34:29.119 --> 00:34:31.760
<v Speaker 2>If you do need to scale your system, you have

663
00:34:31.840 --> 00:34:34.079
<v Speaker 2>already built it.

664
00:34:34.679 --> 00:34:37.199
<v Speaker 3>Build your system in such a way that you recognize

665
00:34:37.239 --> 00:34:41.440
<v Speaker 3>what's asynchronous and comes from other streams, and it is

666
00:34:41.480 --> 00:34:43.199
<v Speaker 3>synchronous and comes from the same stream.

667
00:34:43.599 --> 00:34:50.079
<v Speaker 1>Yep, that's a that's a very very succent way to

668
00:34:50.159 --> 00:34:55.559
<v Speaker 1>put it definitely a lot of This also opens up

669
00:34:55.599 --> 00:34:59.440
<v Speaker 1>a lot of other questions. But again, if anyone wants

670
00:34:59.480 --> 00:35:01.440
<v Speaker 1>to dive do g onto that, they can just sign

671
00:35:01.559 --> 00:35:04.679
<v Speaker 1>up for the free course that Umbar offers. So just

672
00:35:04.760 --> 00:35:09.519
<v Speaker 1>go to Umbar dot cloud slash e s C for

673
00:35:10.280 --> 00:35:13.840
<v Speaker 1>which stands for Events Sourcing Course and then you can

674
00:35:13.880 --> 00:35:17.559
<v Speaker 1>sign up for a free course so long as it's

675
00:35:18.519 --> 00:35:21.599
<v Speaker 1>remaining free. So definitely don't don't take too long to

676
00:35:22.000 --> 00:35:25.599
<v Speaker 1>do it because as I said before, I do think

677
00:35:25.639 --> 00:35:28.960
<v Speaker 1>that Louis should start charting for that, so make sure

678
00:35:28.719 --> 00:35:32.159
<v Speaker 1>you do it well. He's still doing it for free

679
00:35:32.280 --> 00:35:36.960
<v Speaker 1>because there's a ton of value pack onto that, all right,

680
00:35:37.079 --> 00:35:39.760
<v Speaker 1>So I think that for me, maybe we can start

681
00:35:40.280 --> 00:35:44.440
<v Speaker 1>wrapping it up. And before I do so, Chris Peter,

682
00:35:44.639 --> 00:35:47.639
<v Speaker 1>do you guys are good? Do you want to make

683
00:35:47.679 --> 00:35:50.239
<v Speaker 1>any any last questions on this subject?

684
00:35:50.639 --> 00:35:53.719
<v Speaker 5>Yeah, I'm good, I think he answered. Yeah, Louis answered

685
00:35:53.719 --> 00:35:54.920
<v Speaker 5>every question perfectly.

686
00:35:55.119 --> 00:35:58.760
<v Speaker 2>Yeah, that was good.

687
00:35:57.639 --> 00:36:04.320
<v Speaker 4>On one last question, maybe it's not even applicable. How

688
00:36:04.639 --> 00:36:07.159
<v Speaker 4>how do you look at or yeah? Is it even

689
00:36:07.159 --> 00:36:10.159
<v Speaker 4>a consideration when you have a sort of migration, right,

690
00:36:10.199 --> 00:36:12.280
<v Speaker 4>so you have your entity. I don't know I have

691
00:36:12.360 --> 00:36:15.280
<v Speaker 4>first first name in last name. Let's say I have

692
00:36:15.400 --> 00:36:17.880
<v Speaker 4>middle name. Now is that just become a new event

693
00:36:18.039 --> 00:36:20.760
<v Speaker 4>or are there different strategies or or how does that

694
00:36:21.039 --> 00:36:22.679
<v Speaker 4>look in event sourcing?

695
00:36:23.679 --> 00:36:26.280
<v Speaker 3>So it forces you to recognize this right away, right

696
00:36:26.280 --> 00:36:27.000
<v Speaker 3>because in.

697
00:36:27.119 --> 00:36:28.679
<v Speaker 2>Traditional applications, what do you do?

698
00:36:28.719 --> 00:36:31.000
<v Speaker 3>You add a column to the database and you leave

699
00:36:31.000 --> 00:36:34.400
<v Speaker 3>it empty, right, and you make it knowable and very interesting.

700
00:36:34.400 --> 00:36:37.840
<v Speaker 3>It's something simple where something similar, sorry, where you have

701
00:36:37.960 --> 00:36:40.480
<v Speaker 3>to now reason about, well, what does my current state

702
00:36:40.519 --> 00:36:43.000
<v Speaker 3>look like if I have never had a middle name event.

703
00:36:43.280 --> 00:36:45.719
<v Speaker 3>So what you would traditionally do is you would add

704
00:36:45.760 --> 00:36:47.639
<v Speaker 3>new event altogether where in your sign of.

705
00:36:47.880 --> 00:36:49.519
<v Speaker 2>Maybe you require that middle name.

706
00:36:50.159 --> 00:36:53.360
<v Speaker 3>And if if you can now see that there will

707
00:36:53.360 --> 00:36:56.840
<v Speaker 3>be times where you have this new sign up version

708
00:36:57.599 --> 00:36:59.960
<v Speaker 3>and times where a user hasn't done that sign of verse.

709
00:37:00.360 --> 00:37:03.000
<v Speaker 3>But you immediately recognize and you can see in your

710
00:37:03.039 --> 00:37:06.199
<v Speaker 3>in your pure functions again that you can go from

711
00:37:06.360 --> 00:37:09.679
<v Speaker 3>a state of having no middle name to a state

712
00:37:09.719 --> 00:37:10.599
<v Speaker 3>of having a middle name.

713
00:37:10.719 --> 00:37:11.920
<v Speaker 2>Maybe you can delete.

714
00:37:11.679 --> 00:37:14.280
<v Speaker 3>Your middle name as well, but you have to recognize

715
00:37:14.280 --> 00:37:17.559
<v Speaker 3>that because you haven't only had events that can create

716
00:37:18.039 --> 00:37:21.679
<v Speaker 3>a user profile with a middle name. You have to

717
00:37:21.719 --> 00:37:24.840
<v Speaker 3>recognize in those functions that you could create a user

718
00:37:24.960 --> 00:37:27.519
<v Speaker 3>that doesn't have a middle name, And it's that explicitness

719
00:37:27.519 --> 00:37:31.599
<v Speaker 3>that forces you to think about your application. And if

720
00:37:31.599 --> 00:37:34.800
<v Speaker 3>you're now asking about the way that I would implement it,

721
00:37:34.840 --> 00:37:36.599
<v Speaker 3>if I would to do a migration, I would do

722
00:37:36.599 --> 00:37:40.840
<v Speaker 3>a new event right that that includes this middle name,

723
00:37:40.960 --> 00:37:42.239
<v Speaker 3>and then I would have to go then go and

724
00:37:42.280 --> 00:37:46.119
<v Speaker 3>handle modify my pure functions that allow me to determine

725
00:37:46.119 --> 00:37:49.159
<v Speaker 3>the new state. If the question were to come more

726
00:37:49.199 --> 00:37:52.199
<v Speaker 3>from how would I migrate from out of event sourcing

727
00:37:52.719 --> 00:37:53.639
<v Speaker 3>into events sourcing?

728
00:37:53.679 --> 00:37:55.320
<v Speaker 2>Normally you go through a migration path.

729
00:37:55.199 --> 00:37:57.159
<v Speaker 3>Where you say, Okay, I have these entities and I'm

730
00:37:57.199 --> 00:37:59.079
<v Speaker 3>gonna on board them, right, so you would have something

731
00:37:59.159 --> 00:38:01.400
<v Speaker 3>like the first event ever, something.

732
00:38:01.159 --> 00:38:04.039
<v Speaker 2>Like onboarded user profile or.

733
00:38:04.039 --> 00:38:06.360
<v Speaker 3>Something like that, or imported it or whatever it is,

734
00:38:06.599 --> 00:38:08.840
<v Speaker 3>and then you would slowly build those events for the

735
00:38:08.880 --> 00:38:12.360
<v Speaker 3>rest of your system and migrate your application slowly, slowly

736
00:38:13.079 --> 00:38:16.320
<v Speaker 3>into event sourcing. But it's actually more common to not

737
00:38:16.440 --> 00:38:18.920
<v Speaker 3>start out with an old feature but to start with

738
00:38:18.960 --> 00:38:21.840
<v Speaker 3>a new feature, because then you can reap the benefits

739
00:38:21.880 --> 00:38:22.280
<v Speaker 3>right away.

740
00:38:22.760 --> 00:38:26.880
<v Speaker 1>All right, all right, awesome, So before we wrap things up,

741
00:38:27.000 --> 00:38:29.679
<v Speaker 1>let's just do a quick round of promos. Louise, do

742
00:38:29.719 --> 00:38:31.000
<v Speaker 1>you want to do you want to start?

743
00:38:32.119 --> 00:38:35.039
<v Speaker 2>Sure? So yeah. My name is Louis. I'm founder and

744
00:38:35.119 --> 00:38:36.000
<v Speaker 2>CEO of Ambar.

745
00:38:36.199 --> 00:38:40.960
<v Speaker 3>We are a data streaming company focused particularly on architectures

746
00:38:41.000 --> 00:38:41.719
<v Speaker 3>like event sourcing.

747
00:38:42.079 --> 00:38:44.559
<v Speaker 2>We are offering a free course before we sell you anything,

748
00:38:44.599 --> 00:38:46.239
<v Speaker 2>we like to provide you with a law of value.

749
00:38:46.400 --> 00:38:49.079
<v Speaker 3>So if you go to Ambar, which is a m

750
00:38:49.400 --> 00:38:53.719
<v Speaker 3>b R dot cloud slash e SC, you can take

751
00:38:53.760 --> 00:38:56.559
<v Speaker 3>our free events sourcing course. I will hope that it

752
00:38:56.679 --> 00:39:00.760
<v Speaker 3>can remain free for as long as possible. And it's intense.

753
00:39:00.760 --> 00:39:03.920
<v Speaker 3>It's about a week worth of time. It's not you know,

754
00:39:03.960 --> 00:39:07.000
<v Speaker 3>it's especially three hours a day that you should expect

755
00:39:07.039 --> 00:39:09.800
<v Speaker 3>to invest. But you should come out of it very

756
00:39:09.840 --> 00:39:14.960
<v Speaker 3>confident that you know you can do it in production.

757
00:39:15.119 --> 00:39:16.719
<v Speaker 2>And if you don't feel confident.

758
00:39:16.360 --> 00:39:18.880
<v Speaker 3>Anyway, we are there in a SLA community as well

759
00:39:19.119 --> 00:39:22.199
<v Speaker 3>to help you out anyway. Again, that's Ambar, a m

760
00:39:22.320 --> 00:39:25.599
<v Speaker 3>b A R dot cloud slash esc awesome.

761
00:39:25.639 --> 00:39:27.719
<v Speaker 1>Thank you. I also sent it in the comments section

762
00:39:27.840 --> 00:39:31.079
<v Speaker 1>for those of you that are listening from YouTube or

763
00:39:32.079 --> 00:39:36.719
<v Speaker 1>any other streaming platforms. Peter, how about you? Okay?

764
00:39:36.880 --> 00:39:41.280
<v Speaker 5>Yeah, for the I don't have any I think yeah

765
00:39:41.360 --> 00:39:41.840
<v Speaker 5>all right?

766
00:39:42.639 --> 00:39:46.679
<v Speaker 4>And Chris, yeah, I'll just post that the YouTube video

767
00:39:46.719 --> 00:39:51.719
<v Speaker 4>of the Facebook talk I mentioned. If you search YouTube,

768
00:39:52.119 --> 00:39:55.239
<v Speaker 4>that's the title here. I think rethinking web app development

769
00:39:55.239 --> 00:39:57.519
<v Speaker 4>at Facebook, And yeah, it talks about what I mentioned,

770
00:39:57.559 --> 00:39:59.280
<v Speaker 4>how they ran into a bunch of problems with their

771
00:39:59.400 --> 00:40:03.199
<v Speaker 4>chat and then they kind of evolved into this basically

772
00:40:03.199 --> 00:40:05.599
<v Speaker 4>event sourcing methodology.

773
00:40:06.079 --> 00:40:09.320
<v Speaker 1>So it's quite interesting. Awesome, awesome. Yeah, it does help

774
00:40:09.320 --> 00:40:13.000
<v Speaker 1>a lot to see use cases from big companies. For

775
00:40:13.119 --> 00:40:16.400
<v Speaker 1>any of you that want to know which companies are

776
00:40:17.000 --> 00:40:21.800
<v Speaker 1>doing distributed systems, you can just look on YouTube or

777
00:40:21.840 --> 00:40:24.360
<v Speaker 1>Google and you will see that actually most of the

778
00:40:24.400 --> 00:40:27.280
<v Speaker 1>big ones are doing it, because once you get to

779
00:40:27.320 --> 00:40:30.480
<v Speaker 1>a level where you need to serve billions of requests,

780
00:40:31.119 --> 00:40:35.840
<v Speaker 1>then there aren't really many other choices besides doing that.

781
00:40:36.440 --> 00:40:40.639
<v Speaker 1>I mean, at least not until we hit reliable quantum computing.

782
00:40:40.760 --> 00:40:43.639
<v Speaker 1>But until then, I think we're actually going to need

783
00:40:44.239 --> 00:40:47.360
<v Speaker 1>a lot of distributed systems in order to scale to

784
00:40:47.440 --> 00:40:50.599
<v Speaker 1>the size that those big companies are scaling too. So

785
00:40:50.639 --> 00:40:53.840
<v Speaker 1>you can be sure that for example, Twitter or Instagram,

786
00:40:53.920 --> 00:40:57.760
<v Speaker 1>they are running distributed systems to be able to serve

787
00:40:58.000 --> 00:41:00.920
<v Speaker 1>users in the scale that they are serving. So yeah,

788
00:41:00.960 --> 00:41:05.159
<v Speaker 1>it is definitely really interesting to learn about that. I also,

789
00:41:05.559 --> 00:41:08.599
<v Speaker 1>just to wrap things up, also want to say that

790
00:41:09.239 --> 00:41:13.519
<v Speaker 1>once I first learned about event searcing and CQRS, which

791
00:41:13.599 --> 00:41:16.639
<v Speaker 1>is a pattern that it's basically a pattern on top

792
00:41:16.679 --> 00:41:22.079
<v Speaker 1>of events searching, I really thought, Okay, this is the

793
00:41:22.119 --> 00:41:25.280
<v Speaker 1>Holy grill, and I need to stop all that I'm

794
00:41:25.320 --> 00:41:29.440
<v Speaker 1>doing and from now on I have to write every

795
00:41:29.519 --> 00:41:33.320
<v Speaker 1>back end this way. And I just want to let

796
00:41:33.360 --> 00:41:36.199
<v Speaker 1>you all know that you also don't need to go

797
00:41:36.440 --> 00:41:41.280
<v Speaker 1>that bath. So it is really beautiful. It is really

798
00:41:41.440 --> 00:41:47.679
<v Speaker 1>amazing and scalable and very flexible, but you also can't

799
00:41:47.760 --> 00:41:50.239
<v Speaker 1>keep doing things the way that you're doing. Just know

800
00:41:50.360 --> 00:41:53.760
<v Speaker 1>that once you start really worrying about the scale of

801
00:41:53.800 --> 00:41:57.599
<v Speaker 1>your application in a big way, and you also have

802
00:41:57.920 --> 00:42:02.320
<v Speaker 1>the auditability concerns that Louis was mentioning, like you need

803
00:42:02.400 --> 00:42:05.320
<v Speaker 1>to have this track record of everything that is happening

804
00:42:05.360 --> 00:42:10.199
<v Speaker 1>in the application, then this is a really excellent solution.

805
00:42:11.159 --> 00:42:13.880
<v Speaker 1>But you don't need to already start with it on

806
00:42:13.920 --> 00:42:19.239
<v Speaker 1>your next hobby project, but do definitely study more about it.

807
00:42:19.320 --> 00:42:22.559
<v Speaker 1>Be aware of this pattern so that once you feel

808
00:42:22.599 --> 00:42:25.599
<v Speaker 1>that it is the right pattern to apply for a

809
00:42:25.599 --> 00:42:29.440
<v Speaker 1>given project, then you already know that it exists and

810
00:42:29.480 --> 00:42:33.000
<v Speaker 1>how you can apply it, all right, So that's going

811
00:42:33.039 --> 00:42:35.440
<v Speaker 1>to be it for me. I'm going to promote onvoid

812
00:42:35.480 --> 00:42:40.239
<v Speaker 1>dot com. It is my company as well, so I

813
00:42:40.280 --> 00:42:44.039
<v Speaker 1>am a bit biased to say it, but from experience

814
00:42:44.079 --> 00:42:47.760
<v Speaker 1>to talking to our clients, they always say that we

815
00:42:47.960 --> 00:42:52.039
<v Speaker 1>really are different from everything that they have found in

816
00:42:52.039 --> 00:42:55.159
<v Speaker 1>the market thus far. So if you're interested in a

817
00:42:55.440 --> 00:43:01.239
<v Speaker 1>very client friendly business model for companies that are looking

818
00:43:01.320 --> 00:43:07.760
<v Speaker 1>for design services or software development services, especially front end development,

819
00:43:07.920 --> 00:43:12.679
<v Speaker 1>which is what we do really really well with Angular

820
00:43:12.760 --> 00:43:16.880
<v Speaker 1>and width React, definitely check out onvoid dot com. It's

821
00:43:17.000 --> 00:43:22.119
<v Speaker 1>you and voib dot com. All right, that's it for me,

822
00:43:22.880 --> 00:43:26.760
<v Speaker 1>Thank you, and I've seen you in the next one. Bye.
