The Infra Pod - Transactions don't belong to databases anymore, let's discuss the Modern Tx Stack (w/ Yoko from A16z + Tony from Inngest)

Episode Date: July 31, 2023

Transactions is what makes critical applications with state works in production, and it has been decades of research and iterations of having developers leveraging the tools that exists to implement t...ransactions in their applications. Ian and I are sitting down with Yoko (investor from a16z) and Tony (CTO from Inngest) to chat about the new Modern Transactional Stack (https://a16z.com/2023/04/14/the-modern-transactional-stack/), and how it's looking to shape up the industry in the near future.

Transcript
Discussion (0)
Starting point is 00:00:00 All right, let's do this. Welcome back to yet another Infra Deep Dive. That's the intros, right? Tim, I'm from Essence VC. That's Ian, let's kick it off. I'm Ian Livingston, been helping Sneak figure out how to become a platform. And today we're going to talk about modern transactional stack. I'm super excited to be joined both by Tony from Ingest and Yoko at Andreessen Horowitz, who both contributed to this most recent modern transactional stack blog post that Andreessen published. But in order to figure out who these folks are, Tony, why don't you tell us a little about yourself and about what you've been working on?
Starting point is 00:00:39 Hey, I'm Tony. I run Ingest and we make it easy to write reliable code. So you can drop in RSEK and write workflows as code and deploy them anywhere because they're backed by serverless queues. So zero infrastructure. We manage function state. We push function state into your functions and everything kind of just works. Yoko, let's go. Hi, everyone.
Starting point is 00:01:02 My name is Yoko Lee. I invest in infrastructure, developer tools, AI, and all the other things at ASICC. But I'm a cartoonist and I'm a developer by trade. So I worked at a few companies most recently, like a product at HashiCorp. So super excited to talk to you all about transactions. Awesome. I would love to start, like, let's take a step back from the blog post and maybe Yoko, you can help us out. Like, what is it about the Modern Transaction Act? Why did
Starting point is 00:01:31 you at End Reason start writing this? Like, what was the like insight or the realization that started you thinking about that? Hey, there's a problem here. We don't understand it, but there's something going on. We feel like we can do a whole bunch of research. What was the starting point? Like, where'd this come from? And what got you so interested in it? Yeah, so I mean, the background of this is that for many years, actually, since the microservices came out, remember all that rage, you know, 10 years ago, the team at A16Z, we have been just looking into the space. And every time a major platform shift happens, we observe behaviors and the new tools adopted by developers. And this time around, it is interesting that when microservices
Starting point is 00:02:12 came out a couple years ago, people started to find that it's actually very hard to build transactional systems in distributed system and across different microservices. So back in the days, if you just have a front end and one back end, and all transactions can be handled by databases, there's no questions there. But now if a request has to traverse between different microservices, say, I want to check inventory, and then I want to make a payment, you have to manage a state in between these microservices. That gets very difficult.
Starting point is 00:02:45 And people usually throw queues and caches at the in-between state storage between these microservices. So we were wondering, how do companies at scale manage this? And then a couple of years ago, of course, there are more novel solutions coming out in the market. So that's what we call now workflows. So a workflow is just a block of code that execute based on events or timers.
Starting point is 00:03:09 But the upside is that instead of using queues and caches speaking microservices, you can just use workflows like a programming language level to write an important code that execute across these microservices and workflows will take care of it.
Starting point is 00:03:27 So that has been an interesting platform shift transition for us. And then when we dive deeper, we realize that there's a lot more nuance to workflows. So I'm going to stop here before I dive into nitty gritty technical details. So curious about which class you want us to go down. Tony, maybe you could you know we have yoga's introduction why she's interested you've started a company that's kind of solving a problem in the space maybe you could tell us what what made you start ingest and then we could talk a little bit more about okay well what's the world actually like yeah yeah yeah so prior to ingest
Starting point is 00:03:59 I was running engineering at a healthcare company um vertically integrated in this line called uniform teeth healthcare is crazy and I kind of wanted to get into it to fix it which is naive I was running engineering at a healthcare company, vertically integrated in VizLine called Uniform Teeth. Healthcare is crazy, and I kind of wanted to get into it to fix it, which is naive. And we had a few problems. We had to build a medical record suitable for orthodontics. We had to build a treatment planner, and we had to build a patient app. And ultimately, the theory was, if we can design world-class treatment planning software, which accurately treatment plans better than any other company,
Starting point is 00:04:30 we can lower the total cost of treatment with software. That meant that we had to build all of these really complex flows. Automating patient intake seems basic, but there's a lot of nuance to it. So when a patient comes in, you need to email them two hours before. If they actually don't sign off on treatment and don't allow you to hold that treatment data, you've got to do stuff with it. So there's all these edge cases around what you need to build as an engineering team, which is really important for compliance, but also just really important for the product. And this is kind of a more extreme version of what you see in normal products. Like for example,
Starting point is 00:05:06 sneak, you've got a bunch of workflows around security. So building this just generally sucks. It's never easy, whether you go down the microservices route or even if you've got this monolith. If we talk about like Yoko's microservices part, it's kind of composability. You still have all of these branches in your workflow that you need to put together. You need to make sure that they all work and they're reliable. And you need to handle failure states.
Starting point is 00:05:22 Not only do you need to do that, but your processes is change you need to handle versioning between the two so building all this stuff as a developer takes a lot of time hugely error prone debugging sucks and often there's only a few people in your company that can do it it's not like you can take a front-end engineer or a bootcamp grad and then chuck them into this problem because if you want to make it reliable ultimately that's distributed systems as much as people don't like it and so it's really difficult further kind of annoyingly we were event driven which i think is the right way to do things events are great because then we can react to what happens if a provider doesn't submit the form and we don't see the event what happens if the intake is slow or a patient turns up late? Kind of events in the real world. But if you're modeling events and trying to add that into your workflows, it just sucks.
Starting point is 00:06:14 And so there was never really a nice way to do this. Nights and weekends, I'd stay up until 2 a.m. prototyping and just to make it easier for the engineering team and which is kind of how it got started so generally just feeling this pain over the course of five years as we were building out this healthcare company so yeah that that's the story behind it the theory is everything there you know workflows distributed systems event driven systems and generally engineers need to build this whether they know it or not, being really difficult. Got it. I think we'll have to really jump deeper into this modern transactional stack. And what I think will be super interesting is we kind of describe what a good modern transactional stack even looks like. Because I think in the end of the day, you ask any developer, what's the best ideal stack or tool or abstraction they need?
Starting point is 00:07:07 You come up with like 50, 100 different political, religious answers that they're willing to fight each other with. So depending where the layer sits, we kind of give it up on some level. Like, okay, that's not my problem anymore. I'm willing to give it up to somebody else to solve it. But once you jump out of the database, like, okay, applications start having workflows. You know, we should all use events in some way.
Starting point is 00:07:28 Like that becomes a very big debate. And we see this happen so often since the problem we're trying to solve, from what I can understand, is the growth of the services, right? The growth of data inconsistencies and everybody trying to solve the same problems. Well, how do we ever get to the same agreement?
Starting point is 00:07:46 This is the kind of thing abstraction should be. And this is the kind of thing developers should start doing. And we'll start bringing my knife, you bring your knife, and we had to figure out how to get to some middle ground, right? So Tony, let's start from you. How did you decide what is a good stack for apps developers to think of? It's super interesting because there's so many facets to this. Taking a step back, if we're building a new platform to allow you to build transactional
Starting point is 00:08:11 systems, it has to meet the standards of existing technology. For example, Qs, right? SQS came out in, what, 2004? It hasn't really changed in 20 years. Sure, there's been additions to it, but that's kind of crazy. We're still working with technology from 10, 20 years ago. Whenever we're building these new platforms, they have to meet standards that exist. So what's that like? Concurrency toggles, prioritization, back off. You need to meet these standards. But realistically, there are a few things that are really
Starting point is 00:08:38 important nowadays. Developer speed is huge. We have to build really complex products. I think the table stakes has changed in the last 20 years. We're not building crud apps. We have to build really complex products. I think the table stakes has changed in the last 20 years. We're not building CRUD apps. We have to build complex things that integrate with a bunch of different services. And it kind of has to be reliable. So you want to build these fast because you have to build a lot and there's a lot of pressure. And I think a lot of clouds for sale on Netlify have shown that developer experience is really important. So you want to also make something that's really easy for developers to get started. So those are two fundamentals that are guiding paths.
Starting point is 00:09:13 They're not engineering trade-offs, but they're principles that you need to live by. And then when it comes to actually choosing the right thing, I guess power, usability, and flexibility are really important. You don't want to be beholden to something that makes it really difficult for you to actually implement what you need to implement or make it really difficult to change because then you're sort of swapping out one set of problems for another. That becomes really, really, really hard. So realistically, the overall premise of just write code, don't think about the infrastructure is appealing for a lot of developers because they can focus on the problems that they need to focus on rather than the kind of auxiliary baggage.
Starting point is 00:09:56 And distributed systems has been auxiliary baggage that you need to think about. up. So I guess my point of view is if we can abstract a lot of that away, make it simple, but still powerful, then that's the ideal end state. And looking at that as well, like there's a whole lot of decisions that you need to make. Kind of serverless is the lowest common denominator in the tech world. You know, there's no state, there's no reliability, there's no retries, it's push-based model. And if you take a look at something like existing queues, it's pool-based. So changing that on the head is really important so that we do push-based versus pool, then you can
Starting point is 00:10:31 deploy anywhere. Meet serverless edge servers as well. It just kind of works. So I think high-level developer speed is of use. Low-level there's a ton that goes into these specifics to kind of meet everyone where they are. That's super interesting. There's all these different models, different ways to think about
Starting point is 00:10:51 it. I'm really interested, Yoko, to hear from you as you research for this blog post, which knowing what I know about Andreessen and how you have a very research-focused way that you go about thinking about what you invest next and thinking about trends. What are some of the different options you've seen in the world? You know, we've talked a little bit about workflows. Tony's talked a little bit about events. What are you seeing as the different trends that are emerging to try and basically at the end of the day, try to solve this problem?
Starting point is 00:11:16 Yeah, I guess like to set the stage at a very high level. So Tim, previously you kind of asked like, what's a good stack for developers? And how do people even think about trade-offs? To get started, I think when we kind of made the modern transactional stack, like the Diagweb, we were thinking about what does modern mean and who are the developers? And then you kind of see there are two personas. There's one kind of persona, kind of like the microservices developer I kind of mentioned. And And the pattern they follow are different from this other type who are mostly going to start developing apps in the past couple years, mostly on JavaScript. And the tools needed by the microservices kind of app developer and infrastructure developers
Starting point is 00:11:57 are different from the ones who are developing on JavaScript. So when we think about modern transactional stack, we're thinking about, okay, now, like this year, if you are a developer in a great startup company or a mid-market company, you're thinking about starting a new project. What is a stack you will reach for? So if you have legacy, kind of like older architecture, they'll always be there.
Starting point is 00:12:22 Martin Casado likes to talk about, like, infrastructure gets layered away. You will never replace them. So what we're seeing is, like, older architecture, they'll always be there. Martin Casado likes to talk about infrastructure gets layered away, you'll never replace them. So what we're seeing is what are the emerging trends that kind of necessitate handling of these transactions and what are the best patterns? So from this point of view, when we're thinking about the modern transactional stack, when we talk to a lot of developers from like either larger mid-market companies smaller enterprise kind of like tech focused companies what we consistently hear from them is that when we started a feature we use javascript when you use javascript transaction
Starting point is 00:12:55 is still a problem javascript does not solve any of that probably made it worse too unfortunately and then the question becomes okay like do I use my database for it? Which is like, usually, in bigger companies, as you all know, it's not always that application engineers will handle this invite. And there's always like a distributed systems team who handles like writing things to your queue at scale. And the question becomes, what's the right interface for the application developers to be able to solve transactions. And it just happens that from what we've seen, there are two approaches.
Starting point is 00:13:29 One is you can use database, which are starting to implement workflows too, like things like Supabase, they have workflows, convex workflows. And then there's the other approach, which is more workflow native, kind of like what Tony is building here in Jazz. And then we also see temporal supports like TypeScript.
Starting point is 00:13:48 There's two other ones, Trigger, Different, and we've seen a lot of companies in that area. So from this point of view, we kind of grouped components together. There are databases, what we call ALTP application, logic transactional platforms, workflows, and then how they interact with business logic. Amazing. You talked a little bit about JavaScript developers don't have the problem solved, you know, you have legacy.
Starting point is 00:14:12 Are there specific technologies that we would consider being layered away today that you think you're seeing in the stack that, you know, five years ago or three years ago, or even today for some engineers, you're like, oh, the solution to this problem is that? Have you developed opinions on what is going to be layered away and what the new emerging layers will be as a result? We're going straight into hot takes. So it is interesting.
Starting point is 00:14:34 At first, my intuition was, oh, is the database getting layered away? And now, as we research more, the answer is actually no. Because this market is also evolving very fast. So we're seeing a lot of the database players kind of innovating, adding new components that can make this new architecture work. So the part that I would say is we're seeing new patterns that like people still use microservices, but it's not as hot, I would say, as maybe five, ten years ago when I was writing code. They were like, oh, move from monolith to microservices. Now we're kind of moving past the early innings of transit, moving back.
Starting point is 00:15:14 And I think everything is kind of starting to become a function instead of kind of like an API that's abstracted away. So that really speaks to what Tony mentioned, like the developer ergonomics, the taste, the feel, like how you want to use the tool. Those are changing. So I don't know if it's as hard of a take as what you had wanted, but that's what we're seeing. I have a hot take on this one. Go for it, sir.
Starting point is 00:15:39 I personally hardcore belief that I don't think queues are developer friendly. And I think they're going to get laid away. So everything from creating subscribers, capacity hardcoded into your workers is absolutely bananas. Like what happens if you change the logic or change the payload and you've got things enqueued from last month? It's super hard to get any visibility into things that have existed for 15 years. And then retries is like, again, bananas, like dead data queues are crazy and they should die just like the name. It's kind of insane. If you took a look at what exists in the world now, like ClickHouse is pretty cool. You know, BigQuery has been out for a long time. Why can't we just store everything in an OLAP database and then allow you to replay based off
Starting point is 00:16:24 of that, which is kind of what we're working on at Ingest. Just replay failed functions without having dead data queues and have all of the state visible so that you understand what happened. Replay it locally. Queues are kind of crazy and generally shouldn't necessarily be exposed to people, I don't think. I think that it's too much to consider. It's like working with the pipes when you really just want to care about what you're actually building. That's number one.
Starting point is 00:16:49 I'll stop. One hot take at a time is maybe enough. Well, I think we sort of already agreed as a group. We should just do hot takes all the way to the end at this point now. So how about we just do a spicy future? Because I think this spicy future will be quite lengthy. There's endless things we can probably jump on.
Starting point is 00:17:07 Spicy futures. I think you already started, Tony, right? Like about what you think should happen. And we can maybe go even further. Like, okay, what do you see people actually do in five years or so, right? Like Q's going away is more like a removal. But next three to five years, what should all developers be writing on? And how should they think about the trade-offs of writing new servers and apps anymore?
Starting point is 00:17:35 Yeah, yeah, yeah. So regardless of Ingest's approach, I still think that it's really good that developers need to focus on code. You know, that can live anywhere, but you need to just write code. It's important to meet people where developers are at. I don't think anyone's going to want to learn a language that works with distributed features. Otherwise, Erlang would be amazing and everyone would write Erlang. So we're not asking people to change languages. Write JavaScript, write Go, write Ruby. It has to be where developers are at. And you should just focus on code with the abstraction of function
Starting point is 00:18:05 state queues retries baked into that code ideally you would have a layer a shim middleware sort of like a distributed vm that runs your code that manages this for you and organizes function state kind of what we do but also like anyone can do it just takes time to build that way developers can just write code and they can do things like, when a user signs up, send this email reliably. Email services go down. Stuff fails. Whether or not you put this in a transaction is okay. But still, to some degree, you're going to need retries.
Starting point is 00:18:36 At some point, something's going to fail. You're going to get a wrong payload. You still want to be able to replay that and adjust the payload. Because types are great, but they don't catch everything. So, yeah, code retries, super important, baked into the system. One thing that actually we see a lot, I kind of brought this up a little bit earlier, events. I think events are the future. They're kind of immutable facts about what's happening.
Starting point is 00:19:03 And you might see this externally when you're building a workflow. You need to wait for some external state to happen, some external change. Typically, people bundle in Kafka and RabbitMQ, or they bundle in Kafka and Celery, mix these two together, have all the state flying all over the shop, which is really hard to maintain. And I think if you can bundle in events, listening, and sort of like pauses directly into your functions, then things get really, really, really easy to build. Like basic examples that every company deals with, even important for like a growth churn workplace, like a user signs up, they don't do something, which is really hard to do, then send them an email, like wait three hours for them to, you know, do something on your platform. User adds a product to a cart and they don't check out within an hour,
Starting point is 00:19:47 then send them an email reminder. That stuff is a basic workflow, but driven by events. And I think not only do you want the steps in that function to be reliable, you also want to be able to listen to outside state by events in a really, really, really easy to use manner. And I think fundamentally paving the abstractions over queues and events is a really good really, really easy to use manner. And I think like fundamentally paving the abstractions over queues and events is a really good idea because then developers can build anything realistically in a really easy manner, you know, in like a few hours.
Starting point is 00:20:14 Right now, that's something that you have to pay specific systems for, like braze.com do all of these churn workflows for like five, six grand a month. And that's one platform for one particular type of workflow that developers can't build because it takes a couple months. But if you abstract this away, then it becomes really easy to do that. I'm very curious,
Starting point is 00:20:33 if I could get your take, maybe this will end up being spicy hot or maybe it won't be, but I'm very curious to get your take on when I step back and think about trends, I'm like, well, what's that moment that makes this trend real? What is that defining moment that like, oh, this is happening, right? And when I think about trends, I'm like, well, what's that moment that makes this trend real? What is that defining moment that like, oh, this is happening, right? And when I think about
Starting point is 00:20:48 AFCA, EventQs, RabbitMQ, and I think about what type of organizations are running these types of infrastructure, I'm thinking Bloomberg, right? Hundreds of thousands of events, millions of events per second, highly transactional data systems. Is there something that's occurring, that's driving, that's pulling, if you will, people this way? Do you think there's a broadening out of some trend? Normally we'd see this only in the biggest of enterprises, maybe because they could afford it, or maybe because they actually have the use case. I'm curious, from your perspective, is this a thing that's going to continue to only live in the biggest of the enterprises or the most complex use cases, or is this really a thing that only is going to continue to only live in the biggest of the enterprises, the most complex use cases, or just really a thing that's being broadened out?
Starting point is 00:21:28 Here's to get your take. That's super interesting. Like high level, that's sort of like, you know, when you look at pricing, you're like, okay, cool. Is this working? Is our pricing working? Or is the data because our pricing is bad? Like, is Kafka working?
Starting point is 00:21:41 Is it only used in big companies because only big companies need it? Or is it only used because only big companies can afford to operate it because it takes so much time and effort and infrastructure knowledge to manage? Maybe it's the latter, is my take. I think that events are an interesting and correct way to do things. But I think that traditionally, it's been way too hard to do that. And if you look at any sort of theory, you know, like Nats is great. NSQ is cool. RabbitMQ's, you know, PubSub stuff is awesome. Google PubSub is amazing too, but still
Starting point is 00:22:10 you have to learn the sort of paradigm of development and that takes a lot. And so I think like it's really, really difficult, just like the edge. Edge computing was traditionally for, you know, maybe some VoIP providers. Maybe it was for phone networks. Maybe it was for CDNs. And then you get Vercel and Fly.io and Netlify. And it's like, oh, I just want to push to the edge by pushing out a button. Like Fly deploy and say which region you want is pretty amazing.
Starting point is 00:22:36 Not any developer can do it. And the question isn't necessarily about like, oh, is edge correct? It's like edge improves latency, makes your performance better, makes the experience better. So can we make it easy? I think events are a really good
Starting point is 00:22:48 way to work. Basically, modeling what happens in the real world, which is kind of what we do as engineers. And if we can make it easy for people, then yeah, it should be something that people consider, especially if it only takes an hour to use. You don't have to set up
Starting point is 00:23:03 stateful subscribers and work for workers and different subscriptions to each particular topic and take all of that away. Just write a function that reacts to events. Like that's, that's pretty cool. That's pretty powerful. So I think, um, number one, been too hard and too costly, too time consuming. I think number two, things are getting a lot more difficult to build as, as, as sort of products as, as classes of things.
Starting point is 00:23:26 Like if you look at real time, even like integrations, webhooks or events, real time message passing, which are events, you know. Think like if you were taking a look at like up on the bandwagon, LLMs, chat, you know, each message is in theory an event that you react to. And so I think depending on how you view things and model things, basically everything is an event. And you can choose to model it as an event or you can choose to model it in a specific niche way for that particular use case that you're working on. But events are the most general form of working.
Starting point is 00:23:58 And so broadly applicable, just too difficult. Yeah, to chime in on kind of what tommy said it's yeah since your question is also around kind of like what is actually pushing all these technology forward and why did the architectural pattern kind of start at this moment now i would say we're still in the very early innings but if i have to guess here are the hot takes. So the first hot take is that I think the cloud should be abstracted away. You know, having working in infrastructure for a long time, you know, provision a bunch of things, like, you know, manage lots of things with all these tools. But it was just very painful. Like, there are tools that make it less painful.
Starting point is 00:24:40 But to be honest, as an application engineer, it feels like a technical detail. Someone else should probably abstract. But then recently, we are seeing a lot more trend on people moving to serverless. And by serverless, I don't mean like AWS Lambda or things like that. That happened 10 years ago. By serverless, I mean the same technology, for example, Kafka queues or caches, the kind of thing that scales down to zero, you can consume as a service and then scale up, hopefully, infinitely. It's not infinite, of course, but scale up to the extent that you need it.
Starting point is 00:25:14 So very dynamic, great ergonomics. I'm seeing more and more serverless tech coming out and developers will just use that. Because of that, events is a natural kind of like abstraction to working with systems like this. Another thing we are seeing is apps are global ready by nature now, not only apps, but different forms of SaaS, like for example, payments now need to be global ready. If you're like an AI developer, you know, writing an app, you want to sell globally, your payments has to serve everywhere. So of these two things i actually think there will be probably less and less movement on
Starting point is 00:25:51 the lower level infrastructure layer like the traditional what like sre's devops writing shell script you know provisioning stuff i think there's going to be less of that but more on the driving consumption layer like more and more providers will consolidate this. They will still need DevOps to manage this very well. But the rest of the world probably needs less of that since they won't have this problem. But more and more people will just be writing application on top of this. And my other hot take is you either have to use workflows with a persistent storage, or you have to use a database with workflow kind of functionalities.
Starting point is 00:26:30 We don't know which way it will go. It's something that we're definitely deeply interested in. But at the end of the day, the workflows will be needing to tie back to the business data because that's your source of truth when you're querying. Who are the users? How much inventory do you have? Who paid? Who didn't pay? All of that is stored in, you know, like the traditional database storage.
Starting point is 00:26:53 So it's either that the workflows need to tightly integrate with all the databases and then make sure that layer can be conducted like atomic transactions so you can write back with no problem, which is what kind of a lot of today's workflow solutions do. Or as databases, you need to kind of stretch yourself to the other side of providing, hey, here's developer, this is how you use microservices or serverless
Starting point is 00:27:17 with the workflow engine, but with our database. I think there's so many possible topics to even ask questions in this sort of a general theme. There are actually lots of explorations and products or research that are going on in this space as we speak, right? And I think it's kind of the exciting part, you know, seeing what can actually work in the long run is quite hard. It's almost like predicting which LLM will win in the future. Like, I don't know. know. So I want to maybe figure out what do you think the maturity needs to be? Or what are some of the approaches here
Starting point is 00:27:51 that will win what kind of developers? This is my observation, at least. I'm seeing two kinds of transactional or user programming stack. One is a more opinionated, wrapped around stack where you can just write some code. It has built-in assumptions of how transactions will work. One is that my thought was modal, right? You know, like simplicity, I can just run my functions. It will just run somewhere and add
Starting point is 00:28:18 little primitives here and there to start to support your stack upwards. If you look at Yoko, your blog posts, the companies or the approaches you mentioned are more building blocks, right? They're building blocks like the listed, you know, Supabase, Upstash, Convex, a bunch of these. They are building one more layer
Starting point is 00:28:36 above your database, some level. And it's never clear what is going to be the next state of the world, you know, moving forward. Are we going to be the next state of the world you know moving forward are we going to have an event definition that we all use across the whole board and this is like a standard a w3c kind of craziness whatever and then everybody will build on top of that i'm not sure that could ever happen as a developer there's just already so much complexity and now you say here's a way to define events then you have to go and figure out everything else.
Starting point is 00:29:06 Nobody wants to do that, right? But I don't know what is that everything else, right? The cues are just part of it, but there's just so much work involved. Tony, because your world is like, I'm going to wrap around a system for people to be able to program and Yoko is seeing everything. So I'm curious about your takes. Like, what do you think is enough of a product that people will actually jump over they rather use you and don't have to think about other trade-offs because i feel like
Starting point is 00:29:31 queues or events is just like one part of it where it has to be some some steady state like actually kind of able to handle certain scale you can handle this kind of thing or the programmability or something like that there's a maturity that needs to get to i don't know what that looks like yet to be honest yeah there's a lot that goes into these systems you know like they're both broad and deep which is really annoying because like you would like to choose one or the other but unfortunately you have to do both realistically where we're at now if you take a look at db versus application layer implicitly there's a choice. Are we going to migrate everything to a new DB or are we going to be able to stick with what we've got? So choice number one is, where are you?
Starting point is 00:30:11 Greenfield projects can probably afford to try something new. But again, you have to try something new, which means learning a new paradigm and learning how to put all of this in your database. What is the debugging story? What's the scale story? Like you mentioned,
Starting point is 00:30:24 if you've got a database that does literally everything for you, are we talking about an IBM 90s mainframe? How does that work in the future? And so definitely individual decisions that would need to be made to go into that. And I sort of view the, similar to how you build things, like the lowest common denominator of what we do is push-based so that we can work with serverless edge. Serverless is unreliable and there's no queues. It's good for APIs, but you can't write business logic because it's going to fail. So minimum standards are push-based.
Starting point is 00:30:55 And again, the minimum standards to kind of meet everyone where they're at is like application level, write standard code, TypeScript, Go, whatever you need, and sort of provide people the building blocks to allow them to write their own business logic just works. I don't think people want to understand the details of how things really work under the hood to a degree. Largely when it comes to implementing things, I think people just want to implement being able to give them a small but powerful API to say, here's how you run a particular part of a transaction in a function.
Starting point is 00:31:27 Here's how you wait for something else to happen. Here's how you pause and schedule future work. Here's how you cancel jobs automatically based off of some event coming in or an API to do so, so that you can declaratively write things and deploy it anywhere, like Verc like Vercel or AWS or GCP is kind of an ideal for us end game, largely because it has the most surface area and it's the most applicable to every developer.
Starting point is 00:31:56 So there's definitely merit in exploring new technology, you know, like what does it look like if we could build all of this inside a database? It's a super appealing idea and fun to think about but then again like are you going to be able to take somebody that's got like you know terabytes of data or hundreds of gigs in postgres and written all over there if this microservice is on monolith and transition that that's a little bit of a tough ask so that's my take on things yeah i think that's an extremely good question.
Starting point is 00:32:26 I guess to get started, coming to your point on events-driven, so my view of the world is that a lot of the workflow systems that we see today, the inner workings are already events-driven. It's just a matter of what semantics they want to expose to developers. So there is a distinction between how it's implemented versus how they want the users to use it. So how it's implemented is almost always just events.
Starting point is 00:32:50 Everyone uses a Kafka queue or some other queues to implement these things, but developers don't need to know. So the right interface, to be honest, the market is still really deciding what's the best way to work this out.
Starting point is 00:33:05 But kind of to transform your question a little to, like when I was thinking about it in my head, I thought there are three concepts that any system will need to take care of in order to ship an end-to-end solution. One is like application state, like what handles the state? What moves the finite state machine forward?
Starting point is 00:33:24 That's one thing. And then two is like business data, kind of like what we said, like the OLTP where business data source of truth lies, where do you store that? And then the third part is the business logic. Where do you write that? Is it in a microservice?
Starting point is 00:33:37 Is it in like serverless? Like what have you? Or is it as part of the workflow? So to say like you want like an end-to-end solution you basically need a solution that covers all three of these things and i think for a subset of developers the three things could coexist in the same system and in fact today we're seeing it right like super based convex they're all doing it very well and then depending on what you're developing you could just run on it end to end
Starting point is 00:34:05 but then there's this other different persona the question is do we think these are different layers are going to be the same layer and then my answer is i think there's going to be different layers at the end of the day because the distributed system is just so hard to crack it's hard to have distributed system as a service you know like you can have a component of the distributors system as a service that i can believe so i think the steady state of the world is like each one of this layer they will stay separate layers but for a subset of audiences you could say you know like we could use one solution for all of them yeah that's interesting and also like you mentioned something really interesting like application state and business data. Basically, nothing here lives in silo.
Starting point is 00:34:48 It has to interact with whatever you need to do. If you've got a system that can only interact with 10 specific APIs, then it's useful in maybe 10 specific circumstances. And so it needs to be able to see your data, it needs to be able to interact with whatever you need to do as an engineer, but do it automatically and manage the kind of function state for you so you don't manage reshreds. I'm like, yeah, I totally agree.
Starting point is 00:35:09 Like, super important to actually be able to do regular engineering tasks, you know? I have a great question. I can't wait to hear some people's takes. We'll start with you, Yoko. You know, one of the things Tim and I talk about often when we think about doing this podcast, we'd love to talk about infrastructure trends.
Starting point is 00:35:27 This is obviously a trend. What apps are being enabled as a result of this? At the end of the day, I think what we're talking about is we're taking a thing that exists already in large organizations. We're talking about a democratization of that to make this more available. I'm really curious to understand, as you think about investing or what trends you think about are really important or where new TAM is or whatever it is, what type of new apps do you think are going to be enabled or new verticals that can be go after, new opportunities to go after? There's all the fact that we're taking what is relatively complex, difficult to do. I have built these things by hand personally.
Starting point is 00:36:03 I can tell you it's a miserable affair, would not recommend. What do you think the average impact on the developer will be? And more importantly, I think the question is, what types of businesses could we build that we couldn't have built before? Yeah, first, we don't really look at hands. I think as a developer, what we look at is if there's an entry point and then we try it out, hands off, to see if it's like an ergonomics that we like. But jokes aside. So an entry point, and then we try it out, hands-on, to see if it's like an ergonomics that we like. But jokes aside, so the entry point, I mean, off the bat, I think the latent demand it kind of unlocks
Starting point is 00:36:33 is that for serverless global-ready Greenfield apps, before, they will need a backend team to kind of implement this. So say if I'm implementing a global-first order processing solution, before, I couldn't of implement this. So say if I'm implementing a global first order processing solution, before I couldn't have done this. I have to be like a strike or like someone else who has a DevOps team. So today the latent demand it unlocks is that people can't function without as much of a DevOps team. And that makes them being able to build anything like global ready and that happens to handle a transaction. So the specific use cases, I don't think it's that different from what we see transactional apps are like booking tickets, placing an order, like you see this
Starting point is 00:37:17 everywhere in e-commerce. So in fact, when we look at like, what kind of apps generate the most event driven architecture, it just happens to coincide with transactions. It's e-commerce. It's kind of notifications. It's kind of like what you want to use Zapier for, but in a more powerful way. If I receive an email, send it to users. All the common everyday use cases, you couldn't have handled at scale in a consistent manner now you can
Starting point is 00:37:45 that just happens i think will happen first with the more greenfield stack just because adoption is easy you can move very fast but i have no doubt it will trickle down to kind of the legacy stack as because like people are building apps over and over again like new apps even in bigger companies that's what we have seen with microservices. How did everyone move from, you know, LAMP stack, haven't heard that term for a long time, to microservices like 10 years ago? And I think it's going to happen with how people are working,
Starting point is 00:38:14 kind of moving on to database with workflow, where workflows with persistent storage in future. That's great. One of the things you said, and then we'll pass it to you, Tony, but one of the things you said that triggered a thought in my mind was, most innovations of infrastructure is about, well, we've had all these people over here doing this really hard problem, a piece of infrastructure land, rebuild on top of the infrastructure. We no longer need those people solving that problem because it reduces, you know, makes something more efficient, makes it easier to manage, we have a service we can buy from someone, now they have to go focus on something else. The interesting question, okay, well, if you don't have to focus on dealing with distributed state management anymore, because you've adopted this pattern, you've adopted this new tool, you need to go build new apps, then what are those new apps? But Tony, I'd love to, the original
Starting point is 00:38:56 question is still the main question is, what apps do you think, like, what are we going to see? I think Yoko brought up a couple of really great points specifically around global ready is a great example. Yeah. Honestly, very much agree with all of the points that patient demand, all the stuff you need to build is just easier, way faster to build complex apps. So I think like,
Starting point is 00:39:18 more than we can see an increase in complexity in the stuff that we do because it's just easier to manage complexity. You don't have to worry about any info. You write the functions and the business logic and great, nice. So more complex things in general. But okay, this is crazy. And I saw this on Twitter, which is the world of hot takes,
Starting point is 00:39:36 taking a completely different view on things. Someone was like, I love Tailwind UI because the classes are declarative. And that's really cool because I can tell ChatGBT, yo, do X, Y, and Z and give me this thing with padding. There's never really been a nice declarative API for distributed systems, right? Like you still have to do subscribers, workers, backoffs, all the general stuff that people don't want to deal with.
Starting point is 00:40:00 And we talked about this before of like, what's enough of a product? Enough of a product is a really decent API that abstracts these things in just code. So if you have this decent API that just reads like code and it's really basic, just one line to do some really complex things, it's pretty cool because then anyone can do this. I'm not going as far as all the LLM craziness in the world, but like specifically, like you can just tell somebody,
Starting point is 00:40:24 hey, I want to write this particular crazy workflow that takes a lot of time. Please go ahead and write some pattern for me and it will just work fundamentally is the goal. That's the dream state. So I think everything becomes easier and realistically, yeah, you can kind of like bash out whatever you want.
Starting point is 00:40:39 So speed of development is the biggest one. Like you're saying, move people from infra to product. But then if it's a declarative API, everything becomes a lot easier to work with, which is pretty cool. So I don't know, the future is crazy right now in particular, you know, so much is changing. Yeah, quick thoughts after hearing all this. Because I think since I worked on like large scale games like Halo or worked at Mesos, I worked at lots of different kind of platforms. We basically have a dedicated team working on a platform team that has to build transactions from ground up. Always create an event system from ground up ourselves, right?
Starting point is 00:41:20 Some kind of actor system that can distribute all kinds of crazy stuff. Just be able to build what we want faster and cheaper and easier. And I think this is super cool. I don't know if we can actually able to chat GPT out of a Kubernetes the next day or chat GPT out of millions concurrent player systems from tomorrow.
Starting point is 00:41:41 But I think what's probably most likely is we can chat GPT out of an e-commerce store that's probably doing some kind of crud, plus some transactions. Your typical team that has to still shopify can't do good enough, but I need to have my own logic to do certain actions within certain transaction scale, certain safety. I really do believe that with the move of adding application transactions moving towards and it's more friendlier to define the events and friendlier to be able to describe the state
Starting point is 00:42:12 in a much more simplistic way, like AI can actually start generating much more accurate results here. And LLNs can start take over more generation of this. It's a beautiful state. It's a beautiful state. It's a scary state for some developers that just love to work in this middle and just kind of like,
Starting point is 00:42:29 I know how to run database and I know how to deal with transactions and commits and rollbacks. And that's your whole job. I'll be worried. Or pick up some other books. I don't know. But I think definitely there is this middle ground
Starting point is 00:42:42 where you're not the largest scale. You're not the lowest latency. You are a platform team that needs to build a decent scale because I need to handle multiple states with multiple outcomes when it comes to side effects. That should go away. We should be able to describe it much more quicker. And it should just happen. And we have some trust that this should happen within some time because right now all this stuff is hard how do you build a system like that right we can't have slas we can't ship anything right as a platform team you're
Starting point is 00:43:14 so figuring out how to do all the operations the trusts and the guarantees but can we get to that point where somebody built enough not just the the definitions, and also can start to guarantee the outcomes. I think actually there's some crazy thing that might happen in the near future. Yeah, I think it's important, especially when we talk about infrastructure that's like creating a new layer over a layer of complexity that we have today
Starting point is 00:43:38 is to remind ourselves that, we look in any at-scale organization or really any organization that's using a Pippo event or distributed transaction mechanism. What's the day-to-day of that experience like today? And for most of them, it's, oh, I improperly calculated a partition of a Kafka topic, and I lost all of the data in the state, and now we don't know where it went, and now there's been a customer outage. In theory, these things are fun to play with, but in practice, these things are terrible to manage and run. And anything that helps us spend less time solving with the problems we create ourselves and more time focusing on creating net good for the world, for our customers, or whoever it may be, that's better for everybody.
Starting point is 00:44:15 I always think about that when I think about infrastructure. It's like, well, why is this valuable? Well, it's because we're actually making the next generation of applications easier to build. And we're having people focus on more of net value add instead of just like managing what is unfortunately like the popsicle sticks that is the current state of most people's backend. This has been an absolutely awesome conversation. I think, I think both of you on that note, Tim has been messaging me time to go.
Starting point is 00:44:38 But this has been a great conversation. Yoko, you know, we love to give our guests like a at the end. So if there's any shout-outs, where can people find you? Yeah, yeah, yeah. Shout-outs to my partner, Statution Martin. We kind of wrote the piece together and did all the research together. And then you can find me
Starting point is 00:44:57 on Twitter at StaffYokoDraws. I draw cartoons about infrastructure, make fun of it, make fun of technology. So if you want to collaborate, let me know. The cartoons are excellent. I think, in fact, you drew one for the application stack. Oh, yes. So as our friend Ian put it, so I drew a
Starting point is 00:45:14 cartoon about... It's on the topic of I can't decide whether to bring the database to application logic or bring the application logic to the database. So come check it out. And Tony, over to you. Yeah, yeah. Grateful for the entire team that's helped build
Starting point is 00:45:30 this. And, you know, like the previous job there was this CMO who is amazing at specifying how everything should work and very, very, very helpful people that have been there in life. On Twitter, ingest.com. Two Ns, like, you know, a house for your data and functions.
Starting point is 00:45:45 And then, yeah, that's that's that's largely I I crap post less on Twitter than I should so maybe I should get back on Twitter awesome Timmy want to close this out all right well let's end thanks everybody thank you thank you

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.