1
00:00:01,080 --> 00:00:03,000
Speaker 1: How'd you like to listen to dot net rocks with

2
00:00:03,040 --> 00:00:07,879
no ads? Easy? Become a patron for just five dollars

3
00:00:07,919 --> 00:00:10,800
a month. You get access to a private RSS feed

4
00:00:10,839 --> 00:00:14,240
where all the shows have no ads. Twenty dollars a month,

5
00:00:14,279 --> 00:00:16,920
we'll get you that and a special dot net Rocks

6
00:00:16,960 --> 00:00:21,000
patron mug. Sign up now at Patreon dot dot NetRocks

7
00:00:21,120 --> 00:00:36,880
dot com. Hey, welcome back to dot net rocks. I'm

8
00:00:36,920 --> 00:00:39,520
Carl Franklin and I'm Richard Campbell, and we're here for

9
00:00:39,600 --> 00:00:43,799
your geek out pleasure. Not yet, no official geekout, but

10
00:00:44,159 --> 00:00:46,640
you know we're gonna there coming. We're gonna geek out

11
00:00:46,640 --> 00:00:47,119
with our guests.

12
00:00:47,119 --> 00:00:49,560
Speaker 2: Now. There's so much to talk about. I can't even

13
00:00:49,600 --> 00:00:51,799
tell you. I've been writing and writing and writing and writing.

14
00:00:51,840 --> 00:00:54,479
They're gonna be long. Sorry, they're gonna be long.

15
00:00:54,719 --> 00:00:57,159
Speaker 1: Yeah, I think everybody looks forward to that at the

16
00:00:57,200 --> 00:00:58,600
end of the year. Richard, I certainly do.

17
00:00:58,719 --> 00:01:01,240
Speaker 2: I appreciate that. I told you I've I've made a

18
00:01:01,240 --> 00:01:03,039
new talk just on nuclear power.

19
00:01:03,200 --> 00:01:04,519
Speaker 1: Yeah, there's a lot of new stuff.

20
00:01:04,560 --> 00:01:07,879
Speaker 2: And then suddenly all attack giants are talking about nuclear power.

21
00:01:07,920 --> 00:01:12,680
So everybody wants that talk. And it's a physics talk

22
00:01:12,840 --> 00:01:17,439
like I start with I pull up a periodic table

23
00:01:17,519 --> 00:01:20,519
and talk about the actinides and go through a decay

24
00:01:20,599 --> 00:01:23,040
pattern of you two thirty eight like it's.

25
00:01:22,760 --> 00:01:24,840
Speaker 1: Okay, I'm going to have another sandwich.

26
00:01:25,200 --> 00:01:30,159
Speaker 2: And but you know, it all pulls the story together

27
00:01:30,239 --> 00:01:33,040
and some interesting things happening in the space. But we'll

28
00:01:33,040 --> 00:01:35,239
talk about that on the Energy Geek go yeap.

29
00:01:36,159 --> 00:01:39,120
Speaker 1: And first before we bring on Adam, let's do a

30
00:01:39,159 --> 00:01:41,480
little thing called better no framework awesome?

31
00:01:49,319 --> 00:01:50,239
Speaker 2: All right man? What we got?

32
00:01:50,480 --> 00:01:52,439
Speaker 1: Well, I want you guys to go to Boston dot

33
00:01:52,599 --> 00:01:54,840
Chef's makingwaves dot com.

34
00:01:55,000 --> 00:01:56,120
Speaker 2: Nice. What is this?

35
00:01:56,519 --> 00:01:59,920
Speaker 1: So this is a cruise and it's the same cruise

36
00:02:00,239 --> 00:02:02,400
company that does the rock Boat. I don't know if

37
00:02:02,439 --> 00:02:04,959
you've heard that no, but it's like you know, one

38
00:02:05,040 --> 00:02:08,840
hundred bands, oh all on a cruise and you see

39
00:02:08,840 --> 00:02:13,159
a different one like every different venues and stuff. But anyway,

40
00:02:13,280 --> 00:02:16,680
so this is a cruise from all up in New

41
00:02:16,680 --> 00:02:20,400
England Boston to Portland, Maine and Saint John, New Brunswick.

42
00:02:20,879 --> 00:02:25,520
It's in October October twenty fourth through twenty eight in

43
00:02:25,599 --> 00:02:29,639
twenty twenty five. And if you're a fan of you know,

44
00:02:29,719 --> 00:02:32,599
Food Network and Celebrity chefs like I Am.

45
00:02:33,080 --> 00:02:35,039
Speaker 2: Back when Food Network actually talked about food.

46
00:02:35,639 --> 00:02:37,919
Speaker 1: Alton Brown is going to be on this cruise.

47
00:02:38,280 --> 00:02:40,840
Speaker 2: There you go, that's your ringer right there, right, Yep.

48
00:02:41,039 --> 00:02:43,319
We love Alton Brown. He's our kind of geek.

49
00:02:43,439 --> 00:02:47,879
Speaker 1: And then as the Choi, Anne Burrell, Eric Adjepong, Roco

50
00:02:48,000 --> 00:02:55,159
de Spirito, Alex Gerna Shelley, Mark Murphy, Jeff Morrow, and Andrew Zimmern,

51
00:02:56,360 --> 00:02:59,400
Josh Capon, a couple other people that you may have

52
00:02:59,639 --> 00:03:05,120
or may not have heard of. Gabe Bertaccini, who does

53
00:03:05,120 --> 00:03:08,520
a show called chow House with Alex Cornishelly, it's just

54
00:03:08,639 --> 00:03:11,199
going to be great. And so you know, it's a

55
00:03:11,199 --> 00:03:18,199
cruise you have cooking demonstrations and dinners and food cooked

56
00:03:18,319 --> 00:03:22,319
in person by these people and reading the comments from

57
00:03:22,400 --> 00:03:25,319
last year. Some of them like to be a little

58
00:03:25,599 --> 00:03:27,879
more private than others and they don't really come out

59
00:03:27,919 --> 00:03:30,680
and greet and talk, but others will hang out with

60
00:03:30,719 --> 00:03:34,080
you like the whole time. Wow. So I'm just really

61
00:03:34,280 --> 00:03:37,479
really excited to go on this. I've actually bought a ticket,

62
00:03:37,599 --> 00:03:40,719
so oh you're going, I'm going. So if you want

63
00:03:40,719 --> 00:03:43,919
to go on this cruise with me, just get a ticket.

64
00:03:44,080 --> 00:03:45,599
Speaker 2: Let me know that's really fun.

65
00:03:45,759 --> 00:03:48,039
Speaker 1: So that's what I got. Who's talking to us today, Richard?

66
00:03:48,199 --> 00:03:50,840
Speaker 2: I grabbed a comment Taver Show nineteen twelve, which is

67
00:03:50,879 --> 00:03:53,120
just back in August when we talked to Anita Vam

68
00:03:53,759 --> 00:03:56,479
about demain driven design and events sourcing, which I think

69
00:03:56,479 --> 00:03:59,479
will be somewhat orthogonal to the things you were talking about.

70
00:04:00,120 --> 00:04:02,400
Jaye Debauer had this comedy. He says, I've listened to

71
00:04:02,439 --> 00:04:06,240
every episode since sometime in twenty ten. Wow, so that

72
00:04:06,280 --> 00:04:11,120
would be you know, Got the Morning a thousand episodes easy,

73
00:04:11,759 --> 00:04:13,599
And you guys have had a huge impact on my career.

74
00:04:13,639 --> 00:04:15,560
So thanks. I have a reputation for coming into work

75
00:04:15,599 --> 00:04:19,199
and saying I was listening to dot at rocks And anyway,

76
00:04:19,199 --> 00:04:22,079
onto the real meat. We've been using aka dot net

77
00:04:22,160 --> 00:04:24,439
and event sourcing ideas that I need to talk about

78
00:04:24,519 --> 00:04:27,519
and it's a match made in heaven. All the positive

79
00:04:27,560 --> 00:04:28,839
things that I need to had to say, but wanted

80
00:04:28,879 --> 00:04:31,639
to point out one other benefit that's been very interesting.

81
00:04:32,120 --> 00:04:35,000
When you have an event store and an unexpected question arises,

82
00:04:35,040 --> 00:04:37,120
you can always write a bit of code to reprocess

83
00:04:37,120 --> 00:04:40,160
that event streamer streams to calculate the answer to a

84
00:04:40,199 --> 00:04:43,720
new question. I believe Anita mentioned the time travel or

85
00:04:43,720 --> 00:04:46,399
something like that, the events can always be replayed up

86
00:04:46,399 --> 00:04:48,160
to a desired time and allowing you to view the

87
00:04:48,199 --> 00:04:51,439
state as it was at the time. In my experience,

88
00:04:51,480 --> 00:04:54,439
the business is delighted when you can perform magic tricks

89
00:04:54,519 --> 00:04:56,360
like this. Thanks so much for the great show.

90
00:04:56,439 --> 00:04:57,000
Speaker 1: Fantastic.

91
00:04:57,079 --> 00:04:59,439
Speaker 2: Yeah, no, it's great. It is a great point about

92
00:04:59,519 --> 00:05:03,319
this different way of thinking about software that having event

93
00:05:03,439 --> 00:05:06,920
streams that you can store and replay just gives you

94
00:05:07,000 --> 00:05:09,560
all kinds of possibilities for tackling problems. It's certainly been

95
00:05:09,600 --> 00:05:13,199
something I've used when doing profiling for performance problems, where

96
00:05:13,279 --> 00:05:15,839
the fact that we could replay the workload and make

97
00:05:15,879 --> 00:05:18,160
some alterations replay the workload a n it taught us

98
00:05:18,199 --> 00:05:20,120
a lot. So Jay, thank you so much for your

99
00:05:20,120 --> 00:05:21,800
comment and a copy of music Cobi. It's on its

100
00:05:21,839 --> 00:05:23,040
way to you. And if you'd like a copy of

101
00:05:23,079 --> 00:05:24,839
music code by, I write a comment on the website

102
00:05:24,839 --> 00:05:26,879
at dot at Rocks dot com or on the Facebook

103
00:05:26,959 --> 00:05:28,560
to publish every show there. And if you comment there

104
00:05:28,560 --> 00:05:30,360
and I reading on the show, we'll send you copy

105
00:05:30,360 --> 00:05:30,920
of music Coba.

106
00:05:31,040 --> 00:05:33,759
Speaker 1: Music to Koba of course still cranking and people love it.

107
00:05:33,920 --> 00:05:36,759
And yes, I do plan on coming out with another

108
00:05:36,800 --> 00:05:39,800
track taking next year. Yeah, I'm still tankling.

109
00:05:40,040 --> 00:05:40,639
Speaker 2: That's all of that.

110
00:05:41,439 --> 00:05:44,560
Speaker 1: But as for social media, Richard and I have been

111
00:05:44,600 --> 00:05:47,600
on ex Twitter for a long time. Maybe not for long,

112
00:05:47,720 --> 00:05:50,519
I'm not sure. But you can also Rea Stress on

113
00:05:50,600 --> 00:05:54,759
blue Sky, I'm Carl Franklin dot bsky dot social.

114
00:05:54,519 --> 00:05:56,560
Speaker 2: And I'm rich Campbell dot bsky dot social.

115
00:05:56,759 --> 00:06:00,920
Speaker 1: And also on Masterson I'm at Carl Franklin tech hub

116
00:06:01,000 --> 00:06:01,920
dot social.

117
00:06:01,639 --> 00:06:04,360
Speaker 2: And I'm Rich Campbell at Masterdon dot social.

118
00:06:04,480 --> 00:06:07,319
Speaker 1: Yeah. All right, well send us a toot a teat

119
00:06:07,480 --> 00:06:09,639
a suite or whatever the heck you call it. And

120
00:06:10,439 --> 00:06:12,680
that's another way that you could win some music to

121
00:06:12,720 --> 00:06:16,680
code by Skeat, I think is what they call.

122
00:06:16,720 --> 00:06:19,480
Speaker 2: It's a skeet yep, it's I don't know if that's

123
00:06:19,480 --> 00:06:20,879
a great name, but it is what it is.

124
00:06:21,360 --> 00:06:23,920
Speaker 1: John Skeet can't really take credit for that. That's like

125
00:06:23,959 --> 00:06:25,959
one thing that he can't take credit for. He's done

126
00:06:25,959 --> 00:06:29,639
everything else exactly. Okay, let's bring on Adam. Adam Dimitrik

127
00:06:29,800 --> 00:06:32,160
is the CEO of Adaptec Group and the creator of

128
00:06:32,279 --> 00:06:36,759
event Modeling, with over three decades experience in software development

129
00:06:36,759 --> 00:06:40,279
and architecture. Adam is an expert in event driven systems

130
00:06:40,279 --> 00:06:44,680
and event sourcing. He has been instrumental in advancing these methodologies,

131
00:06:44,680 --> 00:06:48,800
particularly through his work on event modeling, which we'll talk

132
00:06:48,839 --> 00:06:52,759
about today, and that provides a transparent, inclusive and collaborative

133
00:06:52,800 --> 00:06:56,079
approach to system design. Adam is a frequent speaker at

134
00:06:56,079 --> 00:07:02,120
international conferences and has contributed significantly to the responsible, efficient

135
00:07:02,199 --> 00:07:07,480
system design and implementation in software industry. Welcome Adam, and

136
00:07:07,759 --> 00:07:10,000
apologies that you haven't been on this show before.

137
00:07:10,600 --> 00:07:15,199
Speaker 3: No worries, I've been busy, so you know, finally our

138
00:07:15,519 --> 00:07:19,079
paths cross and thank you for having me. What a

139
00:07:19,120 --> 00:07:20,839
wonderful intro to the topic as well.

140
00:07:20,959 --> 00:07:23,199
Speaker 2: We've always been in an adjacent thread to each other,

141
00:07:23,279 --> 00:07:25,120
right often at the same shows. I think we've done

142
00:07:25,120 --> 00:07:28,600
a little drinking together now and again. But yeah, long overdue, Adam.

143
00:07:28,639 --> 00:07:30,120
I apologize. You shouldn't it taken it?

144
00:07:30,240 --> 00:07:32,680
Speaker 3: Yeah, twelve years ago is now? And then yeah, yeah now,

145
00:07:32,720 --> 00:07:34,040
and then yeah as you do.

146
00:07:34,439 --> 00:07:34,920
Speaker 1: Sure.

147
00:07:36,120 --> 00:07:36,319
Speaker 2: Yeah.

148
00:07:36,319 --> 00:07:41,279
Speaker 3: We met. Last time I think was NBC OSLO in

149
00:07:41,360 --> 00:07:45,560
Norway twenty twelve, so I was still giving talks back

150
00:07:45,600 --> 00:07:48,439
then on GET which was kind of fairly new and

151
00:07:49,600 --> 00:07:53,879
in a lot of circles and I think patterns Microsoft

152
00:07:53,920 --> 00:07:57,360
Patterns and Practices, the Seacaarras Journey Book. I was involved

153
00:07:57,360 --> 00:07:57,959
in that project.

154
00:07:58,000 --> 00:07:58,839
Speaker 2: Ye yeah, right.

155
00:07:59,040 --> 00:08:02,079
Speaker 3: Exactly that time, and that was I was really doing

156
00:08:02,120 --> 00:08:05,160
a lot of that good stuff getting that going for

157
00:08:05,279 --> 00:08:08,800
that team, which was really fun and engaging way to

158
00:08:08,839 --> 00:08:09,519
help out with.

159
00:08:09,720 --> 00:08:13,519
Speaker 1: Was before I started looking like heat miser. So that's how.

160
00:08:15,959 --> 00:08:18,720
Speaker 2: Wow, look at the Exploring c QRS and Events Sourcing

161
00:08:18,720 --> 00:08:21,240
book is still on the Microsoft side, included the show notes.

162
00:08:21,240 --> 00:08:23,439
Everyone wants to look at it. It's two years old.

163
00:08:23,480 --> 00:08:24,480
But it's not wrong.

164
00:08:24,959 --> 00:08:27,240
Speaker 3: No, no, it's actually it's one of the first fouries

165
00:08:27,279 --> 00:08:29,000
I think into using Azure. So we have a lot

166
00:08:29,040 --> 00:08:32,679
of clients that use Azure for you know, the different

167
00:08:32,720 --> 00:08:35,519
technologies they are cosmos, et cetera, for storing the event streams,

168
00:08:35,559 --> 00:08:38,480
et cetera. So if you're on a very dot net

169
00:08:38,519 --> 00:08:42,440
focused textac you know, this is what I'm going to

170
00:08:42,440 --> 00:08:46,080
be talking about is highly technology agnostic. It's talking about

171
00:08:46,120 --> 00:08:50,039
being responsible with your information system. So sure, really the

172
00:08:50,080 --> 00:08:53,240
whole kind of background of how our parallel lives kind

173
00:08:53,240 --> 00:08:53,960
of weave in and out.

174
00:08:54,519 --> 00:08:58,320
Speaker 1: Yeah, yeah, So the the comment Richard read was a

175
00:08:58,320 --> 00:09:02,000
pretty good introduction to events sourcing if you don't know

176
00:09:02,039 --> 00:09:05,200
what that is. And the whole idea is that instead

177
00:09:05,200 --> 00:09:09,399
of mutating a field and a table, you add a

178
00:09:09,399 --> 00:09:13,759
new record and whatever changed and who changed it, so

179
00:09:13,799 --> 00:09:16,080
that it does become sort of like a time machine

180
00:09:16,080 --> 00:09:21,960
that you can step back and every record is a state. Essentially.

181
00:09:22,360 --> 00:09:27,519
Speaker 3: Yeah, it's like it's like accounting, but for information. That's

182
00:09:27,559 --> 00:09:29,559
how I like to think of it, because accountants don't

183
00:09:29,559 --> 00:09:32,519
have erasers, as the stereotypical thing goes.

184
00:09:32,559 --> 00:09:35,600
Speaker 1: And so interesting you said accountants, because that was the

185
00:09:35,639 --> 00:09:39,039
first introduction to that that I had back in the nineties.

186
00:09:39,080 --> 00:09:43,879
We were building an accounting module for some software I

187
00:09:43,879 --> 00:09:47,120
was building or helping to build, and that was a requirement,

188
00:09:47,320 --> 00:09:50,440
like you could not modify field, you had to write

189
00:09:51,279 --> 00:09:52,440
a diff Essentially.

190
00:09:52,639 --> 00:09:54,679
Speaker 3: What's interesting about the history of this whole idea of

191
00:09:54,759 --> 00:09:59,000
event sourcing is that many kind of credit event sourcing

192
00:09:59,000 --> 00:10:03,279
to Martin Fowlers areticle in December two thousand and five. However,

193
00:10:03,320 --> 00:10:05,919
if you kind of look at information systems in general,

194
00:10:06,399 --> 00:10:11,320
the approach has really been the way you create information

195
00:10:11,440 --> 00:10:15,440
systems throughout thousands of years. Most of the organizations and

196
00:10:15,480 --> 00:10:19,879
systems that happened before computing were literally record keeping and

197
00:10:20,120 --> 00:10:23,919
you needed those carbon copies to know where the heck

198
00:10:23,960 --> 00:10:26,840
things are people filing cabinets by their desks to you know,

199
00:10:26,919 --> 00:10:29,159
to have the old copies there. So events sourcing is

200
00:10:29,159 --> 00:10:30,879
actually quite natural for human beings.

201
00:10:30,919 --> 00:10:32,799
Speaker 1: And I think I always know, if you think about it,

202
00:10:32,759 --> 00:10:34,919
are you taking the eraser away? You know?

203
00:10:35,559 --> 00:10:39,279
Speaker 2: Yeah, for a good reason, guys, get serious talking. You

204
00:10:39,360 --> 00:10:43,000
go all the way back to writing with quills on clay,

205
00:10:43,240 --> 00:10:47,000
right and Kadian, where you can't erase anything, You've got

206
00:10:47,000 --> 00:10:47,720
to throw it out.

207
00:10:47,879 --> 00:10:48,080
Speaker 1: Yeah.

208
00:10:48,360 --> 00:10:52,159
Speaker 2: And that whole markup system was designed for counting an inventory.

209
00:10:52,720 --> 00:10:55,080
It was an entry only system exactly.

210
00:10:55,080 --> 00:10:57,960
Speaker 1: Wow, Richard, that's awesome. What a way to tie this

211
00:10:58,120 --> 00:11:01,240
back to history. Great, it's so cool.

212
00:11:02,559 --> 00:11:05,240
Speaker 3: I think another problem that people have it's a little

213
00:11:05,240 --> 00:11:07,519
bit different than what they're used to. So I have

214
00:11:07,519 --> 00:11:09,759
to say there's a bit of a baby duck syndrome

215
00:11:09,799 --> 00:11:11,320
at play when people are looking at this way of

216
00:11:11,360 --> 00:11:14,679
working a lot of times. But once you're familiar with

217
00:11:14,720 --> 00:11:17,360
both ways of working, either the mutable state way that

218
00:11:17,399 --> 00:11:19,360
we kind of have forms over data a lot of times,

219
00:11:19,399 --> 00:11:23,840
crowd systems or whatever, and these behavior based ledger based approaches.

220
00:11:25,519 --> 00:11:27,200
One of the simplest things about it is that you

221
00:11:27,240 --> 00:11:29,000
really don't have to think about you know, am I

222
00:11:29,039 --> 00:11:32,600
going to have to follow a whole bunch of relationships

223
00:11:32,600 --> 00:11:34,559
between tables right away? When I have a form and

224
00:11:34,600 --> 00:11:37,639
I press submit, it's like, the only thing I need

225
00:11:37,679 --> 00:11:40,480
to do is just store that that was submitted. It's

226
00:11:40,480 --> 00:11:44,000
almost like the systems thinking boundary and capturing things at

227
00:11:44,039 --> 00:11:47,200
the ingress and the outgress, like and that is your

228
00:11:47,200 --> 00:11:49,639
source of truth. So there's very little subjectivity about it.

229
00:11:50,039 --> 00:11:52,639
When you know that your business requires this information that

230
00:11:52,720 --> 00:11:55,120
user is going to be adding something, it really takes

231
00:11:55,159 --> 00:11:57,519
away that subjective kind of discussion of like how am

232
00:11:57,519 --> 00:12:00,519
I going to design this? And oftentimes in this event way,

233
00:12:01,559 --> 00:12:05,840
the event modeling is not really modeling the events themselves.

234
00:12:06,240 --> 00:12:10,759
It's modeling using the building blocks that the events provide

235
00:12:11,039 --> 00:12:15,639
because they're kind of dictated to you, like the business

236
00:12:15,639 --> 00:12:17,759
says this has to happen at this time, so you

237
00:12:17,840 --> 00:12:21,120
have no choice but to capture that information. The subjective

238
00:12:21,159 --> 00:12:24,879
stuff is left how you interpret it later. But the

239
00:12:24,919 --> 00:12:27,559
other good thing about that is is that you are

240
00:12:27,600 --> 00:12:32,120
not really restricted to one way to abstract that projection.

241
00:12:32,519 --> 00:12:35,559
You're free to really do a lot of different projections

242
00:12:35,559 --> 00:12:38,200
for different purposes, so that same information can be used

243
00:12:38,240 --> 00:12:40,799
in an entirely different way further along in the workflow.

244
00:12:40,840 --> 00:12:44,120
And so there's this natural sort of fanning out into

245
00:12:44,639 --> 00:12:48,440
purpose built abstractions, which really gives a lot of awesome

246
00:12:48,480 --> 00:12:51,480
capabilities for people working on the projects. That's also have

247
00:12:51,519 --> 00:12:54,320
a list of one hundred benefits of this approach, and

248
00:12:54,360 --> 00:12:57,480
one of them is this really good autonomy so that

249
00:12:57,480 --> 00:12:59,360
people don't step on each other's toes and so that

250
00:12:59,399 --> 00:13:03,360
you're free to build the abstraction that fits that particular

251
00:13:03,360 --> 00:13:06,799
step in a workflow one percent. Right, You're not make

252
00:13:06,840 --> 00:13:10,000
one abstraction that tries to make all the different pieces happy,

253
00:13:10,039 --> 00:13:12,159
because you're never going to make everyone happy all the time.

254
00:13:12,240 --> 00:13:14,240
So that's kind of one of the really benefits of that.

255
00:13:14,279 --> 00:13:16,639
Speaker 1: Can we just jump back a little bit and yeah,

256
00:13:16,679 --> 00:13:18,679
I mean you kind of jumped into the benefits of

257
00:13:18,679 --> 00:13:22,639
event modeling without really talking about the fundamentals of what

258
00:13:22,759 --> 00:13:25,240
it is. Oh yeah, sure, so elevator pitch.

259
00:13:25,480 --> 00:13:27,399
Speaker 3: Yeah, event modeling is kind of a I mean, you

260
00:13:27,399 --> 00:13:31,480
guys kind of gave a short kind of intro winter this,

261
00:13:31,519 --> 00:13:36,759
but it's really about having a clear and understandable documentation

262
00:13:37,080 --> 00:13:39,840
of what the system is doing, and it really is

263
00:13:39,879 --> 00:13:43,720
a storyboard for for your system, much like you would

264
00:13:43,759 --> 00:13:46,159
have a storyboard for a movie where you have the

265
00:13:46,200 --> 00:13:49,279
scenes at the top row of what's happening visually, but

266
00:13:49,399 --> 00:13:53,440
at the bottom you have notes about you have notes

267
00:13:53,480 --> 00:13:55,799
about the plots to make sure that the movie still

268
00:13:55,799 --> 00:13:57,600
makes sense. So you need to have both, or you

269
00:13:57,679 --> 00:13:59,320
end up with water World. You know, if it looks

270
00:13:59,360 --> 00:14:02,799
really good, you don't want you don't want a water World.

271
00:14:04,840 --> 00:14:07,519
So that's and vice versa, right, I mean you can

272
00:14:07,600 --> 00:14:10,840
have the really you know, a really good story and

273
00:14:11,039 --> 00:14:14,120
you hear about this an excellent book with a horrible

274
00:14:14,120 --> 00:14:16,799
movie adaptation, right, so you don't want the opposite either,

275
00:14:17,279 --> 00:14:19,080
or something is a visual to just you don't.

276
00:14:18,919 --> 00:14:21,519
Speaker 1: Want to be drinking your own urine.

277
00:14:22,399 --> 00:14:28,200
Speaker 3: Yes, yeah, so it's it's kind of it's it's really

278
00:14:28,240 --> 00:14:30,960
about I would have I would like an event modeling

279
00:14:31,000 --> 00:14:34,200
to like, let's say, Richard, you have a you have

280
00:14:34,240 --> 00:14:36,159
a system, and I don't know how it works, and

281
00:14:36,519 --> 00:14:39,360
you could hand me a pile of specifications and documentation

282
00:14:39,559 --> 00:14:41,799
and hope that I'm bored enough over the weekend to

283
00:14:41,799 --> 00:14:44,639
go through it all, or we could sit down side

284
00:14:44,679 --> 00:14:46,879
by side and you can say, hey, Adam, let me

285
00:14:46,919 --> 00:14:50,360
walk you through some examples of how I use this system. Right,

286
00:14:50,759 --> 00:14:52,200
I go, okay, so what do you do now after

287
00:14:52,200 --> 00:14:54,360
you log in? Okay, you press this Okay, I understand.

288
00:14:54,399 --> 00:14:55,960
You set it up, and now I can put things

289
00:14:55,960 --> 00:14:58,159
in the cart and my customers can pay for things.

290
00:14:57,960 --> 00:14:58,320
Speaker 2: Et cetera.

291
00:14:58,360 --> 00:15:01,960
Speaker 3: It's like, very cool, Richard, thank you. I totally understand

292
00:15:02,440 --> 00:15:05,279
how the system works. It wasn't that way more effective

293
00:15:05,279 --> 00:15:07,200
than a bunch of papers sitting at my desk waiting

294
00:15:07,240 --> 00:15:07,639
to be read.

295
00:15:08,080 --> 00:15:12,080
Speaker 1: Right, So essentially taking from the user story down into

296
00:15:12,120 --> 00:15:18,000
the system, what gets written, what doesn't get written about? Yeah?

297
00:15:18,159 --> 00:15:20,279
Speaker 3: Yeah, so it's sort of like the closest thing I

298
00:15:20,320 --> 00:15:23,360
would say that. It's like is sequence diagrams from UML,

299
00:15:23,519 --> 00:15:26,080
except we take the middle pieces out and we really

300
00:15:26,080 --> 00:15:28,399
talk about state the kind of the object on the

301
00:15:28,440 --> 00:15:31,039
very far right in the sequence diagram and the user

302
00:15:31,080 --> 00:15:33,639
interaction on the very far left, and this is kind

303
00:15:33,639 --> 00:15:37,639
of the right size block for units of work. Those

304
00:15:37,679 --> 00:15:40,519
state transitions we don't want to talk about get into

305
00:15:40,559 --> 00:15:42,960
the weeds of like is this class a good abstraction

306
00:15:43,120 --> 00:15:46,120
or not? That's highly subjective and also silos a lot

307
00:15:46,120 --> 00:15:49,240
of the conversations into just the dev circles, so it

308
00:15:49,240 --> 00:15:52,279
doesn't really have a good collaborative platform for talking with

309
00:15:52,320 --> 00:15:56,240
your business users. Now State. I sometimes explain this as

310
00:15:56,320 --> 00:15:58,279
like this, you know the pyramid you have in an

311
00:15:58,360 --> 00:16:01,320
organization where we have your you know, boss, CEO, whatever,

312
00:16:01,320 --> 00:16:03,519
they have a vision statement. That vision statement gets broken

313
00:16:03,559 --> 00:16:06,039
down into a set of goals or whatever, and then

314
00:16:06,080 --> 00:16:08,879
it gets keeps getting broken down into requirements, into actual

315
00:16:09,320 --> 00:16:12,799
you know, implementation and tests. So it really fans out.

316
00:16:12,960 --> 00:16:15,639
But there's that really good common area in the middle

317
00:16:15,679 --> 00:16:18,600
of that triangle called understanding state. And as I go

318
00:16:18,679 --> 00:16:22,919
through this, you know, storyboard of what what people see,

319
00:16:23,000 --> 00:16:25,279
what gets stored in the system as the time moves on.

320
00:16:25,399 --> 00:16:27,879
By example, you know, no branching, nothing like that, just

321
00:16:27,960 --> 00:16:29,879
like no no flow charts. Is not a flow chart.

322
00:16:30,759 --> 00:16:34,320
You really understand, you know what happens, and people can

323
00:16:34,360 --> 00:16:36,919
work together using this. It's kind of like a blueprint.

324
00:16:37,799 --> 00:16:39,519
If you go to a construction site, there's a big

325
00:16:39,519 --> 00:16:42,519
blueprint on a big table. The carpenters and the and

326
00:16:42,600 --> 00:16:45,559
the and the plumbers can can look at it. And

327
00:16:45,679 --> 00:16:48,679
so the key there is that the carpenter knows exactly

328
00:16:48,720 --> 00:16:52,440
where to cut the holes in the walls so that

329
00:16:52,480 --> 00:16:55,039
the plumber can put the pipes through where they need

330
00:16:55,080 --> 00:16:55,360
to go.

331
00:16:55,840 --> 00:16:56,039
Speaker 2: Right.

332
00:16:56,080 --> 00:16:58,799
Speaker 3: So there's that. I guess what we've kind of been

333
00:16:58,840 --> 00:17:01,399
trying to do in this after industry ever since agile

334
00:17:02,279 --> 00:17:04,200
is to do the small design up front, which was

335
00:17:04,279 --> 00:17:06,200
kind of always the premise we'll get rid of big

336
00:17:06,279 --> 00:17:08,079
design upfront because we don't want to We don't want

337
00:17:08,079 --> 00:17:12,319
to be, you know, being kind of armchair architects for

338
00:17:12,359 --> 00:17:16,079
a whole year planning these great goals and you know,

339
00:17:16,200 --> 00:17:17,960
things that will never see the light of day because

340
00:17:18,000 --> 00:17:20,559
we've never actually practiced them. So this, you know, this

341
00:17:20,680 --> 00:17:23,680
event modeling can actually be done as little as an afternoon,

342
00:17:24,200 --> 00:17:26,680
and it can also be done and often is done

343
00:17:26,759 --> 00:17:29,200
as a way to maintain the system because you upgrade

344
00:17:29,240 --> 00:17:31,240
your schematic of what's happening. So you know, if I

345
00:17:31,279 --> 00:17:32,880
come back to a system four years later and we

346
00:17:32,960 --> 00:17:35,599
do this often you kind of roll out the schematic

347
00:17:35,640 --> 00:17:38,119
and say, hey, someone needs a feature and it requires

348
00:17:38,200 --> 00:17:40,359
you know, this extra workflow to be at it, so

349
00:17:40,440 --> 00:17:42,960
we'll make space on it. Plunk in what needs to

350
00:17:42,960 --> 00:17:47,039
be done, do what's called information completeness check, which is

351
00:17:47,079 --> 00:17:49,599
a real fancy way of saying, do I have a

352
00:17:49,640 --> 00:17:52,039
source for that piece of information somewhere? And if the

353
00:17:52,160 --> 00:17:54,640
arrow's doing add up, we know we're missing something and

354
00:17:54,680 --> 00:17:56,160
so we're going to have to you know, this is

355
00:17:56,200 --> 00:17:58,680
where we really understand the coupling in a system. We

356
00:17:58,759 --> 00:18:03,559
start to actually see where you know, that field value

357
00:18:03,640 --> 00:18:05,599
must come from. Okay, we probably need to add date

358
00:18:05,599 --> 00:18:09,000
of birth on the registration page because we're obviously using

359
00:18:09,079 --> 00:18:11,759
date of birth and the thing that we just imagined

360
00:18:11,799 --> 00:18:14,440
we want to have in the next release. So that's

361
00:18:14,519 --> 00:18:17,640
kind of how it works. I also think of old

362
00:18:17,720 --> 00:18:20,119
history of when you had a vacuum tube television and

363
00:18:20,160 --> 00:18:23,400
you opened up the back panel, you'd have the entire

364
00:18:23,519 --> 00:18:26,559
schematic with the where each wire goes to which vacuum tube,

365
00:18:26,559 --> 00:18:28,839
so that if something went wrong with your TV, you know,

366
00:18:28,880 --> 00:18:31,079
it's not today's throwaway society where you go back to

367
00:18:31,119 --> 00:18:33,680
Costco and return it. You actually, you know, had a

368
00:18:33,759 --> 00:18:36,759
TV repairman and go and you know find that too.

369
00:18:36,839 --> 00:18:39,880
And you know, I think someone mentioned that there's at

370
00:18:39,920 --> 00:18:42,960
stores there used to be vacuum tube testers. We'd plug

371
00:18:42,960 --> 00:18:45,640
in your vacuum tube and click and then see which

372
00:18:45,680 --> 00:18:48,519
ones work or whatever. So we kind of want to

373
00:18:48,559 --> 00:18:52,119
have that responsible way of maintaining our software systems. And

374
00:18:52,200 --> 00:18:54,680
so an event model is a is a really human

375
00:18:54,720 --> 00:18:58,799
friendly diagram of what the system's doing. And I also

376
00:18:58,920 --> 00:19:01,920
call it inform architecture, which is really the backbone of

377
00:19:01,960 --> 00:19:05,119
all architecture because no matter what cool stuff we're doing

378
00:19:05,119 --> 00:19:08,200
in tech, it all serves the purpose of getting information

379
00:19:08,279 --> 00:19:10,839
to people, right. And the reason that the screens and

380
00:19:10,880 --> 00:19:14,240
the UX is in event modeling is because all systems

381
00:19:14,279 --> 00:19:16,559
we build are for humans, and so we need that

382
00:19:16,680 --> 00:19:20,279
human face to it. And so where previous attempts to

383
00:19:20,279 --> 00:19:24,640
do even like business specific things like BPMN, oftentimes this

384
00:19:24,680 --> 00:19:27,839
is more of an extra feature or a benefit that

385
00:19:27,880 --> 00:19:30,400
you can or can't use, event modeling says, no, you've

386
00:19:30,400 --> 00:19:32,359
got to have these things in here because humans are

387
00:19:32,440 --> 00:19:35,079
using it. So I really want to know if my

388
00:19:35,240 --> 00:19:38,759
process is at fifty percent, you know, with these steps,

389
00:19:39,000 --> 00:19:41,680
if I navigate to this web page, what would I

390
00:19:41,720 --> 00:19:45,200
see right? And on those relevant things, we kind of

391
00:19:45,200 --> 00:19:47,440
do that, and so an event model is organized as well,

392
00:19:47,440 --> 00:19:49,440
so you have your subsystems and swim lanes below, and

393
00:19:49,480 --> 00:19:51,720
you also have the different users that are interacting with

394
00:19:51,720 --> 00:19:54,160
the system at the top in their own swim lanes.

395
00:19:54,319 --> 00:19:56,440
And the middle part is really like the watermark of

396
00:19:56,480 --> 00:19:58,519
like the input and output, Like where does the information

397
00:19:58,599 --> 00:20:00,319
come in? And then how is it project it out

398
00:20:00,319 --> 00:20:02,119
to a particular screen, And you can connect all those

399
00:20:02,119 --> 00:20:04,680
things together and it's a real fun, fast way to

400
00:20:04,720 --> 00:20:07,640
get going, but also a really responsible way of maintaining

401
00:20:07,680 --> 00:20:10,400
really crazy large systems. So we had these event models

402
00:20:10,400 --> 00:20:13,720
that you know, span giant projects worth millions of dollars,

403
00:20:13,759 --> 00:20:16,559
and so it ends up scaling from you know, startup

404
00:20:16,599 --> 00:20:20,400
to giant enterprise. And it's kind of like skills like

405
00:20:20,480 --> 00:20:22,640
this I kind of see as carpentry, right, Like if

406
00:20:22,680 --> 00:20:24,839
you know the shape of wood, you can build a

407
00:20:24,839 --> 00:20:27,079
really good chair, you can build a really good house. Right.

408
00:20:27,119 --> 00:20:29,519
How does a good carpenter work at all these levels, Well,

409
00:20:29,519 --> 00:20:32,920
they really understand the nature of what they're working with, right,

410
00:20:33,359 --> 00:20:36,359
And so understanding information is kind of like the backbone

411
00:20:36,400 --> 00:20:39,240
of being able to you know, build small systems or

412
00:20:39,240 --> 00:20:40,119
build large systems.

413
00:20:40,200 --> 00:20:40,319
Speaker 2: Right.

414
00:20:40,359 --> 00:20:43,039
Speaker 3: You kind of a good system will have this no

415
00:20:43,200 --> 00:20:46,240
artificial ceilings of how far they can go. So yeah,

416
00:20:46,240 --> 00:20:48,799
that's kind of I get too excited talking about event model.

417
00:20:48,799 --> 00:20:50,359
I can talk about it all day. So I hope

418
00:20:50,400 --> 00:20:53,519
that was a succinct enough explanation kind of what's on

419
00:20:53,559 --> 00:20:55,519
top of my mind after you guys introduced it.

420
00:20:57,799 --> 00:20:59,839
Speaker 2: Does a tooling matter much here? Like it sounds like

421
00:21:00,559 --> 00:21:03,480
a way of thinking about data, But I think about

422
00:21:03,559 --> 00:21:07,519
the comment and using aka dot net for example, it's like,

423
00:21:08,119 --> 00:21:10,240
is that help you lead to go the right way?

424
00:21:10,359 --> 00:21:13,279
Speaker 3: It could, and it certainly was very important in earlier days.

425
00:21:13,319 --> 00:21:16,400
I think now with the focus on how important information is,

426
00:21:16,480 --> 00:21:19,960
especially with AI and all that, you really want the

427
00:21:19,960 --> 00:21:22,440
maximum amount of things, So why not capture all of this?

428
00:21:22,519 --> 00:21:24,880
And we're kind of blending to topics you're event sourcing

429
00:21:24,880 --> 00:21:27,319
and event modeling because event modeling works for traditional systems.

430
00:21:27,799 --> 00:21:30,920
We've had lots of people that love the notation and say,

431
00:21:30,960 --> 00:21:32,960
you know, our company is just not ready for event sourcing.

432
00:21:32,960 --> 00:21:35,640
We don't have the ability to shift the culture to

433
00:21:35,680 --> 00:21:38,319
do it that way, but they still use event modeling

434
00:21:38,359 --> 00:21:40,519
for that. So your question, Richard, is about kind of

435
00:21:40,519 --> 00:21:44,640
two areas. So yeah, underlying technology, there's tooling there to

436
00:21:44,799 --> 00:21:47,279
support event sourcing if you want, but you can use

437
00:21:47,319 --> 00:21:51,000
it with traditional stuff, right, doesn't make it any harder.

438
00:21:51,000 --> 00:21:54,160
But there's also the what do you use especially around COVID.

439
00:21:54,200 --> 00:21:56,000
A lot of this stuff used to be done in

440
00:21:56,039 --> 00:21:58,599
person before COVID, on whiteboards where you would use sticky

441
00:21:58,599 --> 00:22:00,839
notes to kind of elaborate what's our workflow, you know,

442
00:22:00,839 --> 00:22:02,799
what are we going to be capturing. Let's put up

443
00:22:02,880 --> 00:22:06,400
some you know, mockups that we drew with with felt

444
00:22:06,400 --> 00:22:08,359
markers on white pages and just put them across and

445
00:22:08,440 --> 00:22:10,559
kind of say, yeah, that looks like a really cool system.

446
00:22:10,640 --> 00:22:12,200
I can see this working, and I can.

447
00:22:13,599 --> 00:22:15,880
Speaker 2: Yeah, And the tech is secondary the point there, right,

448
00:22:16,000 --> 00:22:18,160
the system stands alone.

449
00:22:17,799 --> 00:22:21,279
Speaker 3: Yeah, exactly, So that the cool thing about that is that, yeah,

450
00:22:21,319 --> 00:22:24,720
it's an back of the napkin sticky note process that

451
00:22:25,319 --> 00:22:27,880
kind of conveys the same information. But obviously since COVID

452
00:22:27,920 --> 00:22:30,920
everything's gone online. Nothing beats in person kind of interaction,

453
00:22:31,000 --> 00:22:33,119
especially when you're collaborating. But a lot of things were

454
00:22:33,160 --> 00:22:35,960
brought online. So there's the advent of well real time

455
00:22:36,000 --> 00:22:38,079
board changed to MIRO, and then of course Microsoft has

456
00:22:38,079 --> 00:22:42,240
its own whiteboarding technologies and teams, and many others are

457
00:22:42,279 --> 00:22:44,759
out there. There's open source ones like Diagrams, dot net

458
00:22:44,799 --> 00:22:48,640
and on and on, Lucid, chart Excala draw. All of

459
00:22:48,640 --> 00:22:51,640
those work as long as we can draw a rectangle

460
00:22:51,640 --> 00:22:53,680
and connect them with arrows. You pretty much got all

461
00:22:53,720 --> 00:22:56,559
you need for event modeling and you can get started

462
00:22:56,599 --> 00:22:59,720
right away. And so the other thing that makes this

463
00:23:00,079 --> 00:23:03,119
tech agnostic on the front end of actually designing it

464
00:23:03,160 --> 00:23:05,839
is that it's really synonymous to what a lot of

465
00:23:05,839 --> 00:23:08,640
people are happy with already. Most systems that you have

466
00:23:08,720 --> 00:23:11,799
that people want to design, people are quite familiar with

467
00:23:12,319 --> 00:23:15,279
mockups and they want, you know, mockups of the screens

468
00:23:15,279 --> 00:23:17,240
that a user will see in generally, so a lot

469
00:23:17,240 --> 00:23:21,279
of places already have kind of the basics in their

470
00:23:21,359 --> 00:23:23,519
muscle memory to go through this kind of process. So

471
00:23:23,559 --> 00:23:26,039
that's why it's getting quite a lot of traction.

472
00:23:26,240 --> 00:23:28,480
Speaker 2: Yeah, it feels like you're just putting language around stuff

473
00:23:28,480 --> 00:23:29,599
we were doing instinctually.

474
00:23:29,920 --> 00:23:32,799
Speaker 3: Yeah, but there's some important caveats because a lot of times,

475
00:23:32,799 --> 00:23:34,839
you know, one of our clients was plenty of Fish

476
00:23:34,880 --> 00:23:36,559
and you know, to send a message from one user

477
00:23:36,599 --> 00:23:38,240
to another. And for those that don't know, plenty of

478
00:23:38,240 --> 00:23:41,200
Fish is a free dating site, so there's a lot

479
00:23:41,200 --> 00:23:43,839
of like a free profile, so you could be talking

480
00:23:43,880 --> 00:23:46,720
to a random stranger, could be someone that's not necessarily

481
00:23:46,759 --> 00:23:49,799
been vetted as much as with another platform. So you know,

482
00:23:50,079 --> 00:23:52,599
if you were to do a wireframe mockup of sending

483
00:23:52,640 --> 00:23:55,480
a message from one user to another on a wireframe,

484
00:23:55,480 --> 00:23:57,160
that would look like, oh, that's just two steps. There's

485
00:23:57,200 --> 00:23:59,200
a send message and that oh this person's receiving it,

486
00:23:59,319 --> 00:24:02,039
great specs, right, But like in the middle is about

487
00:24:02,079 --> 00:24:05,079
twelve steps of we got to spam check, we got

488
00:24:05,119 --> 00:24:08,279
to translate it, and you know, replace dollar signs for

489
00:24:08,440 --> 00:24:11,079
essays and all sorts of tricks that people play to

490
00:24:11,160 --> 00:24:13,079
do that. So you know, when we actually did this

491
00:24:13,200 --> 00:24:18,559
with them, event modeling elaborates this to make this complexity

492
00:24:19,599 --> 00:24:23,039
drawn out horizontally to actually see the size. So where

493
00:24:23,039 --> 00:24:25,240
this makes an impact is in your agile estimation, so

494
00:24:25,359 --> 00:24:27,880
or you have extra L T shirt sizes or whatever.

495
00:24:28,160 --> 00:24:30,279
We kind of don't want to be subjective saying like, hey, Adam,

496
00:24:30,480 --> 00:24:31,799
how hard do you think this is?

497
00:24:31,799 --> 00:24:31,960
Speaker 2: Oh?

498
00:24:32,000 --> 00:24:34,119
Speaker 3: I think that's an extra large or a medium T

499
00:24:34,200 --> 00:24:38,279
shirt size? Highly subjective, right, Like does Adam really have

500
00:24:38,359 --> 00:24:40,079
the good experience to answer this?

501
00:24:40,160 --> 00:24:40,920
Speaker 2: You know, maybe this.

502
00:24:40,920 --> 00:24:43,880
Speaker 3: Other person will give me a large or a small

503
00:24:43,960 --> 00:24:46,559
depending on their experience. So we kind of want to

504
00:24:46,599 --> 00:24:49,519
remove the subjectivity and rather than saying, you know, how

505
00:24:49,559 --> 00:24:51,119
long is it going to take to send this to

506
00:24:51,680 --> 00:24:53,559
get the work done to send this message to this

507
00:24:53,599 --> 00:24:57,119
other person on this platform. I need to then see

508
00:24:57,680 --> 00:25:01,160
and illustrate to the business in a human friendly way

509
00:25:01,440 --> 00:25:04,680
that this is going to take twelve steps along the

510
00:25:04,720 --> 00:25:07,759
way to transform the information and filter the information along

511
00:25:07,759 --> 00:25:09,480
the way, and we can label those things such as

512
00:25:09,799 --> 00:25:14,759
bad word filter and spam filter and you know alternate

513
00:25:14,839 --> 00:25:18,640
character Unicode filter where people are trying to well, you know,

514
00:25:18,680 --> 00:25:21,799
the old hack with a semicolon being replaced with the

515
00:25:22,559 --> 00:25:25,119
Unicode version from I forget what it is. I think

516
00:25:25,160 --> 00:25:27,799
it's an an Indian language of some sort, but it

517
00:25:27,799 --> 00:25:29,960
looks like a semi colon, but your thing doesn't compile

518
00:25:30,240 --> 00:25:32,240
because it's not actually a semi place.

519
00:25:32,400 --> 00:25:36,200
Speaker 2: Some Unicode character tas like, why is that failing?

520
00:25:36,440 --> 00:25:38,319
Speaker 3: I've watched three Days of Sleep and.

521
00:25:39,079 --> 00:25:41,799
Speaker 1: We just did a Blazer puzzle on that where an

522
00:25:41,839 --> 00:25:46,240
E looked like an E but it wasn't an E

523
00:25:46,359 --> 00:25:51,279
and it was a cyrillic yeah something. Yeah, yeah, it's

524
00:25:51,319 --> 00:25:56,079
not an E and everything compiled because we were instantiating

525
00:25:56,200 --> 00:25:59,160
a new class name in the class name that we

526
00:25:59,160 --> 00:26:02,960
were instantiating had that crazy E in it, and it

527
00:26:03,000 --> 00:26:03,559
didn't work.

528
00:26:04,240 --> 00:26:08,240
Speaker 3: Yeah, yeah, yeah, so anyway, I mean, this kind of

529
00:26:08,240 --> 00:26:11,880
stuff was really pertinent to these guys and if they

530
00:26:11,880 --> 00:26:14,160
didn't get you know, I think it's a lot better.

531
00:26:14,440 --> 00:26:15,880
First of all, I think it kind of removes a

532
00:26:15,880 --> 00:26:19,000
lot of the problems with imposter syndrome and gatekeeping in

533
00:26:19,319 --> 00:26:23,839
organizations because if you remove subjectivity, you're really not putting

534
00:26:23,839 --> 00:26:26,559
someone in a spot to be the judge of someone else.

535
00:26:27,319 --> 00:26:30,400
And if you systematize things that like, can we just

536
00:26:30,440 --> 00:26:33,119
work together shoulder shoulder looking at the system and kind

537
00:26:33,160 --> 00:26:36,960
of you know, spread out this highly complex unit of

538
00:26:37,000 --> 00:26:40,720
sending a message on this platform that's got these vulnerabilities

539
00:26:41,119 --> 00:26:45,240
and explain how that actually works instead. But the trick

540
00:26:45,359 --> 00:26:47,680
was always that that was always looked at as a

541
00:26:47,680 --> 00:26:50,400
technical thing and always got chucked over the fence to

542
00:26:50,440 --> 00:26:50,920
the devs.

543
00:26:51,319 --> 00:26:51,480
Speaker 1: Right.

544
00:26:51,519 --> 00:26:53,720
Speaker 3: But if we bring into the conversation a way of

545
00:26:54,359 --> 00:26:57,480
describing these problems and solutions in a set of state

546
00:26:57,559 --> 00:27:01,119
changes that's understandable by both side, and that's where we win.

547
00:27:01,279 --> 00:27:05,039
Where we have this really collaborative environment now where we're

548
00:27:05,079 --> 00:27:08,960
talking about everything that everyone cares about. And so you

549
00:27:08,960 --> 00:27:12,039
know that goes to how we do specification. So we

550
00:27:12,079 --> 00:27:15,440
do a lot of spec a specification by example from

551
00:27:15,480 --> 00:27:19,799
the behavior driven design stuff with guys like Joshua Kariewski

552
00:27:19,880 --> 00:27:22,480
and Dan North and others that have really pushed this.

553
00:27:22,839 --> 00:27:27,200
Goyko is another one, so growing software with Objura, I

554
00:27:27,240 --> 00:27:29,680
forget what it is. There's a there's a growing software book,

555
00:27:29,680 --> 00:27:31,839
the Goose Book I think it's called that also talks

556
00:27:31,839 --> 00:27:34,799
about a lot of this stuff. But really it's going

557
00:27:34,839 --> 00:27:37,519
back to that human friendly thing. And the reason that

558
00:27:37,519 --> 00:27:40,559
event modeling is a story like thing is because humanity

559
00:27:40,640 --> 00:27:42,160
kind of built on stories.

560
00:27:41,920 --> 00:27:44,079
Speaker 2: Right, yeah, how it's how humans work?

561
00:27:44,160 --> 00:27:46,680
Speaker 3: Yeah, yeah, exactly like everything like you go to sales,

562
00:27:46,680 --> 00:27:49,920
you go to any kind of domain. A story is

563
00:27:50,000 --> 00:27:52,960
how we retain the most. Right, We'll never remember a

564
00:27:53,000 --> 00:27:55,039
graph like we have a really cool graph about how

565
00:27:55,079 --> 00:27:58,599
your system's done. Cool, but I'm always going to have

566
00:27:58,680 --> 00:28:01,200
to refer to the graph to actually use it. Where's

567
00:28:01,200 --> 00:28:03,319
the story really sticks in your head? So when I'm

568
00:28:03,359 --> 00:28:06,880
done with the event modeling workshop or a meeting about

569
00:28:06,880 --> 00:28:09,160
it and I was looking at it, actually retain at

570
00:28:09,440 --> 00:28:12,519
much higher percentage of what was discussed because it sticks

571
00:28:12,519 --> 00:28:14,680
in my head. As in a story format.

572
00:28:14,680 --> 00:28:16,880
Speaker 1: And if you sing the story to the Barney song,

573
00:28:17,400 --> 00:28:18,559
you'll have even more.

574
00:28:19,079 --> 00:28:23,680
Speaker 3: Mind Yeah, I mean, do what you like on your team.

575
00:28:23,799 --> 00:28:28,359
Speaker 1: Right, it becomes an earworm. Now you can't get it

576
00:28:28,359 --> 00:28:30,440
out of your head, go to bed singing it every night.

577
00:28:30,720 --> 00:28:34,960
Speaker 3: Now you're trapped exactly. Definitely, definitely. Oh that is really good.

578
00:28:35,039 --> 00:28:36,599
I'm gonna I'm gonna have to use that.

579
00:28:36,720 --> 00:28:38,480
Speaker 1: I'll be here for the rest of the show, folks, I.

580
00:28:38,440 --> 00:28:40,359
Speaker 3: Know I'm taking notes.

581
00:28:41,960 --> 00:28:44,920
Speaker 1: For more tips follow me and media.

582
00:28:45,079 --> 00:28:47,279
Speaker 3: Can I hire you, Carl, I'm gonna We're gonna like,

583
00:28:47,480 --> 00:28:50,000
we're gonna bring you on onto some of these difficult projects.

584
00:28:50,200 --> 00:28:53,799
Can you play tub something that's kind of repetitive, right, nice.

585
00:28:55,359 --> 00:28:55,920
Speaker 2: To you.

586
00:28:56,480 --> 00:28:59,319
Speaker 3: It just goes on and on ends.

587
00:29:00,079 --> 00:29:04,279
Speaker 1: But barbaro, no, no, no, I'm sorry.

588
00:29:06,400 --> 00:29:10,240
Speaker 2: Anyway, we should take a break, Yeah, we should.

589
00:29:10,440 --> 00:29:12,119
Speaker 1: It feels like a great place to take a break.

590
00:29:12,119 --> 00:29:15,119
And we'll be right back after these very important messages.

591
00:29:15,160 --> 00:29:16,480
And by the way, if you don't want to hear

592
00:29:16,519 --> 00:29:20,599
these messages, you can get an ad free feed by

593
00:29:20,599 --> 00:29:23,680
becoming a five dollars month patron at Patreon dot dot

594
00:29:23,680 --> 00:29:28,359
NetRocks dot com. We'll be right back. You know. Dot

595
00:29:28,440 --> 00:29:31,359
net six has officially reached the end of support, and

596
00:29:31,440 --> 00:29:34,400
now is the time to upgrade. Dot Net eight is

597
00:29:34,440 --> 00:29:38,839
well supported on AWS. Learn more at aws dot Amazon

598
00:29:38,920 --> 00:29:43,960
dot com, slash dot net. And we're back. It's dot

599
00:29:44,000 --> 00:29:46,640
net rocks. I'm Carl Franklin. That's my friend Richard Campbell. Hey,

600
00:29:46,839 --> 00:29:50,039
and Adam Dimitrek is here. And we were just about

601
00:29:50,079 --> 00:29:51,519
to sing tub thumping songs.

602
00:29:51,559 --> 00:29:55,680
Speaker 3: So can we get the tub thumping as the ultro.

603
00:29:55,599 --> 00:29:58,160
Speaker 2: Music days get knocked down.

604
00:30:01,799 --> 00:30:03,240
Speaker 3: A camp, it just goes on and on.

605
00:30:03,359 --> 00:30:07,000
Speaker 1: Yeah, and again I apologize for not going to sun track.

606
00:30:07,079 --> 00:30:09,759
Speaker 3: Well, that's totally fine. Actually it's it's on track. Is

607
00:30:09,839 --> 00:30:12,720
we're exploring why this kind of stuff works and the

608
00:30:12,759 --> 00:30:16,119
way why my stories highly connected, you know, are if

609
00:30:16,160 --> 00:30:19,240
we if we design our systems using tools that are

610
00:30:19,240 --> 00:30:20,920
friendly to the human brain, I think we will be

611
00:30:20,960 --> 00:30:24,920
way more successfully. So I think that's kind of the part.

612
00:30:24,960 --> 00:30:26,759
And you know, if if em moling really didn't come

613
00:30:26,799 --> 00:30:32,599
up as an idea, it actually was formulation of many

614
00:30:32,599 --> 00:30:35,240
different things that worked in the industry. So one of

615
00:30:35,279 --> 00:30:39,640
the things that worked was a workshop type of environment

616
00:30:39,720 --> 00:30:42,319
versus a meeting, so that there's constructive things going on

617
00:30:42,359 --> 00:30:44,680
and you're actually collaborating. There's no I just have action

618
00:30:44,759 --> 00:30:46,960
items at the end. Of a meeting, like we actually

619
00:30:46,960 --> 00:30:51,039
did stuff during the meeting, which is much better the yeah,

620
00:30:51,119 --> 00:30:53,079
exactly like my meeting.

621
00:30:53,200 --> 00:30:53,359
Speaker 2: Right.

622
00:30:53,400 --> 00:30:55,640
Speaker 3: We've been in those places where like I just want

623
00:30:55,640 --> 00:30:57,559
to go back to my desk and get something done,

624
00:30:57,559 --> 00:30:59,680
but I've been sitting in meetings all day, right, So

625
00:31:00,039 --> 00:31:02,000
we definitely have no meetings now, and.

626
00:31:01,920 --> 00:31:03,440
Speaker 1: We're going to have a meeting to find out why

627
00:31:03,480 --> 00:31:05,160
you have been not so productive.

628
00:31:05,880 --> 00:31:09,400
Speaker 3: Yeh, exactly, Maybe a meeting about the meetings to see

629
00:31:09,400 --> 00:31:14,279
what's meaning old cliche jokes at this point, I'm sure,

630
00:31:15,160 --> 00:31:17,440
but yeah, so you know, one of those things was

631
00:31:17,960 --> 00:31:21,440
the collaborative approach and having in person stuff. The other

632
00:31:21,440 --> 00:31:24,079
thing was I already mentioned was the specification by example,

633
00:31:24,160 --> 00:31:27,559
seeing actual examples to the system as a specification that's

634
00:31:27,599 --> 00:31:30,559
a little bit more friendly to the human brain and

635
00:31:30,640 --> 00:31:34,440
all that. We have obviously this idea of multiple models

636
00:31:34,480 --> 00:31:37,200
to make sure that we can express what a specific

637
00:31:37,279 --> 00:31:40,960
part of a workflow needs based on a common source

638
00:31:41,000 --> 00:31:43,920
of truth, which is very easily implement if you are

639
00:31:43,960 --> 00:31:46,039
doing events sourcing. Back again, as I say, it's not

640
00:31:46,240 --> 00:31:50,960
necessary to do event modeling, but oftentimes they're highly complementary.

641
00:31:51,000 --> 00:31:55,839
So there's also this idea which we touched upon of immutability,

642
00:31:55,880 --> 00:31:59,400
So everything in here in terms of the source of

643
00:31:59,400 --> 00:32:02,480
truth is not utable, and so this additive only approach

644
00:32:02,559 --> 00:32:05,039
is also it gives you, you know, caching is way

645
00:32:05,039 --> 00:32:07,079
easier when you're dealing with additive only, like you're just

646
00:32:07,079 --> 00:32:09,240
moving up point you're to validate cash and things like that,

647
00:32:09,359 --> 00:32:11,160
or see how far you caught up to so a

648
00:32:11,160 --> 00:32:14,240
lot of you know, technical things are are much better.

649
00:32:14,519 --> 00:32:17,000
It also opens up the door to functional style programming.

650
00:32:17,000 --> 00:32:19,319
You don't have to have a functional language. So all

651
00:32:19,319 --> 00:32:22,400
the f sharp proponents really do like events sourcing because

652
00:32:22,400 --> 00:32:26,160
of this immutability part, and like you know, growing ledger,

653
00:32:26,559 --> 00:32:28,880
it's really easy to feed that into your functions and

654
00:32:29,359 --> 00:32:32,359
do mathematical map produce on these things and all that

655
00:32:32,400 --> 00:32:35,119
kind of stuff left folds and all sorts of you know,

656
00:32:35,559 --> 00:32:38,519
functional paradigms. But you don't need that. You can actually

657
00:32:38,519 --> 00:32:42,039
explain those benefits in human language to business that you

658
00:32:42,119 --> 00:32:45,759
have a guarantee that anytime you've had this history, if

659
00:32:45,799 --> 00:32:47,319
you try to do this, you're always going to end

660
00:32:47,400 --> 00:32:49,400
up with this result. So this idea of a pure

661
00:32:49,400 --> 00:32:52,839
function enters into the arena as well where things that

662
00:32:52,880 --> 00:32:56,200
you test in your unit tests, etc. Are always going

663
00:32:56,240 --> 00:32:59,079
to be deterministic, so given the same inputs, you're always

664
00:32:59,079 --> 00:33:00,759
going to have the same output. That makes for really

665
00:33:00,799 --> 00:33:03,720
really strong unit tests and you know, brings a lot

666
00:33:03,759 --> 00:33:07,640
of benefits there. So that's you know, all of these

667
00:33:07,640 --> 00:33:10,440
things are are kind of at play. So you know,

668
00:33:10,480 --> 00:33:14,720
things like domain driven design with organizing things within bounded

669
00:33:14,799 --> 00:33:18,039
context so that things are related using ubiicuous language to

670
00:33:18,079 --> 00:33:20,839
make sure that the terminology is something that everyone understands

671
00:33:21,039 --> 00:33:24,720
for a particular context that ends up being embedded in

672
00:33:24,759 --> 00:33:26,519
the event names and the event model. So all of

673
00:33:26,519 --> 00:33:28,200
the things that you're trying to do with all of

674
00:33:28,240 --> 00:33:30,440
the kind of best practices that I've seen kind of

675
00:33:31,240 --> 00:33:33,599
you know, when I started a company, it's that we

676
00:33:33,640 --> 00:33:37,039
don't have people like I don't have money to spend

677
00:33:37,079 --> 00:33:39,920
on project managers. I don't have money to spend on

678
00:33:39,920 --> 00:33:41,759
product owners. I don't have money to spend on QA.

679
00:33:41,759 --> 00:33:43,440
I don't have money to spend on any of these

680
00:33:43,519 --> 00:33:46,720
How can we make a system that takes care of

681
00:33:46,720 --> 00:33:49,559
what those jobs took care of, or at least scale

682
00:33:49,720 --> 00:33:53,160
their efficiency so that I don't have to hire twelve pms.

683
00:33:53,200 --> 00:33:55,039
I can just hire one to do that to take

684
00:33:55,079 --> 00:33:57,599
care of these projects. And so if event modeling was

685
00:33:57,680 --> 00:34:00,799
kind of born out of needing to fullfill all those goals.

686
00:34:01,200 --> 00:34:03,440
Speaker 1: I have a question for you about the back end

687
00:34:03,480 --> 00:34:07,039
databases that uses your event store. Is it a typical

688
00:34:07,319 --> 00:34:09,119
and Richard you might know the answer this too, is

689
00:34:09,159 --> 00:34:13,199
a typical practice to sort of have a system running

690
00:34:13,239 --> 00:34:16,480
in parallel or a database running in parallel that you

691
00:34:16,639 --> 00:34:19,400
that is not online to the customers, but you know,

692
00:34:19,480 --> 00:34:22,840
you keep a clone of it current all the time

693
00:34:22,960 --> 00:34:25,199
so that you know when you do need to go

694
00:34:25,320 --> 00:34:28,159
back in time and look at it from another perspective,

695
00:34:28,199 --> 00:34:30,320
you don't have to spend you don't have to waste

696
00:34:30,360 --> 00:34:34,960
time sort of dropping the you know, copying the database again.

697
00:34:36,320 --> 00:34:38,880
Is that is that something that you do normally? Yeah?

698
00:34:38,960 --> 00:34:42,599
Speaker 3: Yeah, oh yeah, all the time. I mean it's so

699
00:34:42,679 --> 00:34:45,840
I know, I think I know where my background and

700
00:34:46,239 --> 00:34:48,360
nightmares come from when you ask that question, because I've

701
00:34:48,400 --> 00:34:50,719
been in systems where it's really hard to find if

702
00:34:50,760 --> 00:34:54,079
you need two gigabytes or four gigabytes of the production

703
00:34:54,199 --> 00:34:57,719
database to debug something, and that's those are not fun times.

704
00:34:58,880 --> 00:35:02,119
And so when usually when we run these things, yes,

705
00:35:02,119 --> 00:35:04,800
there is an active and a backup database of following

706
00:35:04,880 --> 00:35:07,840
database that can do that. A lot of times, technologies

707
00:35:07,840 --> 00:35:13,360
that Kafka can have something that keeps track of x

708
00:35:13,400 --> 00:35:16,199
amount of days or weeks worth of data to go

709
00:35:16,280 --> 00:35:19,280
and interrogate as you wish on the side. Yeah, and

710
00:35:19,440 --> 00:35:20,679
it's really easy with event source.

711
00:35:20,840 --> 00:35:24,039
Speaker 1: Is that usually something that happens in real time or

712
00:35:24,159 --> 00:35:25,599
is it like an overnight Yeah?

713
00:35:25,679 --> 00:35:28,679
Speaker 3: Yeah, yeah live. You want a live system, So a

714
00:35:28,719 --> 00:35:30,480
lot of times we will have that. A lot of

715
00:35:30,519 --> 00:35:32,840
times with most events stores, they are just sitting as

716
00:35:32,880 --> 00:35:35,480
flat files on discs, either as a giant chunks of

717
00:35:35,519 --> 00:35:38,840
you know, two hundred and fifty megabyte files that have

718
00:35:38,960 --> 00:35:41,599
the events serialized within them, and you can just literally

719
00:35:41,639 --> 00:35:44,840
just pull them as copies and then you're really you

720
00:35:44,880 --> 00:35:48,760
can really leverage you know, your infrastructure and the hard

721
00:35:48,840 --> 00:35:51,559
drive tech that you have to kind of have that

722
00:35:51,599 --> 00:35:53,599
work done for you if you're mirroring.

723
00:35:53,679 --> 00:35:56,960
Speaker 1: I imagine part of this calculus is you know, how

724
00:35:57,800 --> 00:36:00,920
much time worth of events do we keep live? Yeah?

725
00:36:00,960 --> 00:36:03,280
And when do they drop off and get backed up

726
00:36:03,360 --> 00:36:03,800
or something?

727
00:36:03,920 --> 00:36:08,239
Speaker 3: Yeah. So most mature events stores will have a hot

728
00:36:08,239 --> 00:36:11,119
and cold part where things go to a colder kind

729
00:36:11,159 --> 00:36:14,159
of storage that's slower, but it's there just in case,

730
00:36:14,159 --> 00:36:16,239
and it kind of makes sense to how businesses run.

731
00:36:16,480 --> 00:36:19,239
An active order will be on the SSD currently and

732
00:36:19,280 --> 00:36:22,280
it'll be very fast to work with those events, whereas

733
00:36:22,320 --> 00:36:24,320
obviously if you're coming back to the website, you know,

734
00:36:24,360 --> 00:36:26,679
a year later and your shopping carts still there, you're

735
00:36:26,719 --> 00:36:28,880
kind of like, hey, welcome back. Let's take a second

736
00:36:28,880 --> 00:36:33,159
here to see what the heck you were doing. So,

737
00:36:33,639 --> 00:36:37,639
and there's other strategies such as snapshotting and and closing

738
00:36:37,679 --> 00:36:39,800
the books, which is really making sure that the streams

739
00:36:39,800 --> 00:36:42,480
of data don't live forever, because that's not how usual.

740
00:36:42,599 --> 00:36:45,000
You know, businesses run like a trading at af your

741
00:36:45,039 --> 00:36:49,280
if you go to a stock trading exchange or whatever,

742
00:36:49,320 --> 00:36:52,639
they they end their day, right, a reconciliation, right, So

743
00:36:52,679 --> 00:36:56,280
there's a natural seam in the timeline for different things.

744
00:36:56,320 --> 00:36:58,400
And so you know, same thing. If we were doing

745
00:36:58,440 --> 00:37:00,760
this on pen and paper, the end of the year,

746
00:37:00,800 --> 00:37:03,760
you probably empty out your filing cabinet, put it in

747
00:37:03,880 --> 00:37:05,199
archives or something like that.

748
00:37:05,280 --> 00:37:07,559
Speaker 2: Yeah, I mean, it's true that any retail store has

749
00:37:07,599 --> 00:37:10,280
an end of day, Like you have to draw a

750
00:37:10,320 --> 00:37:13,679
line somewhere to have measurable data, So you know, what's

751
00:37:13,679 --> 00:37:14,679
the interval, Well.

752
00:37:15,039 --> 00:37:18,079
Speaker 3: It's just also about management of information. I mean, this

753
00:37:18,159 --> 00:37:20,679
is not rocket science here. This is not trying to

754
00:37:20,719 --> 00:37:25,559
figure out brand news storing mechanisms or technologies about organizing

755
00:37:25,559 --> 00:37:27,880
your information, just like you would with pen and paper.

756
00:37:27,920 --> 00:37:31,480
You really want to not be swamped with disorganization or

757
00:37:31,519 --> 00:37:34,599
too much information. So you're going to have a filing system,

758
00:37:34,599 --> 00:37:37,559
you're going to have an archiving methodology if you're in

759
00:37:37,599 --> 00:37:40,679
a serious business. And that doesn't really change that much

760
00:37:40,719 --> 00:37:42,800
when you think about it when you're going digital from

761
00:37:42,920 --> 00:37:43,639
pen and paper.

762
00:37:44,039 --> 00:37:46,360
Speaker 2: Well, I would argue, usually you're not the one making

763
00:37:46,360 --> 00:37:49,119
a decision that's a business decision. Yeah, there's probably even

764
00:37:49,159 --> 00:37:51,920
general accounting practices that have to be followed for a

765
00:37:51,960 --> 00:37:52,360
bunch of that.

766
00:37:52,480 --> 00:37:55,119
Speaker 3: Oh yeah, there's a lot of regulatory things as well.

767
00:37:55,280 --> 00:38:00,000
So those things are really very interesting to think about

768
00:38:00,119 --> 00:38:02,840
when you're thinking about the motivation for this. But having

769
00:38:02,840 --> 00:38:04,880
these good disciplines does give you a lot of things.

770
00:38:04,920 --> 00:38:07,400
So for example, I told you about spreading out you know,

771
00:38:07,480 --> 00:38:11,599
complex things, horizontal steps. What we found is that those

772
00:38:11,599 --> 00:38:13,559
steps end up being really good units of work. And

773
00:38:13,599 --> 00:38:17,239
we've actually said that we're going to have a standard

774
00:38:17,280 --> 00:38:20,079
price for each one. So when we do work. We

775
00:38:20,199 --> 00:38:22,719
do fixed cost only and we fix bugs for free

776
00:38:22,800 --> 00:38:26,920
because both the client and the subcontractors are happy with

777
00:38:27,000 --> 00:38:31,360
that deal. In fact, it's something that drives quality with

778
00:38:31,400 --> 00:38:33,679
the right carrots and sticks. If I go super fast

779
00:38:33,719 --> 00:38:35,320
and like do twelve steps in a day, I'm going

780
00:38:35,360 --> 00:38:37,719
to have a whole bunch of bugs. Well, our contract

781
00:38:37,800 --> 00:38:39,800
says that you have to fix anything before you get

782
00:38:39,840 --> 00:38:41,679
to work on new work, So you're not going to

783
00:38:41,679 --> 00:38:44,400
be able to charge for any work. If you just blit,

784
00:38:44,559 --> 00:38:48,840
you know, totally chat GPT way through twelve things and

785
00:38:48,960 --> 00:38:50,920
think they're popping up all over the place next week,

786
00:38:51,199 --> 00:38:53,519
you're not going to be having a good time for

787
00:38:53,599 --> 00:38:56,840
the next three weeks of fixing them. The things that

788
00:38:56,880 --> 00:38:59,239
you kind of went through pretty quickly, so it self

789
00:38:59,280 --> 00:39:02,320
adjusts really well, and I think both the clients and

790
00:39:03,360 --> 00:39:06,760
the contractors appreciate that. And also, those units of work

791
00:39:06,800 --> 00:39:09,679
are highly autonomous because now, as I said, we have

792
00:39:09,679 --> 00:39:13,000
different projections, different you know, abstractions for each piece. So

793
00:39:13,480 --> 00:39:16,199
if I do a bad job, I'm not impacting the

794
00:39:16,199 --> 00:39:19,159
person working on the on the piece of workflow right

795
00:39:19,199 --> 00:39:20,960
next to me, right as long as we're adhering to

796
00:39:21,000 --> 00:39:24,559
those pre and post conditions of every little workflow step,

797
00:39:24,920 --> 00:39:28,320
we're good. And if I do a crappy job, I

798
00:39:28,360 --> 00:39:31,880
can replace that entire workflow step and I don't really

799
00:39:31,880 --> 00:39:33,719
have to coordinate with the others. So this is like

800
00:39:33,800 --> 00:39:36,320
the pizza sized team for Agile kind of goes away.

801
00:39:36,599 --> 00:39:39,519
We can start to really measure the size of teams

802
00:39:39,559 --> 00:39:43,800
based on how mature our design is. That's the thing

803
00:39:43,840 --> 00:39:45,360
that pulls back. If I don't have time to make

804
00:39:45,400 --> 00:39:48,159
an event model, then I only have, you know, enough

805
00:39:48,519 --> 00:39:50,480
work for a team of size five. But if I

806
00:39:50,519 --> 00:39:53,440
actually take the time to build out and understand how

807
00:39:53,440 --> 00:39:55,960
the system is going to treat information, how many work

808
00:39:56,239 --> 00:39:59,760
workflow steps I have, then I can have the latitude too.

809
00:40:00,199 --> 00:40:02,199
Ten fifteen people work on the same thing, and we

810
00:40:02,320 --> 00:40:05,119
know that they're not gonna step on each other's toes

811
00:40:05,119 --> 00:40:07,639
and and things will click like lego. And that's kind

812
00:40:07,639 --> 00:40:10,360
of how other engineering disciplines work. You know, car manufacturing,

813
00:40:10,360 --> 00:40:13,719
all these other things are they have standardized pieces now

814
00:40:13,800 --> 00:40:15,599
where you know you don't have to You can get

815
00:40:15,599 --> 00:40:18,760
a rebuilt alternator from an alternative you know, some other manufacturer,

816
00:40:18,760 --> 00:40:21,000
and they work just fine. So we're trying to really

817
00:40:21,039 --> 00:40:24,440
make if you know this type of approach bring software

818
00:40:24,480 --> 00:40:27,480
development to be more of a true engineering practice rather

819
00:40:27,519 --> 00:40:29,840
than you know, being a lot of experiments and just

820
00:40:29,880 --> 00:40:32,960
feedback cycles as we really wanted to, like, oh, iterate, iterate,

821
00:40:32,960 --> 00:40:34,519
that's going to solve everything. Well, you know, we look

822
00:40:34,559 --> 00:40:36,360
at other industries, they kind of take time to design

823
00:40:36,360 --> 00:40:39,400
things a little bit. So we're kind pushing the needle

824
00:40:39,440 --> 00:40:41,079
back a little bit to the middle because you know,

825
00:40:41,119 --> 00:40:44,360
we came up, we came up through this idea in

826
00:40:44,400 --> 00:40:46,400
the eighties and nineties of this big design up front

827
00:40:46,440 --> 00:40:48,320
and the waterfall method and all this kind of stuff,

828
00:40:48,320 --> 00:40:50,800
and you know, take a whole year to plan something

829
00:40:50,880 --> 00:40:53,400
and then you know, things don't go as well when

830
00:40:53,400 --> 00:40:56,159
in reality, we one all the way to agile, right,

831
00:40:56,159 --> 00:41:00,360
the to just iterate, yeah, because we hate planning. So

832
00:41:00,639 --> 00:41:03,079
I think, you know, agile missed a chance to really

833
00:41:03,159 --> 00:41:05,280
focus on that small design up front, which is a

834
00:41:05,280 --> 00:41:08,440
big opportunity. And I think don't mean driven design specific example,

835
00:41:08,480 --> 00:41:10,440
all of them kind of attacked that a little bit

836
00:41:10,480 --> 00:41:12,079
and said, hey, that's a good way.

837
00:41:12,119 --> 00:41:14,639
Speaker 1: You iterate too fast and you're going to cause problems,

838
00:41:15,039 --> 00:41:15,280
you know.

839
00:41:15,519 --> 00:41:18,719
Speaker 2: Yeah, yeah, but I mean agile also said the customer

840
00:41:18,800 --> 00:41:21,639
sitting beside you, right, like, and that's hard to do. Yeah, yeah,

841
00:41:21,679 --> 00:41:24,119
the real part. The point here was that you don't

842
00:41:24,119 --> 00:41:25,559
do a whole lot of design up front because it

843
00:41:25,599 --> 00:41:28,000
separates even the customer. Have the customer involved and in

844
00:41:28,039 --> 00:41:30,199
reality they don't want to sit around with you.

845
00:41:30,320 --> 00:41:32,679
Speaker 3: Yeah, you get another person in the middle called the

846
00:41:32,760 --> 00:41:38,960
product owners. Yeah, playing broken telephone. Yeah. So yeah, that's

847
00:41:39,039 --> 00:41:40,960
that's a lot of a lot of good things have

848
00:41:41,079 --> 00:41:42,679
come out out of it, and I think I think

849
00:41:42,679 --> 00:41:45,559
a lot of them, as I said before, are human benefits.

850
00:41:45,599 --> 00:41:50,960
Were gatekeeping and uh and and imposter syndrome go away.

851
00:41:51,000 --> 00:41:54,280
Like we've had people that have worked on our projects

852
00:41:54,320 --> 00:41:57,320
that are just fresh from another industry. There's a work

853
00:41:57,360 --> 00:41:59,880
Safe BC. Someone got injured on the job and they

854
00:41:59,880 --> 00:42:03,519
had to switch careers and work Safe BC augmented their

855
00:42:03,559 --> 00:42:06,119
pay for us. But they were able to start this

856
00:42:06,280 --> 00:42:08,719
because you know, each of these workflow steps, at least

857
00:42:08,719 --> 00:42:11,880
in event sourcing, is identical. Like there's only two patterns.

858
00:42:11,880 --> 00:42:13,920
So you're either working with a command handler or you're

859
00:42:13,960 --> 00:42:17,159
working with a read model. And if I'm a new person,

860
00:42:17,199 --> 00:42:18,760
all I have to do is like, hey, Tim, how

861
00:42:18,760 --> 00:42:21,519
did you do that command handler? I copy their code

862
00:42:21,679 --> 00:42:25,880
and just and all that. It's like the same pattern

863
00:42:25,920 --> 00:42:29,920
over and over again. So this repeatability is highly valuable

864
00:42:29,920 --> 00:42:31,800
because you get a lot of cadence. It also gives

865
00:42:31,800 --> 00:42:34,280
the excellent you know, estimates because you're doing the same

866
00:42:34,320 --> 00:42:36,280
thing over and over again. So you're sample sized growth,

867
00:42:36,559 --> 00:42:39,599
you know, mathematically speaking, your sample size for how long

868
00:42:39,639 --> 00:42:41,960
things take. You get a really good idea. Whereas if

869
00:42:42,000 --> 00:42:44,039
you were to throw a whole bunch of patterns all

870
00:42:44,039 --> 00:42:46,239
the time at every problem, you're going to have a

871
00:42:46,280 --> 00:42:50,480
smattering of small amounts of statistics for each pattern, and

872
00:42:50,519 --> 00:42:53,679
that's not going to be enough confidence to say that, yeah,

873
00:42:53,719 --> 00:42:56,239
I can do that for X amount of money. You're

874
00:42:56,480 --> 00:42:58,599
you're not going to have that amount of track record

875
00:42:58,599 --> 00:43:01,119
with that. So by repeating you know, a few core

876
00:43:01,239 --> 00:43:03,360
patterns over and over again, you really do that. And

877
00:43:03,400 --> 00:43:05,400
after ten like we've been in business for about ten

878
00:43:05,480 --> 00:43:09,119
years now, we've got like a ton of statistics to

879
00:43:09,199 --> 00:43:12,159
go on. And so when you know, when we say

880
00:43:12,199 --> 00:43:15,119
a project, will you know cost this much and take

881
00:43:15,159 --> 00:43:17,519
this much time, it's pretty spot on, especially if the

882
00:43:17,519 --> 00:43:21,760
client is there collaborating on the design saying yeah, these

883
00:43:21,760 --> 00:43:23,519
are the screens we want, Yeah, these are the steps

884
00:43:23,519 --> 00:43:26,880
that have to be taken to capture this information. From that,

885
00:43:26,920 --> 00:43:29,400
we can say, yeah, everyone's happy to sign on for

886
00:43:29,559 --> 00:43:31,079
you know, fixed costs and all that, and I think

887
00:43:31,559 --> 00:43:34,840
something that's really worthwhile and you're confident and you should

888
00:43:34,840 --> 00:43:36,920
be able to do for fixed costs. That I think

889
00:43:37,000 --> 00:43:40,239
is a sign of like maturity to be able to

890
00:43:40,559 --> 00:43:43,519
have you know, people take on that quote unquote risk

891
00:43:43,559 --> 00:43:46,480
and it's actually de risking a lot for both sides.

892
00:43:46,760 --> 00:43:48,719
And so back to that point, you know, someone that

893
00:43:49,159 --> 00:43:52,760
you know came into to work in software for the

894
00:43:52,760 --> 00:43:55,000
first time, they felt really at home because there was

895
00:43:55,280 --> 00:43:58,559
really good guardrails of how a framework within which to

896
00:43:58,639 --> 00:44:00,960
learn programming. So they can make all sorts of mistakes

897
00:44:01,000 --> 00:44:02,880
when they're making a command handler or they're making a

898
00:44:02,920 --> 00:44:05,400
read model, and they could iterate themselves to learn that.

899
00:44:05,519 --> 00:44:07,119
And of course their throughput is not going to be

900
00:44:07,159 --> 00:44:09,079
as much. They get paid the same amount for that

901
00:44:09,119 --> 00:44:11,360
piece of work as someone that's senior, so it might

902
00:44:11,360 --> 00:44:13,320
take them three weeks to do it. A senior person

903
00:44:13,360 --> 00:44:15,199
might take three hours if they're really really good. So

904
00:44:15,400 --> 00:44:18,119
we've seen a huge variance. It's also exposed a lot

905
00:44:18,119 --> 00:44:23,920
of the inequality in the industry, like a staff engineer's

906
00:44:24,000 --> 00:44:26,880
a senior engineer level one versus a level two, or

907
00:44:26,880 --> 00:44:29,719
there's like a five thousand dollars difference in pay. Well,

908
00:44:29,760 --> 00:44:32,199
the difference in pay for levels of skill we've seen

909
00:44:32,320 --> 00:44:35,119
is insane. We've had people make as low as three

910
00:44:35,119 --> 00:44:37,639
thousand dollars because they're new, to as high as seventy

911
00:44:37,679 --> 00:44:40,760
thousand in a month because they're so good. It's insane.

912
00:44:40,840 --> 00:44:45,920
How the variance of people's ability or incentive or devoting

913
00:44:45,960 --> 00:44:49,960
themselves to the amount of time, it's been very enlightening,

914
00:44:50,039 --> 00:44:52,760
and I just like the fact that you know, it

915
00:44:52,840 --> 00:44:55,800
kind of manages itself because when you have these standards,

916
00:44:55,840 --> 00:44:57,679
you have a system that kind of operates on its

917
00:44:57,679 --> 00:45:00,400
way on its own. You don't need to fill a

918
00:45:00,440 --> 00:45:02,440
whole bunch of other jobs to manage it, or at

919
00:45:02,519 --> 00:45:04,480
least if you have those jobs, you can scale out

920
00:45:04,480 --> 00:45:06,920
the amount of work under those jobs way further out.

921
00:45:07,000 --> 00:45:09,960
So you know, we've been pretty much a flat organization

922
00:45:10,079 --> 00:45:12,920
much like get hub started or Valve. It's just myself

923
00:45:12,960 --> 00:45:16,000
and everyone else doing the works, about twenty thirty people

924
00:45:16,320 --> 00:45:20,119
at peaks when we have larger projects, and there's really

925
00:45:20,639 --> 00:45:22,800
very little need for any kind of management like these

926
00:45:22,840 --> 00:45:25,480
event models kind of you know, we color them in

927
00:45:26,119 --> 00:45:29,760
as the project moves on. There's no backlog, so as

928
00:45:30,400 --> 00:45:33,599
we look at the schematic people just fill in the

929
00:45:34,000 --> 00:45:38,280
rectangles that represent the slices of the workflows. You know,

930
00:45:38,519 --> 00:45:40,679
they paint them yellow maybe if it's in progress, and

931
00:45:40,719 --> 00:45:42,920
the pink them green when they're done. And we always

932
00:45:42,920 --> 00:45:44,320
look at it and say, hey, this looks like it's

933
00:45:44,360 --> 00:45:48,400
fifty percent done. And some have done automation of miuro,

934
00:45:48,480 --> 00:45:51,199
for example the Whiteboard to kind of use its API

935
00:45:51,360 --> 00:45:53,360
to give you like a burn down chart equivalent. Right,

936
00:45:53,360 --> 00:45:55,840
they'll count how many of these slices are actually colored

937
00:45:55,840 --> 00:45:57,840
in versus not, and then you can see how many

938
00:45:57,840 --> 00:45:59,519
your own progress instead of have a nice little bar

939
00:45:59,559 --> 00:46:01,960
graph shows you what's going on. So we've replaced all

940
00:46:02,000 --> 00:46:04,880
the tooling with just an event model. But we're the extreme,

941
00:46:05,239 --> 00:46:07,800
like we just want to show what's possible, and most

942
00:46:07,880 --> 00:46:09,239
organizations are not going to be able to do that,

943
00:46:09,280 --> 00:46:11,840
we understand, but at least we kind of show what's possible,

944
00:46:11,960 --> 00:46:14,159
and then you know, for most people that's an answer

945
00:46:14,159 --> 00:46:15,840
somewhere in the middle. So we've had to integrate with

946
00:46:15,920 --> 00:46:20,440
Jira and other things for certain projects because that's what

947
00:46:20,480 --> 00:46:23,079
they have in their organizations. That's fine. You can translate

948
00:46:23,079 --> 00:46:25,639
these things and we're happy to do that so it's

949
00:46:25,920 --> 00:46:28,199
compatible with other things. But we always want to just

950
00:46:28,199 --> 00:46:32,239
push the envelope and and just show what can work

951
00:46:32,320 --> 00:46:34,199
so that people have the confidence to pick something in

952
00:46:34,239 --> 00:46:34,559
the middle.

953
00:46:34,599 --> 00:46:38,760
Speaker 1: Where can we find these tools in guidance from you

954
00:46:38,800 --> 00:46:39,320
and yours?

955
00:46:39,480 --> 00:46:45,320
Speaker 3: Ah? Well, I just yesterday I finally got a paper

956
00:46:45,360 --> 00:46:51,920
copy of Martin Dilger's Event Sourcing Understanding Event Sourcing Book.

957
00:46:52,159 --> 00:46:54,920
I wrote the forward for it because it's the first

958
00:46:54,920 --> 00:46:57,960
book that puts that writes about event modeling and event

959
00:46:58,000 --> 00:47:02,719
sourcing together. So it has in it examples that you'll

960
00:47:02,719 --> 00:47:05,280
find some of them online. I mean, I've been doing

961
00:47:05,360 --> 00:47:07,039
a lot of If you want to learn anything in

962
00:47:07,039 --> 00:47:08,760
a book, you can probably find it for free online.

963
00:47:08,760 --> 00:47:10,599
But this is like a concise kind of way of

964
00:47:10,599 --> 00:47:12,039
looking at it all in one place, and a lot

965
00:47:12,039 --> 00:47:14,719
of people want that. But yeah, you can see. I

966
00:47:14,760 --> 00:47:16,960
don't know if I can be legible or not, but

967
00:47:17,039 --> 00:47:18,840
yeah you can see. I guess the people who are

968
00:47:18,840 --> 00:47:20,440
listening to the radio they can't see what I'm showing.

969
00:47:20,480 --> 00:47:25,639
Speaker 1: But anyways, Okay, it looked like a page with a

970
00:47:25,760 --> 00:47:32,199
white background, wait, hold on and black writing.

971
00:47:32,800 --> 00:47:38,880
Speaker 3: Yeah, so it goes from from zero to fully implemented system,

972
00:47:39,039 --> 00:47:41,440
really good hands on book, and it's been on Lean pub.

973
00:47:41,920 --> 00:47:43,960
This is the first It's just got released on Amazon,

974
00:47:44,000 --> 00:47:46,480
so I just ordered as soon as I could. Cool,

975
00:47:46,519 --> 00:47:48,519
but it was a It's been on lean pub for

976
00:47:48,519 --> 00:47:50,960
about five weeks now and it's been holding the top

977
00:47:51,000 --> 00:47:54,719
spot wow for weekly sales the whole time. It's it's

978
00:47:54,760 --> 00:47:56,639
been something that a lot of the community has been

979
00:47:56,679 --> 00:47:58,679
asking for because a lot of people have been doing

980
00:47:58,719 --> 00:48:01,639
event modeling or trying to you know, promote it and

981
00:48:02,239 --> 00:48:03,800
use it because they like it and they want to

982
00:48:03,840 --> 00:48:06,159
carry it through to the rest of the organizations. So

983
00:48:07,199 --> 00:48:09,000
you know, I've been threatening to write a book myself

984
00:48:09,039 --> 00:48:11,239
on it, but running a business and doing that is

985
00:48:11,360 --> 00:48:13,679
a little bit too much. But I'm glad that Martin

986
00:48:13,719 --> 00:48:14,719
did it and included it.

987
00:48:15,400 --> 00:48:16,840
Speaker 2: So I wrote the forward.

988
00:48:17,440 --> 00:48:18,760
Speaker 3: I wrote the forward.

989
00:48:18,840 --> 00:48:23,280
Speaker 1: Yes, is there anything that is there anything that you

990
00:48:23,360 --> 00:48:26,039
wish you would have written in there that you didn't

991
00:48:26,039 --> 00:48:27,400
have no space to?

992
00:48:28,960 --> 00:48:33,480
Speaker 3: Martin's a kindred spirit. I met Martin in Munich in

993
00:48:34,320 --> 00:48:37,119
last year about this time, maybe a little bit longer,

994
00:48:37,320 --> 00:48:40,119
maybe an extra month, think the end of October something

995
00:48:40,159 --> 00:48:42,440
like that. Anyway, I was giving an event modeling presentation

996
00:48:43,559 --> 00:48:46,760
at their event driven meet up there and and he

997
00:48:47,039 --> 00:48:49,920
drove in, you know, hundreds of kilometers from his small

998
00:48:49,960 --> 00:48:53,599
town near Munich to meet me. And that's kind of

999
00:48:53,679 --> 00:48:55,760
I think when he started to write the book, he

1000
00:48:55,840 --> 00:48:59,239
was very inspired by a lot of the work that

1001
00:48:59,280 --> 00:49:02,159
the community has been doing. And the original article that

1002
00:49:02,199 --> 00:49:05,519
I wrote was from really twenty eighteen that kind of

1003
00:49:05,519 --> 00:49:08,599
got pushed. I think I wrote it on Medium. I

1004
00:49:08,599 --> 00:49:10,920
forget where I wrote it, but it went viral in

1005
00:49:11,119 --> 00:49:15,039
the fall of twenty eighteen October, and I don't know

1006
00:49:15,079 --> 00:49:17,480
what the heck was going on, why my phone's going off,

1007
00:49:17,480 --> 00:49:21,079
but it got the top story on Hacker News, and

1008
00:49:21,480 --> 00:49:23,800
I'm like, what the heck? Why is everyone so interested?

1009
00:49:23,800 --> 00:49:25,639
And that kind of gave me like, Okay, this is

1010
00:49:25,639 --> 00:49:27,800
not just how we were. People actually want the same

1011
00:49:27,840 --> 00:49:30,440
things as we want. They want to do things this way.

1012
00:49:30,800 --> 00:49:33,760
So I made a website for it, eventmodeling dot org,

1013
00:49:34,079 --> 00:49:36,159
and I basically stick all the resources on there. I'm

1014
00:49:36,159 --> 00:49:39,119
not very good at keeping it up to date as much,

1015
00:49:39,119 --> 00:49:41,000
but I try to stick in like links to books

1016
00:49:41,000 --> 00:49:44,639
and research and the videos, the YouTube channels of examples,

1017
00:49:44,639 --> 00:49:46,599
it's all on there, link to that. But yeah, the

1018
00:49:46,639 --> 00:49:49,960
history of how this whole thing evolved, it wasn't I

1019
00:49:50,000 --> 00:49:52,199
did not intend to make event well, it was just

1020
00:49:52,559 --> 00:49:54,119
you know, we found a really good way of working

1021
00:49:54,119 --> 00:49:57,559
that's effective and then captured you know, how we worked

1022
00:49:58,320 --> 00:50:02,039
into both a process and the notation that people could reuse.

1023
00:50:02,320 --> 00:50:06,239
And so that's essentially what event modeling is and from it,

1024
00:50:06,320 --> 00:50:08,880
you know, other people are writing books on it. There's

1025
00:50:08,920 --> 00:50:11,559
a lot of tools also that kind of Martin has

1026
00:50:11,559 --> 00:50:13,639
an ad in to MIRO that allows you to more

1027
00:50:13,679 --> 00:50:16,639
easily manipulate things that are event modeling on a mirror

1028
00:50:16,679 --> 00:50:19,280
board to what to mural you know, MIRO, the real

1029
00:50:19,320 --> 00:50:22,880
time board. It's now called MIRO the Whuro Collaborative whiteboard.

1030
00:50:24,119 --> 00:50:27,079
So a lot of companies use MIRO as a whiteboard.

1031
00:50:27,159 --> 00:50:30,480
I mean same you know, just like maybe dot net

1032
00:50:30,679 --> 00:50:34,519
teams use the white collaborative whiteboard. Yeah, exactly. Yeah, so

1033
00:50:34,559 --> 00:50:36,079
it used to be called real time board. Like if

1034
00:50:36,119 --> 00:50:37,559
you look back in the day, that was kind of

1035
00:50:37,559 --> 00:50:40,039
a very popular thing in the startups, and I don't know,

1036
00:50:40,159 --> 00:50:44,039
ten fifteen years ago, but they rebranded I forget exactly

1037
00:50:44,079 --> 00:50:47,360
how long to Miro because maybe those copyright things are

1038
00:50:47,400 --> 00:50:49,320
just they wanted a unique name. I don't know, you

1039
00:50:49,360 --> 00:50:54,960
can ask them, but anyway, they Yeah, so Martin's written

1040
00:50:55,000 --> 00:50:57,960
an ad in for that. Other people have written plugins

1041
00:50:57,960 --> 00:51:00,960
that basically take an event model and they and it

1042
00:51:00,960 --> 00:51:04,519
interrogates it and creates all your tests for it, I

1043
00:51:04,639 --> 00:51:07,400
like for your solution, which is really cool because yeah,

1044
00:51:07,440 --> 00:51:09,480
these given when ND tests in the style of a

1045
00:51:09,559 --> 00:51:12,639
specification by example BDD style tests are really good with

1046
00:51:12,679 --> 00:51:15,920
event solutions. You just say, what's my given You always say,

1047
00:51:16,280 --> 00:51:18,079
you know, your setup is always a set of events

1048
00:51:18,119 --> 00:51:20,000
that you can just pull directly from the event model,

1049
00:51:20,000 --> 00:51:22,400
and then your when what you're testing is the command

1050
00:51:22,440 --> 00:51:25,079
that you're trying to poke the system with, and then

1051
00:51:25,199 --> 00:51:27,239
your assertion is always that you it spits out the

1052
00:51:27,280 --> 00:51:30,639
event you expect. So it's really awesome and in fact,

1053
00:51:30,679 --> 00:51:33,679
actually there's another benefit of this is that things like

1054
00:51:33,760 --> 00:51:36,800
integration tests and acceptance tests, we've pushed them to be

1055
00:51:36,840 --> 00:51:40,159
subcutaneous and then have the green boxes from an event

1056
00:51:40,199 --> 00:51:42,519
model and kind of capture long running processes. So we've

1057
00:51:42,599 --> 00:51:46,400
kind of shoved all integration testing to be just a

1058
00:51:46,519 --> 00:51:49,800
unit test. So even if we have like a end

1059
00:51:49,840 --> 00:51:53,920
to end test of some long process. The projections that

1060
00:51:53,960 --> 00:51:56,760
we use encompass that. And because there are pure functions,

1061
00:51:56,760 --> 00:51:58,880
these run within seconds, so we don't use any mocks

1062
00:51:59,480 --> 00:52:02,880
anything like that. It's just all poco pojo, whatever your

1063
00:52:02,960 --> 00:52:07,280
language is. There are all the property bags that sit

1064
00:52:07,360 --> 00:52:09,960
there for setting things up, and in fact there's a

1065
00:52:10,039 --> 00:52:13,760
highly kind of opinionated way of doing things, to the

1066
00:52:13,760 --> 00:52:16,760
point where I'm thinking that most people will rewrite their

1067
00:52:16,800 --> 00:52:19,800
own test harnesses for unit testing, because you're taking slices

1068
00:52:19,880 --> 00:52:22,159
of a history that you can predefine as in the ray,

1069
00:52:22,519 --> 00:52:25,400
and then you can take slice length of zero from

1070
00:52:25,440 --> 00:52:28,599
the top to say, what's the default view of this window,

1071
00:52:28,880 --> 00:52:30,400
and then you take the next one that's your next

1072
00:52:30,400 --> 00:52:32,719
test case. Okay, what happens when this event's in there?

1073
00:52:32,760 --> 00:52:35,239
Does it change anythink great like that you can assert

1074
00:52:35,320 --> 00:52:37,679
on that. So it ends up being quite quite neat,

1075
00:52:37,719 --> 00:52:40,480
and in fact, below each slice in the event model

1076
00:52:40,519 --> 00:52:43,760
we do have like an alternate little timeline that points downwards,

1077
00:52:43,800 --> 00:52:47,559
and there we have a different sample of events and

1078
00:52:47,639 --> 00:52:51,800
happenings that are particular to that workflow. So an example

1079
00:52:51,800 --> 00:52:54,360
will be an invoice. The event model kind of wants

1080
00:52:54,360 --> 00:52:56,480
to show me the happy path of how the system works.

1081
00:52:56,599 --> 00:52:58,679
So you don't want about twelve different steps to show

1082
00:52:58,760 --> 00:53:02,760
just how differently the event the invoice can look. It's

1083
00:53:02,760 --> 00:53:05,480
just gonna take up way too much real estate. So

1084
00:53:05,519 --> 00:53:07,840
we kind of go downwards and say that, Okay, here's

1085
00:53:07,840 --> 00:53:11,679
some scenarios of like if you have a discount code,

1086
00:53:11,960 --> 00:53:14,559
you're shipping to a different country, et cetera, et cetera,

1087
00:53:14,920 --> 00:53:19,159
all sorts of different things volume, discount, reward points, whatever.

1088
00:53:20,440 --> 00:53:22,760
You can put those events to make different scenarios down below.

1089
00:53:22,880 --> 00:53:25,280
So you're not kind of polluting the space of the

1090
00:53:25,760 --> 00:53:28,159
general idea of what the system does with the event model,

1091
00:53:28,280 --> 00:53:31,760
but you're diving into those nitty gritty specifications that you

1092
00:53:31,840 --> 00:53:34,639
need to build a robust system. What's really interesting about

1093
00:53:34,639 --> 00:53:37,679
this NAI is that when I did this on the

1094
00:53:37,679 --> 00:53:40,400
stream just last week or two weeks ago, I took

1095
00:53:40,440 --> 00:53:44,320
a screenshot of that set of events and on the side,

1096
00:53:44,440 --> 00:53:47,119
what does that invoice look like? Along the way is

1097
00:53:47,159 --> 00:53:50,000
an arrow down. I took a screenshot of this an

1098
00:53:50,000 --> 00:53:53,559
incursor AYI, which is a fork of vs code, pasted

1099
00:53:53,599 --> 00:53:56,719
that into the chat window and say finish the tests,

1100
00:53:56,920 --> 00:54:00,800
and it did exactly that. It made an addition to

1101
00:54:01,079 --> 00:54:07,119
the test correct first try. I'm not kidding. First try,

1102
00:54:07,320 --> 00:54:11,760
I was blown away. So yes, AI hallucinates, but not

1103
00:54:11,840 --> 00:54:15,880
when you give a good specs relation like yeah, and

1104
00:54:16,280 --> 00:54:19,440
we know what's more interesting is that AI has been

1105
00:54:19,480 --> 00:54:22,400
trained on human interactions. We talked about stories, we talked

1106
00:54:22,440 --> 00:54:26,400
about timelines. Guess what happens when the thing that you

1107
00:54:26,480 --> 00:54:29,519
show it or ask of it is following storylines the

1108
00:54:29,559 --> 00:54:32,280
things that it's been trained on. It's been trained on conversations.

1109
00:54:32,280 --> 00:54:36,039
Conversations are like stories. So I think that's why it

1110
00:54:36,079 --> 00:54:38,840
got it spot on because the format of what I

1111
00:54:38,920 --> 00:54:41,480
was giving it wasn't the mockup of a UI. It

1112
00:54:41,519 --> 00:54:46,079
wasn't anything weird like UML diagram with entities connected in

1113
00:54:46,079 --> 00:54:50,480
whichever way. It was a timeline, and we showed how

1114
00:54:50,840 --> 00:54:55,079
information changed. It got that on the first try. I'm

1115
00:54:55,159 --> 00:54:58,119
not kidding you. You should try this yourself. If you're

1116
00:54:58,639 --> 00:55:02,199
wanting to test where AI hallucinates where it doesn't, I

1117
00:55:02,199 --> 00:55:03,760
can give you an example of where it does not.

1118
00:55:04,400 --> 00:55:08,119
And it's these things of these given win then specifications

1119
00:55:08,199 --> 00:55:10,159
or in the case of state views like I just

1120
00:55:10,199 --> 00:55:12,559
have given then because there's nothing to test like given

1121
00:55:12,599 --> 00:55:15,280
some events. This invoice will look like this. There's no action,

1122
00:55:15,440 --> 00:55:20,079
so slightly different take on it, but the main way

1123
00:55:20,079 --> 00:55:22,400
that it works as the same. So I've been floored

1124
00:55:22,639 --> 00:55:25,440
just by you know how much this helps in the

1125
00:55:25,480 --> 00:55:29,159
whole AI thing, just by having a better structure in

1126
00:55:29,199 --> 00:55:31,800
terms of how you think about your systems, Like you

1127
00:55:31,880 --> 00:55:35,840
get way more help from these tools. So yeah, I

1128
00:55:35,920 --> 00:55:36,400
don't mind.

1129
00:55:36,840 --> 00:55:40,239
Speaker 1: Yeah, Before before we stop here, I had I want

1130
00:55:40,239 --> 00:55:42,039
to get in the way back machine for a second

1131
00:55:42,440 --> 00:55:45,159
and ask you if you remember a technology called Windows

1132
00:55:45,159 --> 00:55:49,000
Workflow Foundation. Yes, man, why are you laughing?

1133
00:55:49,199 --> 00:55:51,679
Speaker 3: I do remember bistock? Do you remember bisdoc?

1134
00:55:51,880 --> 00:55:57,320
Speaker 1: Yeah? So what what was your impression of workflow Foundation

1135
00:55:57,519 --> 00:56:01,360
back then? And you know, why don't we even talk

1136
00:56:01,360 --> 00:56:02,159
about it anymore?

1137
00:56:02,719 --> 00:56:05,320
Speaker 3: I think, Well, it's a more general question to me

1138
00:56:05,360 --> 00:56:09,360
about case tools and having Dragon drop development and you know,

1139
00:56:09,880 --> 00:56:13,679
human facing kind of way to automate systems. I think

1140
00:56:13,719 --> 00:56:16,320
we always wanted this way of like why do I

1141
00:56:16,360 --> 00:56:19,119
have to talk to a developer to like get things done?

1142
00:56:19,159 --> 00:56:21,480
Why can't I just have something that's good enough framework

1143
00:56:21,880 --> 00:56:25,920
so I can stick the screens on some kind of

1144
00:56:25,960 --> 00:56:28,599
an interface and then press go and it'll do it

1145
00:56:28,639 --> 00:56:31,840
for me. I think that's what we've secretly wanted, and

1146
00:56:31,880 --> 00:56:34,519
I think that's kind of what fell out of event modeling.

1147
00:56:34,559 --> 00:56:37,400
So just like UML, I mean I talked to Grady

1148
00:56:37,440 --> 00:56:41,519
Butcha last year in Hawaii or was it the year before,

1149
00:56:41,519 --> 00:56:43,719
I forget anyway, he lives in Maui. It does really

1150
00:56:43,719 --> 00:56:45,960
good work with conservation of whales and all that. But

1151
00:56:47,039 --> 00:56:50,400
he's he's really interested in how UMLGA kind of taken

1152
00:56:50,440 --> 00:56:53,360
away to be a case tool to generate code instead

1153
00:56:53,360 --> 00:56:55,800
of being a general notation to do that. And I

1154
00:56:55,800 --> 00:56:59,559
think the UML two point zero folks kind of went

1155
00:56:59,840 --> 00:57:03,519
and said, we can build a business around mL to

1156
00:57:03,559 --> 00:57:06,199
create solutions kind of for free or buy the business.

1157
00:57:06,679 --> 00:57:08,920
And I think, I think what you're taught talking about,

1158
00:57:08,960 --> 00:57:11,239
Carl's kind of this this approach of like, hey, we

1159
00:57:11,280 --> 00:57:16,360
can take you know, a human recognizable way to talk

1160
00:57:16,400 --> 00:57:19,480
about a workflow of information and kind of press go

1161
00:57:19,599 --> 00:57:20,280
and it'll do it.

1162
00:57:21,000 --> 00:57:23,679
Speaker 1: I think without this kind of an answer to rational rose,

1163
00:57:23,760 --> 00:57:24,559
wasn't it. Yeah?

1164
00:57:24,639 --> 00:57:28,719
Speaker 3: Yeah, the rough process, all these all these different all

1165
00:57:28,719 --> 00:57:32,159
these different things that we've gone through. I think with

1166
00:57:32,480 --> 00:57:36,519
AI it's it's reopening that obviously as we see you know,

1167
00:57:37,159 --> 00:57:39,639
I definitely think that the programming languages that we use

1168
00:57:39,679 --> 00:57:40,960
in the future are not going to be the same

1169
00:57:40,960 --> 00:57:44,320
programming languages that we do to use today, at least

1170
00:57:44,360 --> 00:57:48,519
not for the same purposes anymore. That level of abstraction

1171
00:57:48,639 --> 00:57:51,280
is being bumped very hard right now up again, right

1172
00:57:51,360 --> 00:57:54,000
just like we had from you know, assembler to compiled

1173
00:57:54,079 --> 00:57:57,360
languages to whatever interpreted languages, et cetera. So I think

1174
00:57:57,400 --> 00:58:01,119
the same thing's again happening out of very rapid pace

1175
00:58:02,119 --> 00:58:05,239
because in essence, I think AI right now has really

1176
00:58:05,320 --> 00:58:10,679
just taken what we do with stack overflowing Google searching

1177
00:58:11,519 --> 00:58:14,480
from four hours to be four minutes type of thing, right,

1178
00:58:15,400 --> 00:58:19,840
So that is the affordance of the level of abstraction.

1179
00:58:20,039 --> 00:58:23,599
So you know, when I'm when I'm taking a snapshot

1180
00:58:23,719 --> 00:58:27,599
of you know, some sticky notes on a whiteboard and

1181
00:58:27,679 --> 00:58:30,480
putting it into cursor AI, and it's giving me the code,

1182
00:58:31,400 --> 00:58:34,679
that's you know, I can feel the change, right I can.

1183
00:58:34,880 --> 00:58:37,000
I know that that would have taken me to write

1184
00:58:37,000 --> 00:58:39,960
those things wouldn't have been you know, a second or

1185
00:58:39,960 --> 00:58:42,440
two or three or however long it took the chat

1186
00:58:42,519 --> 00:58:44,920
to produce. It would definitely be taking minutes, an hour

1187
00:58:45,000 --> 00:58:47,760
or whatever. And it even caught something that I there's

1188
00:58:47,760 --> 00:58:49,559
an assertion in there that I didn't think of. And

1189
00:58:49,880 --> 00:58:52,079
when one of the events was uh, you know, this

1190
00:58:52,280 --> 00:58:55,400
was for a conference organizing software, and it was I'm

1191
00:58:55,400 --> 00:58:57,159
going to change the name of a room because I'm

1192
00:58:57,159 --> 00:59:00,800
adding rooms to set up the conference. The assert that

1193
00:59:00,840 --> 00:59:04,360
the AI ended up putting in there was make sure

1194
00:59:04,400 --> 00:59:06,920
that the old name doesn't exist in the collection already.

1195
00:59:06,960 --> 00:59:09,760
I missed that, Like I just wasn't thinking, and I'm like, oh, yeah, right,

1196
00:59:09,840 --> 00:59:11,960
of course, Like I could definitely have a bug in

1197
00:59:12,000 --> 00:59:14,440
there where instead of renaming, I just added another room

1198
00:59:14,480 --> 00:59:16,679
and left the old one in there, right, or something

1199
00:59:16,719 --> 00:59:18,239
like that. So that's a really good assert and it

1200
00:59:18,280 --> 00:59:21,679
did it for me. Okay, that's really good. So we

1201
00:59:21,800 --> 00:59:24,639
all have like spikes of being really good, but we

1202
00:59:24,679 --> 00:59:27,719
also have things when we're not on and we'll miss things, right,

1203
00:59:27,920 --> 00:59:31,840
And I think AI draws a kind of a safety

1204
00:59:31,880 --> 00:59:35,280
net at the average, so if you ever make a mistake,

1205
00:59:35,320 --> 00:59:37,440
you're obviously falling below average of what's out there, and

1206
00:59:37,480 --> 00:59:40,119
the AI will catch it for you. So you know,

1207
00:59:40,519 --> 00:59:43,119
if you're expressing things in a story like manner and

1208
00:59:43,159 --> 00:59:46,679
you're really in tune with what AI has been trained on,

1209
00:59:46,760 --> 00:59:49,119
I think event modeling because of its story like nature,

1210
00:59:49,719 --> 00:59:54,199
the way that these things are specified, they have basically

1211
00:59:54,239 --> 00:59:58,440
given a very low probability of hallucination with these things,

1212
00:59:58,480 --> 01:00:01,039
so you could go incredibly fast asked with event modeling

1213
01:00:01,039 --> 01:00:04,320
and event sourcing. Event sourcing for the point that you're

1214
01:00:04,360 --> 01:00:09,320
working with, you know, multiple purpose built models for just

1215
01:00:09,440 --> 01:00:13,519
that one workflow step, which is a very finite scope.

1216
01:00:13,519 --> 01:00:16,239
And I think AI does a tremendous job when the

1217
01:00:16,280 --> 01:00:19,480
scope is finite, Like really you know it? Yeah, if

1218
01:00:19,480 --> 01:00:21,360
you say, hey, build me an online store, it will,

1219
01:00:21,519 --> 01:00:24,280
but it's probably not what you're the one you're imagining, right.

1220
01:00:24,400 --> 01:00:26,239
Speaker 2: Right, Yeah, it's not the one you want.

1221
01:00:26,679 --> 01:00:29,599
Speaker 3: Yeah. If you say, like, hey, I want to like

1222
01:00:29,719 --> 01:00:32,800
add this item to my shopping cart, and this is

1223
01:00:32,840 --> 01:00:35,840
the screen and the specific you know, it'll give you

1224
01:00:35,880 --> 01:00:37,360
exactly almost exactly what you mean.

1225
01:00:37,440 --> 01:00:37,719
Speaker 2: Yeah.

1226
01:00:37,760 --> 01:00:40,639
Speaker 1: Well, Adam has been wow, drinking from the fire hose

1227
01:00:40,639 --> 01:00:41,360
for the last.

1228
01:00:42,280 --> 01:00:44,639
Speaker 3: I guessed about this, but full.

1229
01:00:44,519 --> 01:00:46,679
Speaker 1: Of meaty goodness. So thank you very much.

1230
01:00:46,960 --> 01:00:50,039
Speaker 3: Yeah, thank you guys for having me. And if anyone

1231
01:00:50,039 --> 01:00:52,239
wants to find out more event modeling. Dot org has

1232
01:00:52,280 --> 01:00:55,199
all the all the links search for event modeling. It's

1233
01:00:55,199 --> 01:00:57,840
the top link and definitely get the book from Martin.

1234
01:00:57,960 --> 01:01:00,599
He's done such a good job, working to irishly on

1235
01:01:00,639 --> 01:01:03,400
so many chapters day in and day out, so he

1236
01:01:03,519 --> 01:01:08,840
deserves all the credits there. And he's been a core

1237
01:01:08,920 --> 01:01:13,000
member of the community over in Germany doing that, so

1238
01:01:13,559 --> 01:01:16,679
you know, I'm really happy for his success and it

1239
01:01:16,760 --> 01:01:19,599
helps our entire community. There's also a discord group that

1240
01:01:19,719 --> 01:01:23,519
we have if you have questions about this. Martin, myself,

1241
01:01:23,599 --> 01:01:26,719
all sorts of other people are there to answer questions.

1242
01:01:26,719 --> 01:01:29,960
It's a highly active group. Is messages there every single

1243
01:01:30,039 --> 01:01:32,599
day about this stuff. So if it's event sourcing or

1244
01:01:32,639 --> 01:01:36,119
event modeling, even domain driven design topics pop up in there,

1245
01:01:36,159 --> 01:01:39,519
anything around this whole way of working, you'll find good

1246
01:01:39,519 --> 01:01:41,719
people there to help you. I'll be there to help

1247
01:01:41,719 --> 01:01:44,199
you if I'm not. There's others, So thanks guys for

1248
01:01:44,239 --> 01:01:46,960
having me. And yeah, we have workshops too, so all

1249
01:01:47,000 --> 01:01:49,320
sorts of things on that site. I hopefully we will

1250
01:01:49,360 --> 01:01:52,599
have a few. Actually, we also had our first event

1251
01:01:52,639 --> 01:01:56,280
modeling conference in Vancouver and one in Germany this year,

1252
01:01:56,320 --> 01:01:59,719
so starting to grow. So anyway, we'll have to have

1253
01:01:59,840 --> 01:02:01,960
your booth that one of these when we grow big enough.

1254
01:02:01,840 --> 01:02:04,719
Speaker 2: To have you. Yeah, sure, Kevin do that.

1255
01:02:04,719 --> 01:02:07,199
Speaker 3: That'd be fun, that would be really awesome. So thank

1256
01:02:07,239 --> 01:02:09,679
you long overdu and I thank you so much.

1257
01:02:09,800 --> 01:02:12,480
Speaker 1: Thank you, and we are again. I wish we had

1258
01:02:12,519 --> 01:02:16,159
you on before, but wow, what a show. Thanks again

1259
01:02:16,719 --> 01:02:39,239
and we'll talk to you next time on dot net rocks.

1260
01:02:40,519 --> 01:02:43,159
Dot net Rocks is brought to you by Franklin's Net

1261
01:02:43,320 --> 01:02:47,280
and produced by Pop Studios, a full service audio, video

1262
01:02:47,360 --> 01:02:51,440
and post production facility located physically in New London, Connecticut,

1263
01:02:51,679 --> 01:02:56,119
and of course in the cloud online at pwop dot com.

1264
01:02:56,679 --> 01:02:58,800
Visit our website at d O T N E t

1265
01:02:59,039 --> 01:03:04,599
R O c k S for RSS feeds, downloads, mobile apps, comments,

1266
01:03:04,920 --> 01:03:07,480
and access to the full archives going back to show

1267
01:03:07,559 --> 01:03:11,280
number one, recorded in September two thousand and two. And

1268
01:03:11,360 --> 01:03:13,760
make sure you check out our sponsors. They keep us

1269
01:03:13,800 --> 01:03:17,280
in business. Now go write some code, See you next time.

1270
01:03:18,199 --> 01:03:27,800
Speaker 3: You got jad Middle Vans

