Navigated to Reliable Software by Default with Jeremy Edberg - Transcript

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.

Never lose your place, on any device

Create a free account to sync, back up, and get personal recommendations.