
Screaming in the Cloud
·E646
Reliable Software by Default with Jeremy Edberg
Episode Transcript
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.