1
00:00:00,210 --> 00:00:03,990
And there's a really interesting use case around autonomous testing.

2
00:00:04,380 --> 00:00:08,070
So you know there's automated testing, which is what

3
00:00:08,070 --> 00:00:09,930
you're familiar, everyone's familiar with, right?

4
00:00:09,930 --> 00:00:11,070
You read a bunch of tests.

5
00:00:11,280 --> 00:00:13,530
Then there's autonomous testing where you essentially teach

6
00:00:13,530 --> 00:00:17,820
an AI how to test your system, which then in theory finds

7
00:00:17,820 --> 00:00:20,100
a bunch of stuff that you didn't even think of to test for.

8
00:00:20,490 --> 00:00:23,790
And the greatest data set to train one of those

9
00:00:23,790 --> 00:00:26,100
ais is all of your previous inputs and outputs.

10
00:00:26,910 --> 00:00:29,550
So you can feed that into an autonomous testing

11
00:00:29,550 --> 00:00:33,180
system and train this, this perfect testing ai.

12
00:00:33,180 --> 00:00:33,720
Basically,

13
00:00:38,760 --> 00:00:40,680
welcome to Screaming in the Cloud.

14
00:00:40,890 --> 00:00:41,940
I'm Corey Quinn.

15
00:00:42,030 --> 00:00:47,730
My guest today presumably needs no introduction for a large swath of.

16
00:00:47,870 --> 00:00:51,260
Folks listening and or watching to this, but we can't

17
00:00:51,260 --> 00:00:55,610
ever assume that Jeremy Edberg is a whole bunch of things,

18
00:00:55,640 --> 00:00:59,660
uh, Jedberg on the internet and has been around forever.

19
00:00:59,839 --> 00:01:00,199
Today.

20
00:01:00,199 --> 00:01:03,680
He's the CEO of something called DBOS that I'm certain we're going to

21
00:01:03,680 --> 00:01:07,400
get into, but he was the founding reliability engineer for Netflix.

22
00:01:07,405 --> 00:01:11,449
Once upon a time, he was the first engineering hire at Reddit.

23
00:01:11,479 --> 00:01:14,060
A small website that you might have heard of.

24
00:01:14,390 --> 00:01:17,840
Uh, he's one of the original six AWS heroes.

25
00:01:17,990 --> 00:01:20,120
He's been doing this a very long time.

26
00:01:20,210 --> 00:01:22,610
Jeremy, thank you for taking the time to speak with me.

27
00:01:22,790 --> 00:01:23,840
Thank you for having me.

28
00:01:24,555 --> 00:01:28,995
This episode is sponsored in part by my day job, the Duck bill group.

29
00:01:29,265 --> 00:01:31,725
Do you have a horrifying AWS bill?

30
00:01:31,845 --> 00:01:33,105
That can mean a lot of things.

31
00:01:33,255 --> 00:01:37,455
Predicting what it's going to be, determining what it should be, negotiating

32
00:01:37,455 --> 00:01:42,885
your next long-term contract with AWS, or just figuring out why it increasingly

33
00:01:42,885 --> 00:01:47,265
resembles a phone number, but nobody seems to quite know why that is.

34
00:01:47,580 --> 00:01:50,520
To learn more, visit duck bill group.com.

35
00:01:50,820 --> 00:01:53,040
Remember, you can't duck the duck bill.

36
00:01:53,040 --> 00:01:55,050
Bill and my CEO informs me.

37
00:01:55,050 --> 00:01:57,330
That is absolutely not our slogan.

38
00:01:58,140 --> 00:01:59,520
So I, I guess we could always start at the

39
00:01:59,520 --> 00:02:01,140
beginning and work forward, but that's dull.

40
00:02:01,140 --> 00:02:03,030
I like starting at the, uh, at the present.

41
00:02:03,030 --> 00:02:04,890
Maybe we'll go backwards and see what happens.

42
00:02:05,040 --> 00:02:07,860
What's a DBOS other than thing your CEO of?

43
00:02:08,130 --> 00:02:12,390
Yeah, so DBOS is a company that makes an open source library called

44
00:02:12,390 --> 00:02:15,960
Transact, which helps people build reliable software by default.

45
00:02:16,380 --> 00:02:18,900
Uh, and then we have a product that will help

46
00:02:18,900 --> 00:02:21,630
you run that transact application anywhere.

47
00:02:21,750 --> 00:02:24,150
Cloud, our cloud on-prem, whatever it is.

48
00:02:24,480 --> 00:02:27,180
Uh, and then we also offer a cloud for you to host your

49
00:02:27,210 --> 00:02:29,610
transact applications if you don't wanna do it for yourself.

50
00:02:29,610 --> 00:02:29,640
I.

51
00:02:30,105 --> 00:02:31,935
It seemingly seems that most people build reliable

52
00:02:31,935 --> 00:02:34,545
software entirely by accident, but doing it by default

53
00:02:34,545 --> 00:02:36,735
does seem like a decent way of approaching things.

54
00:02:36,885 --> 00:02:40,515
It is DBOS, and I am pronouncing that as debos correctly.

55
00:02:40,515 --> 00:02:43,215
I mean, I know you're, you did work at Amazon for a time, so

56
00:02:43,215 --> 00:02:45,885
I don't know if you're doing the whole, uh, a MI, it should be

57
00:02:45,885 --> 00:02:50,475
mispronounced as AMI thing or not, but you know, DBOS Debos.

58
00:02:50,810 --> 00:02:52,850
Yeah, really six to one, half a dozen to the other.

59
00:02:53,030 --> 00:02:54,590
I haven't formed an opinion on it yet.

60
00:02:54,710 --> 00:02:55,670
There's a story there.

61
00:02:55,670 --> 00:03:00,740
It used to be DBOS because the project started as a database operating system.

62
00:03:01,190 --> 00:03:04,130
Our co-founder was the creator of Postgres and Spark.

63
00:03:04,579 --> 00:03:09,260
So, uh, originally that was the premise, but what we realized was one that would

64
00:03:09,260 --> 00:03:13,100
take over a decade to build, and two, it would be very hard to commercialize.

65
00:03:13,250 --> 00:03:15,410
And so what we realized is that the most interesting

66
00:03:15,410 --> 00:03:17,630
part of it was keeping state while running.

67
00:03:17,930 --> 00:03:19,609
And so we, that's what we commercialized.

68
00:03:20,144 --> 00:03:23,505
So as you look at this entire thing, and I, I guess look at the

69
00:03:23,505 --> 00:03:25,875
landscape out there, it sounds almost like what you're building is

70
00:03:25,875 --> 00:03:29,204
sort of a modern Heroku style thing, which, you know, everyone has been

71
00:03:29,204 --> 00:03:32,595
trying to build except the company that bought Heroku, but I digress.

72
00:03:32,625 --> 00:03:34,575
They're sort of coming out of, uh, hibernation

73
00:03:34,575 --> 00:03:36,524
for a while, but what makes yours different?

74
00:03:36,584 --> 00:03:40,005
So that is actually what we were building, but what we realized is that

75
00:03:40,005 --> 00:03:43,964
the most interesting part is the library that you use to build with.

76
00:03:43,995 --> 00:03:48,045
And so our premise is that everything should be in the database you're.

77
00:03:48,255 --> 00:03:53,295
Your application, uh, running state should be as durable as your data.

78
00:03:53,595 --> 00:03:54,584
And so that's what we do.

79
00:03:54,584 --> 00:03:57,345
We essentially checkpoint your software into the database

80
00:03:57,584 --> 00:04:00,945
so that you can roll back at any time, resume from a crash.

81
00:04:01,425 --> 00:04:02,145
Stuff like that.

82
00:04:02,145 --> 00:04:05,145
And so what ends up happening is every piece of your

83
00:04:05,145 --> 00:04:07,695
business process is a row in the database table.

84
00:04:08,115 --> 00:04:10,155
I, this, this compliments my everything as a

85
00:04:10,155 --> 00:04:12,285
database if you hold it wrong life philosophy.

86
00:04:12,285 --> 00:04:13,935
So I like this approach very much.

87
00:04:13,995 --> 00:04:14,265
Yeah.

88
00:04:14,265 --> 00:04:15,855
And that's essentially what it is.

89
00:04:15,855 --> 00:04:19,515
And so that's our main thing is that library getting you to

90
00:04:19,515 --> 00:04:22,695
build things reliably by default and then helping you run them.

91
00:04:22,785 --> 00:04:26,595
We do have the cloud, uh, and we were trying to be the easiest, best place.

92
00:04:27,900 --> 00:04:29,550
But it turns out that that's really hard.

93
00:04:29,910 --> 00:04:33,240
And and most importantly, it turns out that people prefer

94
00:04:33,240 --> 00:04:35,700
the privacy and reliability of running it themselves.

95
00:04:36,150 --> 00:04:38,850
Well, I, through no fault of your own, you've picked the wrong freaking

96
00:04:38,850 --> 00:04:42,780
day to have this conversation with me because yesterday I was programming

97
00:04:42,780 --> 00:04:46,590
in the only two languages I know brute force mixed with enthusiasm to

98
00:04:46,590 --> 00:04:50,040
build this dumb thing to stuff into a Lambda function where it will live.

99
00:04:50,070 --> 00:04:52,320
And once again, I am.

100
00:04:52,845 --> 00:04:56,805
Dismayed to discover that there's no good way to deploy

101
00:04:56,835 --> 00:04:59,655
Lambda functions from development into production.

102
00:04:59,655 --> 00:05:01,875
There are merely different flavors of bad.

103
00:05:02,205 --> 00:05:04,575
Uh, originally I used the serverless framework,

104
00:05:04,575 --> 00:05:06,465
which went in some strange directions.

105
00:05:06,615 --> 00:05:07,755
I don't use it anymore.

106
00:05:07,785 --> 00:05:10,215
The CDK turns everything into a dependency

107
00:05:10,215 --> 00:05:12,015
update issue every time you want to use it.

108
00:05:13,039 --> 00:05:16,700
Uh, the console gets you yelled at, but people use it like that anyway.

109
00:05:16,700 --> 00:05:19,099
And, and the only answer that I found that works reliably for

110
00:05:19,099 --> 00:05:22,909
me is I got something working with the Sam CLI many years ago,

111
00:05:22,909 --> 00:05:25,430
and I've just copied and pasted that template file around ever

112
00:05:25,430 --> 00:05:29,570
since with minimal changes, which is not ideal, but also honest.

113
00:05:29,870 --> 00:05:34,130
Uh, is what you're doing, like does it address that particular side of

114
00:05:34,130 --> 00:05:37,370
the world or am I thinking about this in a two from a different angle?

115
00:05:37,550 --> 00:05:39,650
No, that absolutely is something we address.

116
00:05:39,650 --> 00:05:44,390
So we really focus on developer experience and one of the biggest

117
00:05:44,390 --> 00:05:47,300
problems with serverless is the one you just said is that the local

118
00:05:47,300 --> 00:05:51,650
development story is terrible, uh, and the local testing story is terrible.

119
00:05:51,650 --> 00:05:52,790
And so we focused on that.

120
00:05:53,090 --> 00:05:56,540
We made it so that when you use our library, it'll run

121
00:05:56,540 --> 00:05:58,700
locally exactly the same way as it runs in the cloud.

122
00:05:59,060 --> 00:06:01,850
So if you use our cloud, all you have to do is deploy.

123
00:06:02,230 --> 00:06:05,260
Uh, if you use your own cloud, it is literally the same application in

124
00:06:05,260 --> 00:06:09,190
production and in test, and it works the same way and it's all one file.

125
00:06:09,190 --> 00:06:10,060
That's another big thing.

126
00:06:10,060 --> 00:06:12,790
When you use us, you can do pretty much everything in one file.

127
00:06:12,850 --> 00:06:16,150
We have Krons right there, so you don't have to use another service for that.

128
00:06:16,510 --> 00:06:18,160
Uh, we have queues built right in, so you

129
00:06:18,160 --> 00:06:19,510
don't have to use another service for that.

130
00:06:19,780 --> 00:06:21,820
Because that's another big problem with serverless, right?

131
00:06:21,820 --> 00:06:24,460
Is lambda is Lambda and it's compute.

132
00:06:24,520 --> 00:06:26,020
And then, oh, I need a queue.

133
00:06:26,049 --> 00:06:27,130
Okay, you need this other thing.

134
00:06:27,340 --> 00:06:29,619
Oh, I need uh, you know, storage.

135
00:06:29,619 --> 00:06:30,609
Okay, you need this other thing.

136
00:06:30,760 --> 00:06:31,750
Oh, I need CR jobs.

137
00:06:31,750 --> 00:06:32,530
You need this other thing.

138
00:06:32,830 --> 00:06:34,780
And it's suddenly becomes this huge mess of

139
00:06:34,809 --> 00:06:37,960
config files and tiny little programs and.

140
00:06:38,200 --> 00:06:40,150
Get deployed all over multiple services,

141
00:06:40,330 --> 00:06:42,850
and this is the problem with the CDK as well, where suddenly

142
00:06:42,850 --> 00:06:46,060
you have the infrastructure deployment code intermingled with

143
00:06:46,060 --> 00:06:49,360
the actual application deployment application code itself.

144
00:06:49,570 --> 00:06:51,820
So then you wind up with, it's not really clear, at least

145
00:06:51,820 --> 00:06:55,240
to me, in many projects I see where the deployment stuff

146
00:06:55,240 --> 00:06:58,120
starts and stops versus the application logic itself.

147
00:06:58,150 --> 00:06:59,785
So we actually lean into that.

148
00:07:00,070 --> 00:07:03,400
With us, like I said, you can do an entire fully reliable

149
00:07:03,400 --> 00:07:06,820
program with one file, uh, because we use decorators.

150
00:07:06,849 --> 00:07:08,230
So you decorate your code.

151
00:07:08,530 --> 00:07:12,730
You say this function is, you know, uh, needs to be a step of this workflow.

152
00:07:12,969 --> 00:07:17,409
You can do Aron decorator, a queue decorator, and it's all in one place.

153
00:07:17,469 --> 00:07:20,320
And so really what you don't even have to worry about the

154
00:07:20,320 --> 00:07:23,320
infrastructure, it's essentially derived from your code.

155
00:07:23,680 --> 00:07:26,740
And we actually think this is better for the developer experience

156
00:07:26,740 --> 00:07:28,960
because then you don't have to think about infrastructure at all.

157
00:07:29,725 --> 00:07:32,455
You do is you write your code and you say step one, step two, step three,

158
00:07:32,695 --> 00:07:37,255
cr, job Q and the infrastructure is just taken care of for, for you.

159
00:07:37,255 --> 00:07:40,495
You don't have to manage it anymore 'cause it's all in the database.

160
00:07:41,155 --> 00:07:42,475
What languages do you support today?

161
00:07:42,565 --> 00:07:44,635
Today we support Python and Typescripts.

162
00:07:44,755 --> 00:07:46,045
The only two that really matter.

163
00:07:46,045 --> 00:07:46,375
Sure.

164
00:07:46,435 --> 00:07:47,125
I mean, Russ matters.

165
00:07:47,125 --> 00:07:49,315
You wanna talk about it a lot and not do anything that's fun.

166
00:07:49,645 --> 00:07:52,525
We'll probably have go really soon and Java by the end of the year.

167
00:07:53,010 --> 00:07:53,370
Okay.

168
00:07:53,370 --> 00:07:55,320
I mean, because when you say, oh, you can write an entire

169
00:07:55,320 --> 00:07:57,989
program in one file, it sounds like yes, I can write anything

170
00:07:57,989 --> 00:08:00,479
in one line of code as long as I use enough semicolons.

171
00:08:00,479 --> 00:08:01,710
Like same theory applies.

172
00:08:01,710 --> 00:08:03,299
Well, no, I said, I said you can write a

173
00:08:03,299 --> 00:08:06,150
fully reliable distributed system in one file.

174
00:08:06,359 --> 00:08:06,780
Fair

175
00:08:06,780 --> 00:08:07,169
enough.

176
00:08:07,169 --> 00:08:08,789
Which isn't even grander claim.

177
00:08:08,820 --> 00:08:09,750
It really is.

178
00:08:09,780 --> 00:08:12,539
Uh, and this gets to sort of one of my personal hobby horses.

179
00:08:12,990 --> 00:08:16,710
I see that there's a sort of cult of distributed systems where.

180
00:08:16,915 --> 00:08:19,765
Relatively straightforward things that you, that

181
00:08:19,765 --> 00:08:21,955
don't necessarily benefit from being distributed.

182
00:08:21,955 --> 00:08:25,585
In fact, there's some drawbacks to it, seem to be forced on into that paradigm.

183
00:08:25,735 --> 00:08:26,575
Where do you land on it?

184
00:08:26,695 --> 00:08:30,925
So I would say that most people for most

185
00:08:30,925 --> 00:08:33,985
applications do not need a fully distributed system.

186
00:08:35,215 --> 00:08:38,520
In 95% of the cases, your application will run with

187
00:08:38,820 --> 00:08:43,320
one or two, uh, you know, executors with a database.

188
00:08:43,930 --> 00:08:44,230
Right.

189
00:08:44,260 --> 00:08:46,300
Maybe you want two or three for load balancing, for

190
00:08:46,300 --> 00:08:49,840
reliability, but you often don't need more than that.

191
00:08:50,110 --> 00:08:53,620
I think that is the, the biggest issue is people are, you know, especially when

192
00:08:53,620 --> 00:08:57,100
microservices are popular, they're ga, they're, they're waning now, but for a

193
00:08:57,100 --> 00:09:00,520
while, everybody build everything as a microservice, you know, from scratch.

194
00:09:00,880 --> 00:09:03,970
Uh, a lot of people like, so we do everything in Postgres, right?

195
00:09:03,970 --> 00:09:05,110
And people are like, well, what happens

196
00:09:05,110 --> 00:09:07,360
when you outgrow your one Postgres machine?

197
00:09:07,755 --> 00:09:08,295
You know what?

198
00:09:08,295 --> 00:09:11,505
95% of people are never gonna outgrow that one Postgres machine.

199
00:09:11,715 --> 00:09:13,995
It turns out that they can do quite a lot with one machine.

200
00:09:14,940 --> 00:09:16,440
I didn't expect to hear this coming from

201
00:09:16,440 --> 00:09:19,440
you just based upon the read of your resume.

202
00:09:19,440 --> 00:09:20,400
I did at the beginning.

203
00:09:20,400 --> 00:09:23,910
You've worked in places where you do folks launch something publicly

204
00:09:23,910 --> 00:09:26,760
at any of these places historically, and you're gonna get 10 million

205
00:09:26,760 --> 00:09:31,200
users on day one, and that is something that leads to its own.

206
00:09:31,935 --> 00:09:35,475
I guess life philosophy that the rest of us don't really have to deal with.

207
00:09:35,475 --> 00:09:38,415
Like what if you get so many users, you outgrow a single

208
00:09:38,444 --> 00:09:41,355
postgre squeal database, it's, well, I should be so lucky.

209
00:09:41,355 --> 00:09:43,064
That sounds like a problem that I can solve

210
00:09:43,064 --> 00:09:44,775
with all the money that comes pouring in.

211
00:09:45,165 --> 00:09:48,704
But there's a But that I see a lot of folks.

212
00:09:49,210 --> 00:09:52,480
Doing the early optimization stuff, which is weird and I understand

213
00:09:52,480 --> 00:09:55,420
cuts against something I've been saying for years that people argue

214
00:09:55,420 --> 00:09:57,940
with in the other direction, which is even when you're building

215
00:09:57,940 --> 00:10:01,630
something small, scrappy, and local, the only true time zone for

216
00:10:01,630 --> 00:10:07,150
servers and databases is UTC because that is so freaking hard to unwind.

217
00:10:07,270 --> 00:10:09,970
Yes, I know 99% of systems will never have to deal

218
00:10:09,970 --> 00:10:13,185
with this, but that 1% will keep you up for years.

219
00:10:13,800 --> 00:10:14,730
Funny you mentioned that.

220
00:10:14,730 --> 00:10:18,960
So at Reddit I always kept, I always kept all of our servers in Arizona time.

221
00:10:19,695 --> 00:10:20,925
Why Arizona Time.

222
00:10:21,315 --> 00:10:22,545
Oh, so you are the bastard?

223
00:10:22,635 --> 00:10:23,325
Yep, yep.

224
00:10:23,325 --> 00:10:27,075
Because it was one hour off of where we were for four months

225
00:10:27,075 --> 00:10:29,235
of the year and the remaining eight months of the year,

226
00:10:29,235 --> 00:10:31,515
it was the same as where we are, which was Pacific time.

227
00:10:31,725 --> 00:10:33,795
You didn't have to worry about daylight saving shifts.

228
00:10:33,795 --> 00:10:34,425
No, no.

229
00:10:34,425 --> 00:10:37,395
Daylight saving shift in Arizona, so I didn't have to deal with it at all.

230
00:10:37,395 --> 00:10:42,345
And calculating what the log time was versus the wall clock was super easy.

231
00:10:42,375 --> 00:10:44,175
'cause most of the year it's the same.

232
00:10:44,175 --> 00:10:46,785
And some of the year it was subtract or add one.

233
00:10:47,230 --> 00:10:47,590
Right.

234
00:10:47,860 --> 00:10:50,709
So I almost never kept anything in UTC because

235
00:10:50,709 --> 00:10:53,170
of that, because I live in the Pacific time zone.

236
00:10:53,700 --> 00:10:53,940
Okay.

237
00:10:53,940 --> 00:10:56,550
If I were to go and talk to people at Reddit today, since you

238
00:10:56,550 --> 00:10:59,550
were the first ops person there decade and two decades ago,

239
00:10:59,550 --> 00:11:03,450
damn near, uh, are there still vestiges there of things being

240
00:11:03,450 --> 00:11:06,660
kept in Arizona time because of that decision you made early on?

241
00:11:06,660 --> 00:11:09,390
I do wonder, I know that the guys that came after me

242
00:11:09,390 --> 00:11:12,090
for the next decade at least, kept it in Arizona time.

243
00:11:12,630 --> 00:11:14,520
Uh, I don't know if they've still done that now.

244
00:11:14,995 --> 00:11:18,595
But, uh, that would actually be a fun, fun question to think about.

245
00:11:18,865 --> 00:11:20,305
I know a few people over there.

246
00:11:20,305 --> 00:11:21,265
I will look into it.

247
00:11:21,355 --> 00:11:21,745
Okay.

248
00:11:22,675 --> 00:11:25,585
What I do tell people is you should build,

249
00:11:25,585 --> 00:11:27,475
assuming that you're going to have to scale.

250
00:11:27,715 --> 00:11:31,945
So all I've said, I've been saying this for decades, build for three, right?

251
00:11:32,005 --> 00:11:34,105
Assume that at some point you're gonna have three of

252
00:11:34,105 --> 00:11:37,735
everything, and that's a good optimization to make early on.

253
00:11:38,095 --> 00:11:38,635
But.

254
00:11:39,000 --> 00:11:40,950
Don't actually build it all.

255
00:11:40,950 --> 00:11:43,860
Like, you don't have to make three, you don't have to

256
00:11:43,860 --> 00:11:47,010
use three availability zones or, uh, you know, three

257
00:11:47,040 --> 00:11:50,280
servers right off the bat, but assume you will have that.

258
00:11:50,280 --> 00:11:54,360
So don't use shared memory locally, stuff like that, right?

259
00:11:54,690 --> 00:11:57,330
Uh, like put things into a queue, put things

260
00:11:57,330 --> 00:12:00,810
into a, a, a storage place that can be expanded.

261
00:12:01,350 --> 00:12:03,570
Those are the kinds of things you should be doing from the start.

262
00:12:03,875 --> 00:12:06,245
And you know, not to bring it back home, but that's

263
00:12:06,305 --> 00:12:08,820
basically what our library lets you do kind of by default.

264
00:12:09,990 --> 00:12:11,160
Yeah, and that makes a lot of sense.

265
00:12:11,160 --> 00:12:14,730
The, it's always a balancing act because in the early days of building

266
00:12:14,730 --> 00:12:18,330
something, it's, you can basically spend all your time building for

267
00:12:18,330 --> 00:12:21,690
massive scale that will never arrive, and that's all wasted effort and

268
00:12:21,690 --> 00:12:24,750
it slows you down in some ways, and you never actually ship anything.

269
00:12:24,990 --> 00:12:27,750
Uh, there are far more companies out there that have failed

270
00:12:27,930 --> 00:12:31,470
from people over indexing on making the code better and not the

271
00:12:31,470 --> 00:12:34,860
important problems like, do we have a viable business because.

272
00:12:35,105 --> 00:12:37,175
When you have a good business, you can afford a bunch of

273
00:12:37,175 --> 00:12:39,815
people to come in and rewrite things and fix your horrible

274
00:12:39,815 --> 00:12:42,995
time zone choices and all kinds of other things down the road.

275
00:12:43,325 --> 00:12:46,205
But the, it's a balance with anything like, I, I don't need to

276
00:12:46,205 --> 00:12:49,475
go out of my way necessarily to plan for massive scale, but I

277
00:12:49,475 --> 00:12:52,925
also should very much not be making decisions that are incredibly

278
00:12:52,925 --> 00:12:57,335
shortsighted that I'm going to have to back out stupendously because

279
00:12:57,395 --> 00:13:00,155
in the early days, changing architectures as li as simple as.

280
00:13:00,344 --> 00:13:01,635
Changing lines on a whiteboard.

281
00:13:01,800 --> 00:13:02,175
Yeah, yeah.

282
00:13:02,265 --> 00:13:02,745
Yeah.

283
00:13:02,745 --> 00:13:07,035
And like, I mean we're, I'm the head of a startup now and we

284
00:13:07,035 --> 00:13:09,314
have a small team and there's definitely places where it's

285
00:13:09,314 --> 00:13:12,435
like, you know, this is not the best practice, but we know that.

286
00:13:12,495 --> 00:13:14,115
And we say, this is not the best practice.

287
00:13:14,265 --> 00:13:16,724
This is what we're going to have to change when we get to the

288
00:13:16,724 --> 00:13:20,084
scale where it matters, and then acknowledge that and then move on.

289
00:13:20,084 --> 00:13:22,064
Because we know that when we get to that scale, we'll be

290
00:13:22,064 --> 00:13:25,005
able to hire the extra people we need to make those changes.

291
00:13:25,425 --> 00:13:25,635
Yeah.

292
00:13:25,635 --> 00:13:28,410
There's a. There's a lot to be said for that.

293
00:13:28,560 --> 00:13:31,885
So I have to ask Now this is sort of a rude question to to,

294
00:13:32,010 --> 00:13:34,920
to ask any startup founder, but I'm gonna go for it anyway.

295
00:13:35,100 --> 00:13:37,740
So you're building a library that makes it very

296
00:13:37,740 --> 00:13:41,070
simple to build and deploy a bunch of apps.

297
00:13:41,400 --> 00:13:41,820
Awesome.

298
00:13:41,940 --> 00:13:42,450
Terrific.

299
00:13:42,480 --> 00:13:42,840
Great.

300
00:13:42,840 --> 00:13:44,370
I. Where's the money?

301
00:13:44,460 --> 00:13:44,640
Where?

302
00:13:44,640 --> 00:13:46,860
Where does it come in to the point where, and now in

303
00:13:46,860 --> 00:13:49,890
return for this open source library, I cut you a check.

304
00:13:50,010 --> 00:13:51,750
It seems like that's like step two, draw the

305
00:13:51,750 --> 00:13:53,610
rest of the owl for an awful lot of folks,

306
00:13:53,610 --> 00:13:55,710
that is a totally valid question, right?

307
00:13:55,710 --> 00:13:58,439
This is the standard open core model question.

308
00:13:58,830 --> 00:14:00,120
So we.

309
00:14:00,435 --> 00:14:02,595
We would love to see everybody in the world

310
00:14:02,655 --> 00:14:04,305
building on our free open source library.

311
00:14:04,335 --> 00:14:05,985
'cause we just think it makes the world better.

312
00:14:06,405 --> 00:14:07,545
Where does the money come in?

313
00:14:07,785 --> 00:14:09,915
Once you start to need more than one of them,

314
00:14:09,975 --> 00:14:12,015
it's, it's actually complicated to operate.

315
00:14:12,435 --> 00:14:13,694
And so that's what we provide.

316
00:14:13,694 --> 00:14:15,405
So we provide a thing called conductor.

317
00:14:15,710 --> 00:14:19,100
You connect your multiple executors to conductor and conductor

318
00:14:19,100 --> 00:14:23,390
manages moving the workloads around autoscaling, resuming all of

319
00:14:23,390 --> 00:14:26,960
that stuff for you, or you use our cloud and pay us money for that.

320
00:14:27,320 --> 00:14:28,400
And it's the same thing, right?

321
00:14:28,400 --> 00:14:31,910
You get conductor as part of using our cloud and that manages all

322
00:14:31,910 --> 00:14:35,510
of your autoscaling, uh, you know, VM management, all of that.

323
00:14:35,510 --> 00:14:38,930
So we run our own cloud in AWS on a bare metal

324
00:14:38,930 --> 00:14:41,720
instance where we run our own fleet of firecracker VMs.

325
00:14:42,155 --> 00:14:43,715
And for those who don't know, firecrackers,

326
00:14:43,715 --> 00:14:45,275
the same thing they use to run Lambda.

327
00:14:45,845 --> 00:14:47,375
Uh, and so we run our own fleet.

328
00:14:47,375 --> 00:14:50,765
It's far more efficient, so we can charge a lot less than Lambda does.

329
00:14:51,185 --> 00:14:55,655
Uh, and if you use our programming paradigm of everything is a workflow,

330
00:14:55,925 --> 00:14:59,255
we also don't charge, you know, when you're computing, like waiting for an

331
00:14:59,255 --> 00:15:02,435
LLM because there's nothing running when you're waiting for the response.

332
00:15:02,765 --> 00:15:05,405
Uh, and so, you know, if you use our cloud, it's super efficient.

333
00:15:05,615 --> 00:15:09,035
If you run it locally, it's actually super efficient and private.

334
00:15:09,360 --> 00:15:11,190
And then we'll help you scale and manage.

335
00:15:11,190 --> 00:15:13,470
That's where the money comes in, and that's where people pay us.

336
00:15:13,470 --> 00:15:14,430
They pay us for support.

337
00:15:14,730 --> 00:15:17,070
They pay us for conductor, they pay us for our cloud.

338
00:15:18,180 --> 00:15:21,210
And I just checked, well, you mentioned this as well, you're MIT licensed as

339
00:15:21,210 --> 00:15:24,390
well, which means that if you're, if you're planning on doing a licensing rug,

340
00:15:24,390 --> 00:15:28,230
pull down the road, you're doing a terrible job of setting the stage for that.

341
00:15:28,230 --> 00:15:28,950
So good work.

342
00:15:29,070 --> 00:15:31,110
Uh, hey, we do not believe in that.

343
00:15:31,110 --> 00:15:33,060
We, we believe in open source.

344
00:15:33,060 --> 00:15:34,350
We believe in.

345
00:15:34,875 --> 00:15:36,855
We truly believe that the world would be a

346
00:15:36,855 --> 00:15:38,595
better place if everybody used our library.

347
00:15:38,805 --> 00:15:41,025
If our company goes away, so be it.

348
00:15:41,175 --> 00:15:43,545
As long as people are building reliability reliably,

349
00:15:43,574 --> 00:15:45,135
obviously we don't want our company to go away.

350
00:15:45,135 --> 00:15:47,145
We'd, we'd like to continue to exist, but.

351
00:15:47,925 --> 00:15:48,104
Yeah.

352
00:15:48,194 --> 00:15:50,145
What kind of applications work best on this?

353
00:15:50,145 --> 00:15:52,094
'cause very often when I talk to folks who are building

354
00:15:52,094 --> 00:15:55,574
a thing to construct applications with, they have a very

355
00:15:55,574 --> 00:15:58,694
specific vision in mind of what type of application it is.

356
00:15:58,905 --> 00:16:01,875
Uh, a lot of stuff I build tends to be, uh, ephemeral, stateless stuff.

357
00:16:01,875 --> 00:16:03,915
It's a lambda function and no source of truth.

358
00:16:04,155 --> 00:16:06,645
That sometimes gets a lot of strange brokenness

359
00:16:06,645 --> 00:16:08,234
when I try and integrate those things with.

360
00:16:08,260 --> 00:16:09,069
Other stuff.

361
00:16:09,340 --> 00:16:12,670
Conversely, some folks are like, well, okay, we have a giant shared database.

362
00:16:12,730 --> 00:16:14,380
Uh, you, you should never do that.

363
00:16:14,380 --> 00:16:14,950
It's great.

364
00:16:14,950 --> 00:16:15,520
We're a bank.

365
00:16:15,520 --> 00:16:16,750
We kind of have to do that.

366
00:16:16,990 --> 00:16:19,660
It, it's a, it's a question of what are you targeting as the sweet spot?

367
00:16:19,900 --> 00:16:20,230
Yeah.

368
00:16:20,230 --> 00:16:23,110
So, so we have customers all over the place, but the main

369
00:16:23,110 --> 00:16:26,350
use cases that we see are these data pipeline use cases.

370
00:16:26,350 --> 00:16:29,500
So I need to get data out of one place and into another.

371
00:16:29,805 --> 00:16:32,864
Reliably in a way so we can guarantee once and

372
00:16:32,864 --> 00:16:34,875
only once execution because of the way we operate.

373
00:16:35,204 --> 00:16:36,795
And that is important to a lot of people.

374
00:16:36,795 --> 00:16:39,135
I need to guarantee that I got the data outta this system

375
00:16:39,194 --> 00:16:41,324
and that it went into this other one, but only one time.

376
00:16:42,015 --> 00:16:46,064
And that turns out to be a fundamental problem for AI workloads.

377
00:16:46,515 --> 00:16:47,234
Uh, because.

378
00:16:47,595 --> 00:16:50,325
Training your AI or doing inference, you need to make

379
00:16:50,325 --> 00:16:52,425
sure that your data is moving from one place to another.

380
00:16:52,845 --> 00:16:56,205
Uh, and so that is a huge, uh, that a lot of our customers are

381
00:16:56,205 --> 00:16:59,415
doing, that they're using us for their agentic AI workloads, uh,

382
00:16:59,445 --> 00:17:03,165
managing their agentic ai or managing, extracting data from their

383
00:17:03,165 --> 00:17:07,785
legacy systems into more modern, often AI systems, things like that.

384
00:17:08,145 --> 00:17:11,535
Uh, so we're working with, uh, a extremely large bank that you've definitely

385
00:17:11,535 --> 00:17:15,525
heard of, uh, to extract data outta their, uh, their mainframe system.

386
00:17:16,045 --> 00:17:17,605
Mainframes, uh, the curse of everything.

387
00:17:17,815 --> 00:17:19,225
There's no good way around it.

388
00:17:19,225 --> 00:17:22,555
For better or worse, there's a, you wind up persistently

389
00:17:22,555 --> 00:17:27,325
living in a, in a weird place, let's put it that way.

390
00:17:27,535 --> 00:17:28,705
Yeah, exactly.

391
00:17:29,005 --> 00:17:29,125
Yeah.

392
00:17:29,125 --> 00:17:31,945
We're pretty sure that this mainframe is older than, definitely

393
00:17:31,945 --> 00:17:34,135
older than our co-founders and probably older than me.

394
00:17:34,740 --> 00:17:38,250
This episode is sponsored by my own company, the

395
00:17:38,250 --> 00:17:42,000
Duck Bill Group, having trouble with your AWS bill.

396
00:17:42,030 --> 00:17:44,850
Perhaps it's time to renegotiate a contract with them.

397
00:17:45,060 --> 00:17:47,190
Maybe you're just wondering how to predict

398
00:17:47,190 --> 00:17:50,220
what's going on in the wide world of AWS.

399
00:17:50,399 --> 00:17:53,370
Well, that's where the Duck Bill group comes in to help.

400
00:17:53,790 --> 00:17:56,040
Remember, you can't duck the duck bill.

401
00:17:56,040 --> 00:17:58,139
Bill, which I am reliably informed by my

402
00:17:58,139 --> 00:18:00,810
business partner is absolutely not our motto.

403
00:18:01,485 --> 00:18:04,575
As far as the, uh, uh, what's the next step?

404
00:18:04,575 --> 00:18:05,985
What are the, what's the vision for this?

405
00:18:06,015 --> 00:18:08,715
Is it designed to go to effectively do the same

406
00:18:08,715 --> 00:18:10,935
thing and just keep iterating in the same direction?

407
00:18:11,205 --> 00:18:14,145
Are there basically orthogonal, uh, pivots

408
00:18:14,175 --> 00:18:16,125
almost you can make as you continue to grow?

409
00:18:16,515 --> 00:18:19,275
Where is it going vis-a-vis where it is today?

410
00:18:19,395 --> 00:18:20,265
Yeah, so.

411
00:18:20,425 --> 00:18:23,815
So what's interesting is because the way we checkpoint your software,

412
00:18:24,175 --> 00:18:28,015
we essentially record all of your inputs and outputs of your functions.

413
00:18:28,525 --> 00:18:30,625
And what that does is it means that we have this really

414
00:18:30,625 --> 00:18:33,895
interesting met database of inputs and outputs of your functions.

415
00:18:34,105 --> 00:18:35,515
And there's a lot you can do with that.

416
00:18:35,515 --> 00:18:37,585
There's a really interesting security play there.

417
00:18:37,915 --> 00:18:40,015
Uh, there's intrusion detection that can happen

418
00:18:40,015 --> 00:18:43,225
nearly instantaneously, uh, with a simple SQL query.

419
00:18:43,555 --> 00:18:46,675
Uh, there is a lot of operational interest there.

420
00:18:46,970 --> 00:18:50,030
Uh, you know, 'cause you can see the ins and outs, the

421
00:18:50,030 --> 00:18:52,880
workflows, how big the responses are, stuff like that.

422
00:18:53,300 --> 00:18:56,240
Uh, the response times, and there's a really

423
00:18:56,240 --> 00:18:58,580
interesting use case around autonomous testing.

424
00:18:58,970 --> 00:19:02,000
So, you know, there's automated testing, which is

425
00:19:02,060 --> 00:19:04,520
what you're familiar, everyone's familiar with, right?

426
00:19:04,520 --> 00:19:05,660
You read a bunch of tests.

427
00:19:05,870 --> 00:19:08,120
Then there's autonomous testing where you essentially teach

428
00:19:08,120 --> 00:19:12,440
an AI how to test your system, which then in theory finds a

429
00:19:12,440 --> 00:19:15,530
bunch of stuff that you didn't even think of to test for, and.

430
00:19:15,720 --> 00:19:18,360
The greatest data set to train one of those

431
00:19:18,360 --> 00:19:20,669
ais is all of your previous inputs and outputs.

432
00:19:21,330 --> 00:19:24,120
And so you can feed that into an autonomous testing

433
00:19:24,120 --> 00:19:28,320
system and train this, this perfect testing AI basically.

434
00:19:28,980 --> 00:19:31,110
And that's, that's like the next step.

435
00:19:31,800 --> 00:19:36,179
And then the next next step is being the operations panel for.

436
00:19:36,705 --> 00:19:37,875
Everything on the internet, right?

437
00:19:37,935 --> 00:19:41,175
So it's, uh, you know, start putting in chaos testing,

438
00:19:41,175 --> 00:19:44,505
start putting in, uh, other different ways of helping

439
00:19:44,505 --> 00:19:47,055
you operate, storage, management, whatever it is, right?

440
00:19:47,055 --> 00:19:50,475
That's the long term future is, is let us, uh, you

441
00:19:50,475 --> 00:19:52,485
write your code, we'll operate it for you, right?

442
00:19:52,485 --> 00:19:56,415
We're the operations experts for you, so we'll operate your stuff.

443
00:19:56,475 --> 00:19:57,255
You write your code.

444
00:19:58,845 --> 00:20:00,285
I like the approach quite a bit.

445
00:20:02,775 --> 00:20:03,615
What's hard right now?

446
00:20:04,350 --> 00:20:05,669
What's the challenging part?

447
00:20:05,669 --> 00:20:06,929
What, what keeps you up at night?

448
00:20:07,290 --> 00:20:10,949
So, honestly, the hardest part right now is, is getting people

449
00:20:10,949 --> 00:20:14,459
to know about what we're doing, uh, getting the message out.

450
00:20:15,015 --> 00:20:16,695
Go to Market strategy.

451
00:20:16,695 --> 00:20:20,025
That is literally the hardest thing right now, engineering wise.

452
00:20:20,115 --> 00:20:22,605
Uh, I mean, I have to say this.

453
00:20:22,605 --> 00:20:24,345
I'm the CEO, but I really truly believe it.

454
00:20:24,345 --> 00:20:26,415
This is the greatest engineering team I've ever worked with.

455
00:20:26,775 --> 00:20:27,195
These.

456
00:20:28,635 --> 00:20:29,775
Here's my favorite example.

457
00:20:29,865 --> 00:20:31,515
This is gonna ring super hollow.

458
00:20:31,515 --> 00:20:33,915
If it turns out that so far the company is just you.

459
00:20:34,095 --> 00:20:36,075
No, no, no, no, no, no.

460
00:20:36,225 --> 00:20:38,055
I have this amazing engineering team.

461
00:20:38,295 --> 00:20:40,785
Uh, so we have these two co-founders who are grad students.

462
00:20:41,115 --> 00:20:43,575
Uh, they came out and immediately started this company.

463
00:20:44,165 --> 00:20:47,255
The, when I joined the company, so I, I wasn't there from the founding.

464
00:20:47,255 --> 00:20:49,415
I started a little after, uh, they told

465
00:20:49,415 --> 00:20:51,485
me, okay, uh, you know, this was in July.

466
00:20:51,485 --> 00:20:54,545
They said, we're gonna be launching Python support on September 12th.

467
00:20:55,175 --> 00:20:58,055
I was like, you have a specific day in mind, three months down the line.

468
00:20:58,055 --> 00:20:58,745
Okay, whatever.

469
00:20:59,225 --> 00:21:03,139
Literally, September 11th at night, they deployed it and it, on September

470
00:21:03,139 --> 00:21:06,965
12th, they announced it, and I, I, I was shocked that they were able to.

471
00:21:07,709 --> 00:21:09,540
Pinpointed that closely as a startup.

472
00:21:10,020 --> 00:21:12,659
Uh, and this is just an example of what they can do.

473
00:21:12,659 --> 00:21:14,520
So I, I do not worry about engineering.

474
00:21:14,850 --> 00:21:16,979
People ask, some people ask me that, like,

475
00:21:17,010 --> 00:21:18,179
oh, what do you worry about engineering?

476
00:21:18,179 --> 00:21:19,830
I dot I'm not worried about engineering.

477
00:21:19,830 --> 00:21:24,629
I'm completely, that is the hard part, especially with a dev tool, right?

478
00:21:24,629 --> 00:21:26,459
Dev tools are, are really hard.

479
00:21:26,729 --> 00:21:27,389
There's no.

480
00:21:27,929 --> 00:21:29,129
Instant aha moment.

481
00:21:29,129 --> 00:21:31,230
Like a consumer application where you just

482
00:21:31,230 --> 00:21:32,730
try it and you're like, oh, this is great.

483
00:21:32,879 --> 00:21:33,240
Right?

484
00:21:33,270 --> 00:21:35,040
There's like a learning process.

485
00:21:35,040 --> 00:21:36,780
You gotta have something to build.

486
00:21:37,110 --> 00:21:40,620
That's the biggest thing is catching people when they want to build something.

487
00:21:41,100 --> 00:21:41,940
And try something new,

488
00:21:42,210 --> 00:21:45,690
which I find myself perpetually in the, in the blend of living with.

489
00:21:45,690 --> 00:21:48,000
So I am possibly your target market.

490
00:21:48,000 --> 00:21:50,400
So let me, let me talk through what I think about

491
00:21:50,400 --> 00:21:53,430
when I go to DBOS.dev and the thoughts that I have.

492
00:21:53,550 --> 00:21:56,730
The first thing I always do is ignore everything you've put on your front page.

493
00:21:56,730 --> 00:21:58,740
That is invariably for any given company.

494
00:21:59,030 --> 00:22:01,520
Marketing has workshopped that to death or at

495
00:22:01,520 --> 00:22:03,410
least should have workshopped that to death.

496
00:22:03,649 --> 00:22:04,040
Great.

497
00:22:04,040 --> 00:22:06,590
And the thing I go to is one of the two places on your

498
00:22:06,590 --> 00:22:09,620
website where you have to be honest, arguably three, the

499
00:22:09,620 --> 00:22:11,660
one that we don't care about is terms and conditions.

500
00:22:11,660 --> 00:22:13,580
You're going to be very honest and direct and if you spoke

501
00:22:13,580 --> 00:22:15,680
to people like that, you get punched in the mouth a lot.

502
00:22:15,980 --> 00:22:19,520
The second where you might be, uh, a little bit more direct is in the careers

503
00:22:19,520 --> 00:22:22,879
section because alright, what technology are they really using under the hood?

504
00:22:22,970 --> 00:22:26,360
People disclose a lot, but the one I start with is the pricing page.

505
00:22:26,580 --> 00:22:29,730
And I look for two specific things on it.

506
00:22:30,060 --> 00:22:33,270
The, well, I guess first what I'm trying to figure out is,

507
00:22:33,300 --> 00:22:36,180
is this for me, because if I'm looking at this and I'm trying

508
00:22:36,180 --> 00:22:40,440
to do a side project and it's $5,000 a month or call for

509
00:22:40,440 --> 00:22:44,190
details, then I know I will not be going to space today.

510
00:22:44,190 --> 00:22:45,570
And I'm not your target market.

511
00:22:45,570 --> 00:22:49,110
I'm, when AWS released Amazon Kendra, I was excited about it for the

512
00:22:49,110 --> 00:22:52,710
30 seconds it took me to realize it started at 7,500 bucks a month,

513
00:22:52,890 --> 00:22:55,890
which was higher, and in turn money to organize my data instead.

514
00:22:56,294 --> 00:22:59,024
Uh, then, so you start the price, the one price you

515
00:22:59,024 --> 00:23:01,695
have, and this is $99 a month for your middle tier.

516
00:23:02,054 --> 00:23:05,985
Fine, reasonable, that is, that is absolutely fine to deal with.

517
00:23:06,345 --> 00:23:09,735
But the other two are what I look for First, I wanna see a freeze

518
00:23:09,735 --> 00:23:13,215
trial or free thing that I can get started with today because I might

519
00:23:13,215 --> 00:23:16,784
be working on a problem and my signing authority caps out at $20.

520
00:23:16,965 --> 00:23:19,304
I don't wanna have to do a justification for something new.

521
00:23:19,635 --> 00:23:20,505
You've got that.

522
00:23:20,865 --> 00:23:23,655
On the other end of the spectrum, we are a large enterprise.

523
00:23:23,655 --> 00:23:26,175
If there's not an enterprise offering where the price

524
00:23:26,175 --> 00:23:29,955
is contact sales, then it's you present as being too

525
00:23:29,955 --> 00:23:33,825
small time and procurement teams get itchy at that.

526
00:23:33,855 --> 00:23:36,135
They don't know how to sign anything that doesn't have

527
00:23:36,135 --> 00:23:39,285
both custom terms and too commas in the price tag.

528
00:23:39,555 --> 00:23:41,715
So you want to be able to catch the low end

529
00:23:41,715 --> 00:23:43,515
and the high end, and what's between those two?

530
00:23:43,875 --> 00:23:45,255
Doesn't matter quite as much.

531
00:23:45,435 --> 00:23:46,815
So you've, you've passed through that gate.

532
00:23:46,815 --> 00:23:47,235
Good job.

533
00:23:47,355 --> 00:23:47,805
Thank you.

534
00:23:47,835 --> 00:23:50,355
It's funny you should say that because we had this long

535
00:23:50,355 --> 00:23:54,675
debate, uh, at, at, at the company about the pricing

536
00:23:54,675 --> 00:23:57,375
page and how important it is, and I was on the side of.

537
00:23:57,655 --> 00:23:58,885
It's where most people start.

538
00:23:59,275 --> 00:24:01,435
Uh, and uh, some other folks

539
00:24:01,525 --> 00:24:03,895
in cloud cost and architecture are the same thing.

540
00:24:03,895 --> 00:24:06,295
And you, and you ignore that reality at your peril.

541
00:24:06,415 --> 00:24:10,735
I always start there because I wanna know not only what is it gonna cost,

542
00:24:10,735 --> 00:24:14,155
but what are the axes that you folks think about these things on and

543
00:24:14,155 --> 00:24:17,305
what are the upsell things and where at what point does my intended use

544
00:24:17,305 --> 00:24:21,175
case start to look like a pretty crappy fit for what you might wanna do?

545
00:24:21,235 --> 00:24:21,475
Yeah.

546
00:24:21,625 --> 00:24:23,125
And that's exactly where I was at.

547
00:24:23,455 --> 00:24:26,395
Uh, and it was funny 'cause our more engineering minded engineers.

548
00:24:26,430 --> 00:24:28,470
Who, you know, were the ones who were like, no,

549
00:24:28,470 --> 00:24:29,820
no, they're gonna look straight at the docks.

550
00:24:31,274 --> 00:24:34,125
I said, well, some engineers will go straight to the docs and

551
00:24:34,125 --> 00:24:36,975
that's another place where you kind of have to be honest, right?

552
00:24:37,004 --> 00:24:39,314
You have to, your documents have to be correct.

553
00:24:39,615 --> 00:24:40,754
You would think that, wouldn't you?

554
00:24:40,875 --> 00:24:41,955
Well, okay, sure.

555
00:24:41,955 --> 00:24:42,254
A lot.

556
00:24:42,254 --> 00:24:44,685
I guess Some people do shove marketing in there, but we

557
00:24:44,685 --> 00:24:47,264
generally try to make our documents as accurate as possible.

558
00:24:48,020 --> 00:24:50,570
Le le less about marketing and more about, uh, pe.

559
00:24:50,629 --> 00:24:53,389
People write docs and they don't manage to step outside of their own use

560
00:24:53,389 --> 00:24:55,790
case and their own expectations, and they're too close to the product.

561
00:24:56,000 --> 00:24:58,280
So it's cl the docs make perfect sense if

562
00:24:58,280 --> 00:24:59,930
you've been building with this already.

563
00:25:00,139 --> 00:25:02,990
Uh, classic example I love to use for this is Nix, uh,

564
00:25:02,990 --> 00:25:05,750
the Nix documentation assumes you've been using Nix for a

565
00:25:05,750 --> 00:25:08,660
long time, including their tutorial get started problem.

566
00:25:09,050 --> 00:25:09,800
Great.

567
00:25:09,920 --> 00:25:10,970
That needs some love.

568
00:25:12,865 --> 00:25:15,085
But the other thing I look for when I'm trying to decide for

569
00:25:15,085 --> 00:25:20,004
something like this, where I am building out a thing, is assume

570
00:25:20,004 --> 00:25:24,145
that at some point our interests are no longer going to align.

571
00:25:24,145 --> 00:25:26,605
Maybe your company is going to pivot to social

572
00:25:26,605 --> 00:25:30,835
networking for pets regardless of what that thing is.

573
00:25:30,895 --> 00:25:32,725
I there, there might be a time where I need to

574
00:25:32,725 --> 00:25:34,705
deviate from the way that you've done these things.

575
00:25:34,855 --> 00:25:39,090
What does the Exodus look like to run this in my own AWS environment?

576
00:25:39,804 --> 00:25:42,745
And that's something that's not as easy to see from the shiny webpage.

577
00:25:42,745 --> 00:25:43,975
You actually have to kick the tires on it.

578
00:25:44,155 --> 00:25:47,604
Or in my case, I ask you what's the exodus look like if I

579
00:25:47,604 --> 00:25:49,854
decide down the road that we're not strategically aligned?

580
00:25:50,064 --> 00:25:52,165
So that's the best part, right?

581
00:25:52,165 --> 00:25:54,504
Like I said, we, we care about developer experience.

582
00:25:54,895 --> 00:25:56,665
You, the code is yours.

583
00:25:56,754 --> 00:25:57,655
It can run anywhere.

584
00:25:58,165 --> 00:25:59,935
Uh, the data is yours.

585
00:26:00,084 --> 00:26:02,274
Generally, most people bring their own database.

586
00:26:02,635 --> 00:26:06,504
Uh, we do offer databases that you can use, but real

587
00:26:06,504 --> 00:26:08,034
databases or horseshit databases,

588
00:26:08,034 --> 00:26:12,300
I. Uh, we offer a free RDS the smallest RDS instance.

589
00:26:12,960 --> 00:26:13,530
It's RDS.

590
00:26:13,530 --> 00:26:13,679
Cool.

591
00:26:13,679 --> 00:26:16,800
That's a real database as opposed to like DNS one of my horse shit databases.

592
00:26:16,860 --> 00:26:17,610
Yeah, yeah, yeah,

593
00:26:17,699 --> 00:26:18,060
yeah, yeah.

594
00:26:18,060 --> 00:26:18,659
Real database.

595
00:26:18,659 --> 00:26:20,760
You have to use real Postgres to for us.

596
00:26:20,790 --> 00:26:21,030
Yeah.

597
00:26:21,449 --> 00:26:24,120
Uh, but also you can use any Postgres provider.

598
00:26:24,120 --> 00:26:29,159
So a lot of people use superb base or neon or whatever it is, but, um, you know.

599
00:26:29,820 --> 00:26:30,870
You can bring your own.

600
00:26:30,870 --> 00:26:33,270
And most customers who are more than just

601
00:26:33,330 --> 00:26:35,280
a tiny hobby actually do bring their own.

602
00:26:35,459 --> 00:26:38,550
So the exit from our company is actually really, really easy.

603
00:26:38,729 --> 00:26:42,030
You just take your transact app and run it for yourself if you're not

604
00:26:42,030 --> 00:26:44,879
already doing that against the database that you probably already own.

605
00:26:45,330 --> 00:26:45,840
Got it.

606
00:26:45,840 --> 00:26:47,820
And you can deploy it into your own environment.

607
00:26:47,850 --> 00:26:50,669
Uh, does it presuppose that you have a server of

608
00:26:50,669 --> 00:26:52,620
some sort to deploy this on or fleet of servers?

609
00:26:52,620 --> 00:26:54,479
Does it deploy directly AWS Lambda?

610
00:26:54,540 --> 00:26:54,719
Yeah.

611
00:26:54,719 --> 00:26:56,459
If you exit our cloud, you would need your

612
00:26:56,459 --> 00:26:58,409
own server if you're not already self-hosting.

613
00:26:58,620 --> 00:26:58,679
Yeah.

614
00:26:59,220 --> 00:26:59,550
Okay.

615
00:26:59,910 --> 00:27:02,250
I, I have to imagine the event of an Exodus.

616
00:27:02,280 --> 00:27:03,900
People are not like, well, I wanted to run

617
00:27:03,900 --> 00:27:06,420
on only on Lambda for budgetary purposes.

618
00:27:06,420 --> 00:27:07,290
Like, that's great.

619
00:27:07,710 --> 00:27:10,350
You might not be the target market for this thing.

620
00:27:10,410 --> 00:27:10,590
And

621
00:27:10,590 --> 00:27:11,130
that's fine.

622
00:27:11,130 --> 00:27:15,180
I run it on Lambda because transact does require it to be running all the time.

623
00:27:15,960 --> 00:27:16,230
Okay.

624
00:27:16,560 --> 00:27:17,250
At least one.

625
00:27:17,685 --> 00:27:19,665
So you can have, you have one.

626
00:27:19,905 --> 00:27:21,135
Oh, that's the AWS version

627
00:27:21,135 --> 00:27:21,765
of serverless.

628
00:27:22,090 --> 00:27:23,175
Yeah, yeah, yeah.

629
00:27:23,235 --> 00:27:24,405
Doesn't scale to zero.

630
00:27:24,525 --> 00:27:26,775
And they're like, oh, we've never said it scales to zero.

631
00:27:26,775 --> 00:27:28,815
And then I look at the way back machine when they first

632
00:27:28,815 --> 00:27:31,485
launched serverless, and it says prominently scales to zero.

633
00:27:31,485 --> 00:27:32,685
It's don't try it.

634
00:27:32,745 --> 00:27:34,215
Pretend I didn't read what I read.

635
00:27:34,215 --> 00:27:35,265
I remember these things.

636
00:27:35,265 --> 00:27:38,475
So we do scale to zero on our cloud because we eat the cost

637
00:27:38,475 --> 00:27:41,745
of having that one last thing running to wake up the rest.

638
00:27:42,074 --> 00:27:43,574
So we do truly scale to zero,

639
00:27:43,965 --> 00:27:44,985
which is the right answer.

640
00:27:45,225 --> 00:27:45,675
Good job.

641
00:27:45,735 --> 00:27:46,245
I'm proud of you.

642
00:27:46,485 --> 00:27:48,074
But yes, if you ran it for yourself, you would

643
00:27:48,074 --> 00:27:49,455
have to have something running all the time.

644
00:27:50,084 --> 00:27:53,415
It, it's counterintuitive, but making it easy for people to

645
00:27:53,415 --> 00:27:56,564
leave significantly decreases the possibility that they will.

646
00:27:56,564 --> 00:27:56,625
I.

647
00:27:57,240 --> 00:27:57,690
Yes.

648
00:27:57,780 --> 00:27:58,140
No.

649
00:27:58,140 --> 00:27:58,590
Agreed.

650
00:27:58,590 --> 00:28:01,050
And that, that was our philosophy way back in Netflix.

651
00:28:01,110 --> 00:28:04,260
It was when everyone else made you call to cancel Netflix,

652
00:28:04,260 --> 00:28:06,810
just put a cancel button right on your, your profile.

653
00:28:07,080 --> 00:28:07,230
Oh.

654
00:28:07,230 --> 00:28:10,410
Every time a company was whining and crying, when California changed the

655
00:28:10,410 --> 00:28:14,490
law that if you can sign up online, you need to be able to cancel online.

656
00:28:14,550 --> 00:28:16,945
And the wailing and gnashing of teeth, it's like.

657
00:28:17,495 --> 00:28:22,505
Making it difficult to cancel is not a business practice I find ethical.

658
00:28:22,505 --> 00:28:23,825
What's the matter with you people?

659
00:28:23,885 --> 00:28:24,095
Yeah.

660
00:28:24,395 --> 00:28:24,515
Yeah.

661
00:28:24,575 --> 00:28:25,895
You don't, don't annoy.

662
00:28:25,895 --> 00:28:27,395
Don't make it just inertia.

663
00:28:27,395 --> 00:28:29,375
The only reason people continue to spend money

664
00:28:29,375 --> 00:28:31,865
with you, you want happy customers, not hostages.

665
00:28:32,045 --> 00:28:32,315
Right.

666
00:28:32,620 --> 00:28:33,159
Exactly.

667
00:28:33,280 --> 00:28:35,620
And so that, that philosophy is definitely carried through.

668
00:28:35,620 --> 00:28:38,830
We make it just as easy to leave as it is to arrive.

669
00:28:39,189 --> 00:28:39,490
Yeah.

670
00:28:39,610 --> 00:28:40,659
This is the right answer.

671
00:28:40,929 --> 00:28:41,830
I like what you've done.

672
00:28:42,100 --> 00:28:44,169
Uh, there is some terrifying stuff you have about

673
00:28:44,169 --> 00:28:45,970
the open source version on that pricing page.

674
00:28:46,120 --> 00:28:48,879
You mentioned that it has a built in time travel debugger, which

675
00:28:48,879 --> 00:28:52,000
is awesome, but yet presupposes At one point I built something that

676
00:28:52,000 --> 00:28:55,629
was working, uh, so you know it's better for people who are good

677
00:28:55,629 --> 00:28:59,439
at things, uh, but you also say it runs on Linux, windows, and Mac.

678
00:28:59,649 --> 00:29:01,179
Uh, that's insane.

679
00:29:01,210 --> 00:29:02,169
Explain that to me, please.

680
00:29:02,504 --> 00:29:06,794
Because the Transact app is just a Python app or a TypeScript act.

681
00:29:07,155 --> 00:29:09,915
Anywhere that you can run Python, you can run transact apps.

682
00:29:09,915 --> 00:29:11,564
So you can run it locally on your Mac.

683
00:29:11,835 --> 00:29:16,125
That's how most of us do development, uh, Linux obviously.

684
00:29:16,335 --> 00:29:18,824
And yeah, you can get, uh, we do have people who use Windows.

685
00:29:18,824 --> 00:29:20,835
Actually a couple of our engineers use Windows.

686
00:29:21,165 --> 00:29:24,195
Uh, one of our engineers was a long time veteran of Microsoft,

687
00:29:24,345 --> 00:29:28,335
loves to use Windows, and so he runs his stuff locally on Windows.

688
00:29:28,710 --> 00:29:29,070
It's great.

689
00:29:29,280 --> 00:29:29,730
Got it.

690
00:29:29,820 --> 00:29:31,770
So does this run, so if, if it runs in a developer

691
00:29:31,770 --> 00:29:33,660
environment, does this run inside of a Docker container?

692
00:29:33,660 --> 00:29:35,640
Does it run, uh, using the system?

693
00:29:35,640 --> 00:29:36,600
Python, heaven forbid?

694
00:29:36,600 --> 00:29:37,590
I mean, how does it work?

695
00:29:37,590 --> 00:29:39,420
You can do it however you want, right?

696
00:29:39,420 --> 00:29:40,140
It's up to you.

697
00:29:40,260 --> 00:29:42,420
You can put it in a Docker container, that's fine.

698
00:29:42,840 --> 00:29:45,540
You can splat it straight into your system.

699
00:29:45,540 --> 00:29:47,310
Python, if you want, that's fine too.

700
00:29:47,520 --> 00:29:48,150
Not recommend it.

701
00:29:48,925 --> 00:29:52,105
Professional advice folks, do not do that when you break your system.

702
00:29:52,105 --> 00:29:54,205
Python, you'll not be going to space today.

703
00:29:54,564 --> 00:29:56,725
Not recommended, but you can do it if you

704
00:29:56,725 --> 00:29:58,014
wanna shoot yourself in the foot like that.

705
00:29:58,225 --> 00:30:02,245
We don't, we are not opinionated about what your development

706
00:30:02,245 --> 00:30:04,645
environment looks like other than you have to have our dependencies.

707
00:30:05,215 --> 00:30:07,014
So that's, that's the main catch, right?

708
00:30:07,014 --> 00:30:09,294
So using the system, Python is probably not gonna work

709
00:30:09,534 --> 00:30:11,935
'cause you can't install the necessary dependencies, but.

710
00:30:12,825 --> 00:30:16,095
Another thing I look for in tools like this, especially as I think

711
00:30:16,095 --> 00:30:19,125
of it from the more complicated enterprise perspective, uh, there

712
00:30:19,125 --> 00:30:22,335
needs to be something of a golden path that guides me through things.

713
00:30:22,335 --> 00:30:25,335
Otherwise, you wind up with death by configuration options,

714
00:30:25,515 --> 00:30:29,235
the decision fatigue, analysis paralysis becomes a real thing.

715
00:30:29,415 --> 00:30:31,545
So by default do a bunch of stuff.

716
00:30:31,545 --> 00:30:34,425
Like what are the worst examples I can think of, of, uh, of.

717
00:30:34,495 --> 00:30:37,284
Making that painful for customers, go ahead to the console

718
00:30:37,284 --> 00:30:40,735
and try and set up the, uh, a CloudFront distribution.

719
00:30:41,004 --> 00:30:43,135
Uh, they may have changed that somewhat recently, but.

720
00:30:43,574 --> 00:30:45,645
A few years ago at least, it was brutal.

721
00:30:45,764 --> 00:30:49,514
There are, there were at least 70 options, five of which most

722
00:30:49,514 --> 00:30:52,695
people used, and it was terrible and it, it was confusing.

723
00:30:52,935 --> 00:30:55,064
So you need to give people a chance to deviate

724
00:30:55,094 --> 00:30:57,044
from that golden path as well as having it.

725
00:30:57,284 --> 00:31:00,614
So, okay, here I need to do something a little bit different.

726
00:31:00,614 --> 00:31:03,554
Instead of using RDS, for example, I want to

727
00:31:03,554 --> 00:31:06,554
use superb base or neon or something else.

728
00:31:06,764 --> 00:31:08,235
But once I've done that.

729
00:31:08,429 --> 00:31:10,679
I want to go back to the golden path.

730
00:31:10,679 --> 00:31:15,000
Aside from that deviation, so many tools are, once you eject, you're done.

731
00:31:15,000 --> 00:31:16,379
You're not getting back in the plane.

732
00:31:18,075 --> 00:31:18,375
Yeah.

733
00:31:18,435 --> 00:31:20,264
And, and we totally agree with you, right?

734
00:31:20,264 --> 00:31:22,125
That, that here's the golden path.

735
00:31:22,335 --> 00:31:26,415
And the golden path is take our sample apps and modify them, uh,

736
00:31:26,415 --> 00:31:29,925
and then you can modify them and deviate in whatever area you want.

737
00:31:30,105 --> 00:31:32,054
That's our total philosophy for our entire

738
00:31:32,054 --> 00:31:35,115
product actually, is all of our competitors.

739
00:31:35,115 --> 00:31:36,794
When you want to add durability, they make

740
00:31:36,794 --> 00:31:38,939
you rewrite your whole thing to their.

741
00:31:39,855 --> 00:31:40,845
Style, right?

742
00:31:40,845 --> 00:31:43,605
You gotta say, this is gonna be the reliable part for us.

743
00:31:43,605 --> 00:31:46,065
You add a decorator to the one thing that you care the most

744
00:31:46,065 --> 00:31:49,005
about and start there and then you can expand from there.

745
00:31:49,125 --> 00:31:50,925
So our entire philosophy is about.

746
00:31:51,390 --> 00:31:53,610
Easy, gradual introduction, right?

747
00:31:53,610 --> 00:31:56,250
It's take your big piece of software and make one thing reliable.

748
00:31:56,400 --> 00:31:57,720
Now make another thing reliable.

749
00:31:57,720 --> 00:31:58,890
Now make another thing reliable.

750
00:31:59,520 --> 00:32:02,160
That's the challenge too, is people wind up perpetually

751
00:32:02,160 --> 00:32:05,460
finding themselves in worlds where the things they care

752
00:32:05,460 --> 00:32:07,350
about are not necessarily things others care about.

753
00:32:07,410 --> 00:32:09,630
And finding out where those points of commonality

754
00:32:09,630 --> 00:32:11,580
are and where those divergences are is super handy.

755
00:32:11,910 --> 00:32:14,340
Um, one of the biggest problems you're gonna have with getting

756
00:32:14,340 --> 00:32:17,700
something like this, uh, adopted is that it's not adopted already.

757
00:32:18,030 --> 00:32:21,030
And it's, it's sort of paradoxical, but like the number one

758
00:32:21,030 --> 00:32:24,600
thing I look for when I'm trying to do work with a deployment

759
00:32:24,600 --> 00:32:26,970
system is, alright, what community support is there?

760
00:32:27,090 --> 00:32:31,889
Uh, I want to ideally not be the only person who's ever

761
00:32:31,889 --> 00:32:34,920
tried to hook it up to a load balancer, for example.

762
00:32:35,220 --> 00:32:36,450
Uh, that's never great.

763
00:32:36,690 --> 00:32:38,700
Uh, and like, especially if you're a, if

764
00:32:38,700 --> 00:32:40,560
you claim to be a hyperscale cloud provider.

765
00:32:40,730 --> 00:32:42,320
That's a problem for those folks.

766
00:32:42,590 --> 00:32:45,980
Uh, for something like this, it's a lot more fluid, but it also increases

767
00:32:45,980 --> 00:32:49,220
the likelihood that I'm going to blunder into sharp edges at some level.

768
00:32:50,354 --> 00:32:50,655
Yeah.

769
00:32:50,864 --> 00:32:53,445
Yeah, that's a huge problem and a big thing with DevTools, right?

770
00:32:53,445 --> 00:32:55,485
Is you have to bootstrap that community.

771
00:32:55,814 --> 00:32:59,864
Uh, we, we are doing kind of this typical what a lot of the DevTools now do.

772
00:32:59,864 --> 00:33:02,264
We have a discord, all of our employees are there.

773
00:33:02,264 --> 00:33:03,344
They can answer questions.

774
00:33:04,064 --> 00:33:05,475
We set up Slack channels with our.

775
00:33:05,510 --> 00:33:08,000
Most of our customers, you know, all of that stuff.

776
00:33:08,150 --> 00:33:09,170
But you're absolutely right.

777
00:33:09,170 --> 00:33:11,180
The bigger the deployment, the easier it is to run.

778
00:33:11,180 --> 00:33:14,150
You don't want to be the first, uh, and I totally get that.

779
00:33:15,230 --> 00:33:17,090
And that's a bootstrapping problem, and that's a

780
00:33:17,090 --> 00:33:19,040
bootstrapping problem that pretty much everyone has.

781
00:33:19,850 --> 00:33:24,379
We've tried to make it as easy as possible by hiding most of the complexity

782
00:33:25,370 --> 00:33:30,710
and having a wide variety of examples in the documentation that get people to,

783
00:33:31,070 --> 00:33:33,170
yes, we have a ton of examples and.

784
00:33:33,195 --> 00:33:33,254
I,

785
00:33:34,095 --> 00:33:35,475
I, I hate the, oh, wow.

786
00:33:35,475 --> 00:33:36,615
There's five examples here.

787
00:33:36,615 --> 00:33:40,095
And none of them mapped to anything remotely like what I'm doing.

788
00:33:40,095 --> 00:33:43,935
And like, I often tend to view that as a leading indicator that I might not

789
00:33:43,935 --> 00:33:47,925
have a great time with this just because I am already off the beaten path.

790
00:33:48,044 --> 00:33:50,325
When you build something purely in Lambda, for example,

791
00:33:50,325 --> 00:33:53,475
without any real stateful stuff or server side things.

792
00:33:54,045 --> 00:33:58,215
That's often not well supported by an awful lot of stuff out there.

793
00:33:58,215 --> 00:34:01,215
So I know going into that, that I'm, I'm an edge case.

794
00:34:01,935 --> 00:34:04,754
Some things embrace that edge case and some don't seem to know that they

795
00:34:04,754 --> 00:34:09,375
exist and that latter category, I, I don't have a great time with those.

796
00:34:09,380 --> 00:34:09,540
Yeah.

797
00:34:10,304 --> 00:34:10,514
Yeah.

798
00:34:11,145 --> 00:34:14,020
So if people wanna learn more, where's the best place for them to go?

799
00:34:14,020 --> 00:34:14,594
Find out?

800
00:34:15,105 --> 00:34:18,344
Uh, so if they wanna learn more about DBOS, obviously start at our website.

801
00:34:18,674 --> 00:34:21,565
dbos.dev d-b-o-o-s.dev.

802
00:34:21,930 --> 00:34:24,660
If it's easier to remember that way, uh, that's the best place to start.

803
00:34:24,660 --> 00:34:27,810
Or docs do DBOS, do Dev is if you're the kind of engineer

804
00:34:27,810 --> 00:34:29,880
that we talked about earlier who likes to dive straight into

805
00:34:29,880 --> 00:34:32,490
the documentation, that's actually a great place to start.

806
00:34:32,700 --> 00:34:34,350
We've got a quick start there and so on.

807
00:34:34,740 --> 00:34:38,085
I personally like to learn from just reading examples, so like you

808
00:34:38,085 --> 00:34:41,070
just said, we have a ton of those and that's usually where I start.

809
00:34:41,430 --> 00:34:44,700
Uh, but yeah, our GitHub, please go give us a star.

810
00:34:44,700 --> 00:34:45,780
We would love to get that.

811
00:34:46,290 --> 00:34:46,470
Uh.

812
00:34:47,159 --> 00:34:48,900
It's just, uh, DBOS Inc. On GitHub.

813
00:34:49,830 --> 00:34:50,909
Those are the best places to Start.

814
00:34:51,120 --> 00:34:53,219
And we will of course put links to all of this

815
00:34:53,219 --> 00:34:55,139
into the show notes because that's what we do.

816
00:34:55,230 --> 00:34:57,480
Thank you so much for taking the time to speak with me today.

817
00:34:57,540 --> 00:34:58,230
I appreciate it.

818
00:34:58,290 --> 00:34:59,399
Yeah, thanks for having me on.

819
00:34:59,520 --> 00:35:00,540
We'll have to do this again soon.

820
00:35:00,810 --> 00:35:01,500
Absolutely.

821
00:35:01,919 --> 00:35:04,799
Jeremy Edberg, CEO at DBOS.

822
00:35:04,935 --> 00:35:08,235
I'm Cloud Economist Corey Quinn, and this is Screaming In the Cloud.

823
00:35:08,505 --> 00:35:10,935
If you've enjoyed this podcast, please leave a five

824
00:35:10,935 --> 00:35:13,125
star review on your podcast platform of choice.

825
00:35:13,125 --> 00:35:16,545
Whereas if you've hated this podcast, please leave a five star review on

826
00:35:16,545 --> 00:35:20,205
your podcast platform of choice along with an angry, insulting comment.

827
00:35:20,205 --> 00:35:21,930
That is no doubt set to Arizona time.