Benchmarking, Type Systems, and Good Hustle
You wanna know something funny? I, this is embarrassing. I'm gonna say it anyway.
Adam:Say it. Hey. Can you tell me about the benchmarking stuff? I just can't wait any longer. It's driving me crazy.
Adam:I just need to know, like, how slow is Vercel?
Dax:How slow is Vercel? Yeah. Yeah. Okay. So I guess for some context, what I found interesting is it seems like nobody actually benchmarks providers as much as I thought they would.
Dax:And I think everyone's kind of in the same position where I'm like, oh, everyone says it's fast. Someone else probably benchmarked it. And everyone's probably assuming the same thing. And, AJ actually told me the other day that no one had really benchmarked AWS until Macs had that, like, nice Lambda cold start page. And that was like, what, like a year ago?
Dax:So I think we're just in this fine situation where like, we're all engineers, but we don't like really do the engineering stuff a lot of the times.
Adam:Yeah. Yeah.
Dax:Which I get because like, you know, one, these speed differences might not even matter. Like, you're gonna use the thing you wanna use and you'll just eat the performance overhead if it gives you other benefits. But yesterday, I was like, okay, we built this OpenNext SST thing and deployed Next. Js to AWS. We didn't really focus on performance.
Dax:We were just kind of like, let's just make it work and we'll figure out performance later. I assumed that it was just gonna be slower because of that because we know we like didn't do anything special. So let me just run a benchmark. So I ran it and the results were really surprising. I thought OpenNEXT would probably be like I was ballparking like maybe like 30% slower in general.
Dax:It turned out it was actually three times faster and for the mean latency. The throughput was also insanely higher, think. I did a benchmark of like ten seconds, 20 concurrent requests constantly hitting it for 10 for ten seconds. Mhmm. I think the throughput was like almost four times more, on the AWS self hosted version with OpenNext.
Dax:So this was kind of shocking. I was like, their brand is just so much around we focus on making your front ends run well. And I think that's true of how some of the React framework is designed. But I think I've always said this performance comes a lot from architecture. Like if you improve your architecture, you can probably like make a much bigger impact in improving like, oh, this function executes faster in my code base.
Dax:So, yeah, that's kinda what's at play here is their architecture is probably really complicated for two reasons. I think one reason being they have a lot of additional features that the virtual dashboard offers, and some of these are good features. So they probably have to execute some extra stuff to support them. And then two, they're in the challenging situation of, you know, they potentially need to support a million deployments on their AWS account. That means they're running up on all kinds of like AWS limits, all kinds of workarounds they need to do.
Dax:So that part the first part, if they have additional features, okay, maybe worth the performance trade off. The second part where them having to scale to a million deployments is not your problem, that's their problem. They're getting worse performance for that reason. And I think again, I'm all I'm theorizing of why it could be so much slower, but that to me is like, that's like a less acceptable. Like, I'm not gonna get worse performance just so they can scale more, you
Adam:know. Yeah. Yeah.
Dax:There I can see the self hosting side being worth it.
Adam:So it it we're just to clarify, were these API requests or these were like SSR rendering pages?
Dax:Yeah. So, the thing that I posted yesterday was very simple. It was just a hello world type API route just to keep it as as stripped down as possible. Because what I was actually looking to test was what the Next. Js runtime overhead was of just having a simple API route.
Dax:Yeah. But I just kinda discovered this other thing. I did run benchmarks on like the root page, which is which is an which is a React server component page. Mhmm. Also, it was also like drastically different there as well.
Dax:So it doesn't I don't think there's a difference between API router or any other stuff. Yeah. And it puts into question, like, if it's this much worse, all the streaming stuff that they added, like, does that even compensate for that? Like, that that even worth it on top of all this? Like, we haven't added streaming and we will.
Dax:And then and so we'll improve the performance even beyond what we have now. But, yeah, it really confuses me because it's like, this is the most basic thing. Like, what's the server? What's the delay from the server and you? Yep.
Dax:And that's, like, where you'd start optimizing things. And I feel like they focus on a bunch of the other places while the core is is kinda slow.
Adam:I mean, I've realized when I saw this stuff yesterday that you posted that all of my stuff on Vercel is just, like, simple websites that don't even have an API. It's just, like, informational websites. And the only, like, full stack site where there's, like, a back end and I used API routes and I used Prisma too, so that's probably a lot of the problem. But the only one I've ever built and deployed to Vercel is so stupid slow. I just assumed I was doing something wrong.
Adam:And then I learned, like, Prisma is giant and, Prisma in a Lambda function is just a bad bad deal. I learned that, so that's probably explains a lot of it. I was really surprised. And I think it's like it's kinda like when somebody yells at a crowd for help. You just assume somebody's taking care like, someone has done this work and figured out they were so slow.
Adam:Turns out, no. You just did it yesterday, and that's very surprising.
Dax:Yeah. It's a diffusion of diffusion of responsibility thing. It's like we all just assume someone else is gonna take care of it and it just doesn't happen. Yeah. So it's interesting.
Dax:So I didn't I didn't get a response from them. I'm sure they're actually, no, I did. One of their employees replied being like, and I I kinda gave him my setup and he's gonna explore. Yeah. Like, they could I talked to AJ for a bit.
Dax:AJ had a bunch of theories on what they might be doing behind the scenes that causes some of this because he was at Serverless Inc. When they kinda had their hosted offering. I think they had to do a bunch of weird workarounds also to deal with just the challenges you run into when you're trying to, you know, support a million deployments.
Adam:So I'm I'm used to, like, the true the main trade off seems to always be, like, developer experience or runtime performance. And I don't feel like that's, like, inherently should be the case. I feel like we should get to a place where we have both, but it turns out Vercel is that too. I didn't know that I was actually sacrificing runtime performance inherently by deploying to Vercel. But, like, they tout all these DX features, like, it's so easy to use at the cost of runtime performance, sounds like.
Dax:Yeah. There's a historical advice. I don't remember exactly how the quote goes. It's like, make it work, make it something, make it fast or whatever. I forgot what that is.
Adam:Make it work, make it good, make it fast or something like
Adam:that.
Dax:Something like that. Yeah. And I find that you can you can put if you may rearrange that quote in every any order and you can kind of be like, oh, that makes sense. And I think for us, our order is, like, we don't have an amazing dashboard or console, which is an amazing hook if you're trying to sell something like Vercel. It's like you show off that look how easy it is, that like magic experience.
Dax:And I think that's kind of where they focused. And they when you focus on a certain area, you kinda compromise on the other. So it might be performance they compromise on. Also just like like structure of the project, like it's not open source, it's closed source, things like that. It's because they did things in a certain order.
Dax:I think for us, we took a harder direction where we were like, let's make it open source first, which has its own challenges. Okay. Let's make it perform well, which has its own challenges. And then now we're getting to, okay, we're gonna eventually have a dashboard that feels like as magical to use as as Vercel's. It's just a different order, but I I like our order better because I feel like it leads to something that's sustainable and healthy.
Dax:Whereas the other one grows really big upfront because you can really hook a lot of people and then then you have a bunch of work you have to now do afterward now that you have this this attention on you.
Adam:Yeah. I'm so glad, though, I got out of that world, and I'm now just a Laravel developer. I'm never gonna touch Next. Js or Vercel again. Wait.
Adam:When could SSD deploy Laravel apps? When will that be a thing?
Adam:Does that make sense?
Adam:I mean, there's Laravel Vapor, right, which is some kind of serverless deployment option for Laravel. So can you just, like, copy what they did with Vapor and build it into SSD?
Dax:Yeah. We probably I'll
Adam:talk to Frank. I'll get I'll get I'll get Frank on it.
Dax:Is that an implication that Frank does all the work?
Adam:Yeah. Yeah. No. I'm just like, he does these new frameworks. Right?
Adam:He just itself
Dax:That's true. We've been we've been laughing so hard at Frank because he's like weirdly becoming a world expert on how all these frameworks work under the hood, but he just does not do front end development at all. So he knows like the exact build process of SvelteKit and all their little quirks and how it worked under the hood, But, like, he could never build a Svelte app. I mean, he, like, he has never used Next. Js and he, like, has never used Remix and he doesn't understand
Adam:Oh, love any of the conversations that
Dax:anyone is having about any of these things. But he weirdly knows more about this stuff than anyone. It's just like a weird weird situation. But yeah, that's what happens when you work in infrastructure, I guess.
Adam:Yeah. Now I wanna see like a YouTube video of Frank building a front end app. That would just be that would make my day. Can we please make that happen? Yeah.
Dax:Exactly. And he has all his opinions on what he likes and what he doesn't like, but it's fully related to, like, how annoying their internals are. So
Adam:Yeah. Next. Js is the most annoying by far. Right?
Dax:Yes. Yeah. Yeah. I mean, yes. Everyone everyone knows this.
Adam:I really gotta try Svelte. I gotta try the Svelte experience. People would get really passionate about Svelte.
Dax:My experience was kind of interesting because I was there was a moment where I knew I didn't wanna do React anymore. So I was like, okay, what are the options? And Svelte really seemed like it was it. I was like, I'm gonna be in a Svelte world world. I'm gonna do Svelte.
Dax:But literally, right when I was about to go all in, Ryan published Solid one point o or I think it was right before Solid one point o, he had some blog posts that went viral about Solid JS. And I saw it and I was like, I think I already said this before, I was like, oh, great. Another like stupid framework that looks like React. Like, what's the point of this? But it intrigued me enough to, like, be like, okay, maybe I should do more research before I commit to Svelte.
Dax:And then that's when I researched Solid and then, ended up using that. But it just goes to show that yeah. So I'm, like, super in the solid world. I'm building everything in solid, but it's, like, just sheer random coincidence and timing that that made it so that I, I used it. If if if it came out that blog post came out a week later, I don't think I would be using solid.
Adam:Wild. Sliding doors of tech. Now Dax is like one of the big Solid per people. You're one of the big Solid advocates.
Dax:Yeah. And just
Adam:Could have been doing the same for Svelte. Who knows what that world would have been like?
Dax:And that means I would have been pro Vercel probably.
Adam:Oh, yeah.
Dax:Alternate universe.
Adam:You might be working at Vercel right now.
Dax:Oh my god. I feel like I'm working at Vercel without much investment yet.
Adam:Yeah. Right. You're doing that work for them.
Dax:So tell me about this Laravel curiosity you developed.
Adam:I wanted to make a video. So I'm like a free agent right now. Like, I've left React.
Dax:I don't like that, by the way.
Adam:You don't like what? Me being a free agent? I can be what I
Dax:wanna be. Free agent. I I need to know where you are. I need to pin I need to pin it down. I don't like the uncertainty.
Dax:You can end up anywhere. You could end up somewhere I don't want you to end
Adam:Maybe I could. Maybe I could. What are you gonna do about it? What's the problem with me ending up anywhere? What's gonna happen?
Dax:I just won't talk to you anymore.
Adam:You just don't no. You just don't want me to be cool. You think I'm gonna become cool because I'm gonna get into some technology that you're not in on yet, and then we'll have problems because you like to be the coolest
Dax:worried about you becoming cool.
Adam:That's fair. Totally fair. So, Laravel, I wanna make a video. Now that I'm done with React forever endeavor, I wanted to make a video of my first impressions of Laravel because I hear it's like they live right beside us. They're like our neighbor that we never really hang out with.
Dax:Our nice neighbor.
Adam:Yeah. Our nice neighbor. The kind, considerate neighbor that, like, brings your trash to the front door. Like, brings your trash can in when it's out on the street, you know. That neighbor.
Adam:But then you never interact with them outside of like, hey. How how are you? I know you had Aaron on your stream, so I'm gonna I'm gonna give you credit for that. But, like, they just seem like our cousins, and at the same time, we have everything in common and nothing in common, and I wanted to know what's it all about. So I'm making a video of my first impressions.
Adam:I just spent, like, an hour going through, like, Laravel getting started stuff, and it's incredible. I can't believe how good it is, and I can't believe we chose this path of JavaScript on the back end and all the drama. Why is it so I gotta figure this out. You gotta help me. You'll you'll think through this the right way.
Dax:You'll come to the right answer.
Adam:What is it about the Laravel community that doesn't they're not invested in all the drama? They don't get caught up in it. And why does the JavaScript community get so caught up in just, like, petty stupid stuff? Is it an age thing? My best theory is older, wiser developers use PHP and they don't get caught up in the games of children and that's the problem with the JavaScript ecosystem.
Adam:Is that a good theory?
Dax:Yeah. I I I can give you my grand theory. Are you ready for it?
Adam:Yes. Are ready
Dax:for a grand theory? Yeah. I think this follows a lot of other things in the world and life in general. When you have something that's homogenous and low scale, it tends to be very stable and people tend to look at it as, wow, like, why can't we be like that? Like, think about how America is always compared to, like, some Scandinavian country.
Dax:And it's because, you know, the Scandinavian country country is smaller, people are very, very similar or culturally very the same. In America, we have just complete much bigger scale and complete chaos in who we are, where we come from, etcetera.
Adam:So Laravel is Finland, is what you're telling me?
Dax:Yeah. It's like everyone's everyone's happy and there's not too much it's kinda like very stable and and like that. I think it's because, you know, they all, like with what Taylor's done with Laravel, everyone pretty much agrees like that's that works. I'm sure there's some like, you know, I'm not gonna like paint an extreme picture. I'm sure there's like disagreement and of course, it's when whenever those engineers evolve, there's gonna be disagreement.
Dax:Yeah. But it's different than like crazy the crazy level of competition that exists in, the JavaScript world. It's just way way way bigger. Right? It's massive compared to the PHP world.
Adam:Why why though? So what are the forces that led to JavaScript being so much bigger than PHP?
Dax:It's a it's a minority rule thing. Right? The intolerant minority is always
Adam:Say that again with different words.
Dax:There's a concept called minority rule, which is a thing where when there is an intolerant minority, it always becomes the most popular. So a quick example is okay, you're a vegan. This is actually a great example. If you're a vegan, when me and you hang out, it's almost guaranteed that we're gonna eat at a vegan restaurant a restaurant that has vegan food because you can't eat meat, but I'm willing to eat eat vegan food. Right?
Dax:Yeah. Yeah. Yeah. So similarly, no one can avoid JavaScript because it runs on the browser. PHP developers are willing to write JavaScript because they have to.
Dax:It runs on the browser.
Adam:Okay.
Dax:And but JavaScript developers don't really need to write PHP or whatever other language. So I think it's just that force drives it. Like, I I wasn't a JavaScript on the back end developer for a long time. I did a bunch of other languages on the back end. I didn't really want to use JavaScript on the back end because I liked other languages and ecosystems better.
Dax:But it just got to a point where JavaScript got so big, because of this minority rule thing, I think. And then, yeah, like with scale comes problems, but also benefits. So here's here's what I will say. Laravel is like a paradise because they have a great BDFL and Taylor. Right?
Dax:Benevolent dictator for life, whatever, kinda like Linus.
Adam:Oh, okay.
Dax:Yeah. Which is awesome. But if you think about continuity and like it like relies on like one amazing person right now, which is completely fine for PHP. Like, that person's gonna be around for a very long time. So it's not a big deal.
Dax:But just thinking in terms of like like, long term and, like, really thinking about the downsides, like, is the downside. Like, we have more chaos, but we also have way more resilience.
Adam:Yeah. So it's the buzz factor. Like, if if something happened to Taylor or if he just decides he's got his Lambo and his amazing life and he's just gonna quit. Yeah. Then the Laravel community has to figure out how to go on without him.
Adam:There is no similar figurehead in JavaScript land, is there? If Guillermo decides he's done, he's gonna live on his angel investments or whatever, I think JavaScript will keep going the way it is now.
Dax:Yeah. Like, there's no one person that really holds the future of it. And like I said, like, I'm describing this in an extreme way. I'm sure Laravel is, like, well run where people can take over, but just not to the same degree. And, yeah, I think, yes, the chaos is annoying, but, like, there is good that comes from it.
Dax:But I also completely get where you also can just not want to deal with that. And that's that also makes complete sense.
Adam:So this was all kind of a downer. I was really excited. And then you said all this stuff about minority reporting and whatever. Reporting. Now I can think about how you're judging me because I'm a vegan.
Adam:You're judging me because I wanna do Laravel. Actually wanna move to Finland. It's a thing that I would love to do if they would accept me. I don't know if the Laravel community will accept me. It's like they don't want a bunch of Americans just rushing into Finland.
Adam:They probably don't want a bunch of us coming from the Java JavaScript ecosystem. We'll bring all our drama with us. The worst part about being vegan is everyone can eat our food. So, like, the deli case at Mama Jeans, they have sushi, and they only have, like, two different kinds of vegetable only, like, friendly sushi, vegetable rolls, stuff. But everyone gets them even if they're not vegan.
Adam:So then they run out of that every single day. And when we go, it's a fifty fifty chance that we can actually get the kind we like because all you meat eaters eating up our veggies. Just sucks. I don't know where that
Dax:came from. Don't worry. I I I never get veggie sushi. So
Adam:Thank you.
Dax:I'm not contributing to your problem.
Adam:Thank you so much. I did think it was funny doing the Laravel stuff. Like, they didn't escape NPM. You have to, like, NPM install and NPM build. Like, there's like a piece of your front end that still lives in that world.
Dax:Yeah. I was like, it's inescapable. You can't escape JavaScript, therefore, it'll always be around. Like, I don't want like, if I just consider nothing else, like, I wouldn't be using JavaScript as my back end language, but it's just inescapable. And because inescapable, is and I definitely underestimated this when I was outside of the JavaScript on the back end world.
Dax:I was like, why do people care so much their back end and their front end language is the same? Like, who cares? Like, it isn't it's not a big deal they're different. And it's not a big deal that they're different, but there is a crazy amount of synergy you get when the back end and the front end is in the same language. And with SST, we've like made your infrastructure code in the same language as well.
Dax:You just get better at the language no matter what what you're doing. And and that that is kind of nice. And now that I have it, like, I'm, like, not super willing to give that up. Yeah. I do.
Dax:I am but I am jealous for all the same reasons. And I I definitely look to that world to understand where our bar should be because their bar is so much higher on what is, like, good experience, what's a good entry level experience for a new project, what is considered complete for a framework. Yeah. I think we can get there and I think the right people are, like, into entering the JavaScript world now that will help us get there. But, yeah, we have a long way to go.
Dax:Five years, I would say.
Adam:Yeah. Mean, there there aren't there, like, people who've tried the Adonis, Adonis, Redwood? Like, are these things just why do people not run with those?
Dax:I think Redwood is a little bit different because okay. So here here's so here's the issue in the JavaScript world that makes this hard. Because I was thinking about this this morning. I was like, okay. If I was gonna take SST and build another like Jetstream, the thing you were using, if I was gonna build an equivalent, like what what could what would that look like?
Dax:And I realized, like, I wouldn't even be comfortable saying that you should use tRPC or you should use REST or you should use GraphQL or you should use Replicash, whatever, because I can't make I just don't feel like I have the ability to make that strong of a decision in the JavaScript world.
Adam:Yeah.
Dax:I am not super clear on why it's easier to do that in other ecosystems. Because for me, I feel there's all kinds of use cases and I personally wouldn't always just use one of those things. Yeah. I struggle to, like, create like a really complete boilerplate for that reason. But, yeah, I'm not sure why that seems to fly in.
Dax:Again, maybe just because they're smaller.
Adam:Is it yeah. I was gonna say, when like little area of the world, is there just one of all those things and you don't have to make decisions because there's just one way of doing it? Sounds nice.
Dax:Oh, okay. So here's like the root issue or here's like an example of the problem. Right? If I built a starter, it would have to work whether you're building linear or you're building, I don't know, like like an e commerce website or something or I don't know, some something some other SaaS is not like like intense like linear. And in the PHP world, no one would try to build a linear.
Adam:So they they do the inertia thing. Have you seen that?
Dax:Yeah. Exactly. I've seen that. I'm not saying you can't use front end frameworks there, but yeah. And inertia looks cool.
Adam:Yeah. I don't know. I I didn't wanna use it because I was trying to escape the Next. Js world. Like, that was my whole thing.
Adam:And then it was like, inertia plus Next. Js. Like, no. Don't take me back.
Dax:Was thought like, it was for, like, using the frameworks directly, like React Yeah. Or
Adam:You can use React Vue. But it said with Next. Js, I think you can, like, build a Next. Js app, but you just wanna build your back end with PHP, I guess? Yeah.
Adam:I guess that's the thing. I don't know. I gotta learn PHP so I can actually be a Laravel dev because I don't actually know any PHP.
Dax:That's the other issue. I do think TypeScript is a better language than than PHP. I mean, I'm obviously gonna say that because I'm really into going crazy with types and not everyone's into that.
Adam:Are there
Adam:any types in PHP?
Dax:Is it does it have a type system? It does it does have a type system. I think the newest version of PHP has type system. Aaron mentioned he doesn't even use it. Like, he hasn't even tried it.
Adam:Why has Aaron not used types? Why is Aaron wrong?
Dax:He's asked, like, what give me a compelling reason to use it, and no one has been able to convince him of anything compelling enough. That sounds exciting enough for him to try it out.
Adam:We have compelling reasons to use type systems. Right?
Dax:Not really. I feel like
Adam:Someone give him a compelling reason.
Dax:No? I feel like I've struggled with this problem for like a decade now. When I was
Adam:I thought we liked types.
Dax:No. I love types, and I think everyone should use them. But that's different from me being able to get someone excited about types when they don't understand it. Oh, Aaron's here. Aaron's saying he doesn't like types.
Adam:What do you mean? We're on a podcast next. What are you talking about? Who's here? Aaron's not here.
Adam:Do wanna bring Aaron on?
Dax:I mean, we can. Yeah. We can bring Aaron on.
Adam:We're talking about Laravel and how Aaron has types type type takes.
Dax:But, yeah, I I don't I love types. I just have never been able to found find a convincing way to get someone excited about trying them out when they aren't already using them understanding the benefits.
Adam:Okay.
Dax:It's hard to explain, I think.
Adam:Well, see if you can see if you can convince Aaron when he comes on. This is Aaron Francis joining us from PlanetScale.
Adam:Here I am. I was listening in the car. I was out getting coffee and I was listening in the car and I made it just in time. Go ahead, Dex.
Dax:I've seen that PHP has types.
Adam:Mhmm.
Dax:I'm curious what that means and I'm curious why you're not, like, jumping to, like, go try that out.
Adam:Great question. I just don't like them. So here's the deal. Fair. We we have types and I think a lot of people think of PHP is like the five point two days, which was, like, you know, fifteen years ago where it was just the wild wild west.
Adam:We have full on we have full on type systems now. I think in, like, eight point something, we have generics, which I understand can be very fancy. I haven't I haven't dug into them very much. I I feel like I'm kind of a type incrementalist. In in PHP, we have a lot more, like, proper classes than something like JavaScript.
Adam:So in JavaScript, my understanding is from what I see on on Twitter, which is most my understanding, my understanding is you pass around a lot of objects. Right? Just just objects, and they have this amorphous shape. And the type system helps enforce, like, hey. This object that I'm passing around, it conforms to the user type or the or the podcast type or the post type.
Adam:And it's like, oh, that's helpful because I know I can look for username or podcast title. Right? I kinda I kinda buy that. In PHP, we would be passing around something like a user object, like an actual proper class or a podcast episode class. And if you're using, you know, an IDE or if you're, like, using PHP Storm or something, you get all of that, like, you get all of that that autocomplete.
Adam:And if you type hint the if you type hint the method that accepts the podcast, the actual language will say, like, hey. You passed a user instead of a podcast. I'm gonna, like, I'm gonna blow up, and so you can't run. Now I think that is runtime and not, like, compile because we don't do that. So there's a little bit of a difference there.
Adam:But I where I where I land is, like, I like type hinting objects. Like, I I like knowing that my process podcast method is going to receive a podcast object. Like, that makes me feel pretty comfortable. It's it's when you get into stuff like, I'm gonna type hint or I'm gonna make a a type called positive integer so that I always know that when I'm charging my user, the type is positive integer. I'm like, I don't understand the overhead of creating this creating this very base type of positive integer to protect who am I protecting, I think, is always the question.
Adam:Like, what what are you guys not writing tests? Not YouTube, but, like, the the community. Are y'all not
Dax:writing tests?
Adam:I'm not writing tests.
Dax:Well, sorry.
Adam:Because peep people are always like, well, how do you know like, I never write bugs because I have a type system. And I'm like, I don't understand all the bugs that are coming from mismatched types. I understand bugs that are coming from me doing something silly, but not because I'm passing, you know, a string instead of a integer. So that's kinda like my my broad stance. So pick that apart as you will.
Dax:Yeah. I think that makes sense. I think the way I see it is there's almost like two level not not two, but we'll start with two. There's like two levels to type system. So there's the basic, like like, keep track of the structure of the things I'm passing around, which it sounds like if you're yeah.
Dax:If you're using any language of classes, like, you kind of already get that without having to have an additional set of annotations annotating everything. If and most and a lot of languages, like, that's kind of where they stop. And I think there's this weird gap between that and the next level where you can add like a few more features, but it feels kind of like useless like the examples you gave, right? Like, yeah, those aren't like game changing. Need to have it features.
Dax:But then the next, there's like an a language can get a more complex type system. If they if they kinda keep going on that path, can kinda like break through to another level, which is where I think TypeScript has gotten to, where you can do like all sorts of like interesting derivations and inference and all kinds of fancy things that realistically, like, the end user really never sees the end developer really never sees that stuff or needs to touch it, but it allows for something, like, really insane this kind of features in in when you're using a certain library or using, you know, certain things. If you look at some of these libraries that do this, like, you know, Drizzle is like the the ORM, that new one. If you look at like all the TanStack, all Tanner stuff he's been rewriting on the front end, they all kind of follow this model where the end user just is writing plain JavaScript. It's like it's almost like someone's there, like, guiding them on how they're how they're structuring things.
Dax:So there's this weird gap where languages don't go that far, where it's kind of like, I don't see the huge benefit of the type system. I feel that way about Go. I feel like I like everything about Go, but I feel that type system doesn't go far enough. So it's just kind of like annoying type system to deal with where I'm like, like, it's not really doing enough for me. And it's and again, the the thing I'm describing, like, next level thing, it's really it's, like, hard to understand to understand it.
Dax:Like, I don't I don't know I don't know how else to to explain it. If I think back to when I understood it, I can't even remember. I just remember, like, trying a bunch of stuff in TypeScript and, like, realizing I could do certain things and then that it turned out that was, like, a whole category of stuff that I didn't know existed. But, yeah, I think there's, like, light type systems where I'm, like, yeah, that's that's probably good enough. Like, in the PHP world, what you have is probably definitely good enough.
Dax:And going like 10% more isn't worth it unless you're gonna go like a 100% further with the type system, if that makes sense. And there's like levels past that. There's like languages that look like a really like correct type system. Like you have like the old camels and the Haskells, things like that. But, yeah, I think, like, there's a different stops on the station, if that makes sense.
Adam:Yeah. That that totally makes sense. And I will freely admit that, like, I haven't I haven't really dug into TypeScript. And I see all these people as a corollary corollary be like, oh, man. Tailwind sucks.
Adam:And I'm like, you just gotta try Tailwind, man. And I admit, like, I'm the person saying TypeScript sucks, but I haven't used it. Like, another thing is PHP community has been relatively slow to adopt more strict typing. And I have found in my career that I I have gotten outsized advantages from ignoring things until, like, until I'm sure that they're gonna stick around. And so for example, Laravel has just recently adopted stronger typing in Laravel core.
Adam:And so that to me is a signal that like, okay, Aaron, it's time to, you know, it's time to move on from 2014 and, like, catch up a little bit to typing. And so I'm now at the point like, I'm now at the point in my career where it's like, okay. The the benevolent dictator, Taylor, has decided we're gonna bring some typing to the core, and now it's time for me to say, okay. Well, I guess types are gonna stick around for a while. What I don't wanna do is I don't wanna be the one expending all of my energy trying to convince Laravel to bring typing to Laravel because I got other stuff I gotta do.
Adam:But now that, like, now that it's here, it's like, alright. Well, I guess types one. Like, I was able to success successfully, like, ignore Angular until it went away. I ignored microservices till they went away. I'm still waiting for Docker to go away, but, like, I just ignore a lot of stuff.
Adam:And then when somebody says, like when Laravel says, hey. We're gonna use Vue JS now. I'm like, alright. Well, I guess I gotta learn Vue JS, and it's been fantastic, and I love it. And so I will admit that part of it is like, I just don't wanna learn it until I'm sure that it's gonna stick around.
Adam:And now it seems like it's gonna stick around.
Dax:I would say the the adoption curve thing is is interesting because, naturally, this stuff at the early part of the adoption curve, you're gonna you're gonna have this weird combination of, so like you probably work on, like real products. I work on products for other developers, right?
Adam:Mhmm.
Dax:Yeah. So I tend to be more on like extremely early adoption of things because I'm like trying to figure out opportunities for me to build stuff for the developers. So I find a lot of the people in that space are and they're all similar to me that we're trying to like figure out the next thing. The paradox here is most of the things in this space are gonna die because they're in we're like in this early zone. So I think a lot of conversation is weird clash of people in my area talking with people in your area and we're like kinda doing very different things.
Dax:And you really don't need to be listening to what we're talking about because we're debating with each other on where we what we think is gonna make it through. And we each have different opinions on it and, like, one out of 10 of us are gonna be right. Right? So, yeah, it does make sense if you're just building, like like, we get an actual thing, not just stuff for other developers that you're at the same part of the adoption curve as the rest of us.
Adam:I feel like I'm on Twitter. I hate this conversation so much. I'm sorry. Just this is like the same stuff I can't stand listening to when you guys talk about types on Twitter Yeah. Discord.
Adam:Also, as as a show note, feel free to tell me to leave whenever once I've served my purpose of talking That's
Adam:the last thing in the world we should have talked about with you because you you work at PlanetScale. You're actually a good DevRel, which is like Thanks. Oh, yeah. That's right. Unicorn.
Adam:Yeah. There's that. There's I wanna know what a perfect Saturday is for Aaron because someone asked that in Twitch. I have all kinds of things I wanna talk to Aaron about. Laravel?
Adam:Hey. I am I am here. I got my coffee. I got my studio. What do you wanna talk about?
Adam:Give me give me one and I'll pick one.
Adam:Zax, what do we wanna talk about?
Dax:Let's talk about DevRel stuff. I I Yeah. Maybe we can ask you an open ended question of like, is this your first role as in being a DevRel?
Adam:Yeah. So I was for a minute. I was marketing engineer at Tuple, the pair programming company, which is amazing, for literally, like, six months. And then Ben and I, the CEO and I decided like, no, y'all need like a y'all need a marketer, not someone who's gonna, like, you know, build stuff and talk about it. And so then after that, I went to I went to PlanetScale.
Adam:And this is my first role as, like, a developer, you know, whatever, relations evangelist, educator. I have opinions on that. But this is my first role in that. Prior to that, I spent, like, six years at a property tax company in Texas where I live building their internal CRM, and it was wonderful. I loved it.
Dax:Yeah. So I'm curious, like, when you shifted into this role, the kind of the PlanetScale like tell you what their philosophy around it was or where you'd be like, did you have to kinda help them figure it out? Like what what what did like what's your goal in your job?
Adam:My goal is to be happy, Dax. So here's like when I when when I joined when I joined PlanetScale, I joined because and I think, Dax, you and I talked a little bit about this philosophy in the last episode. I joined because I was already doing the job that they were trying to hire someone to do. I just wasn't doing it for them. So I joined because I was writing articles about MySQL, and I was talking about MySQL.
Adam:And they looked and were like, hey. We're trying right now to hire someone to do this under our banner. Will you come do this for us? And so the, like I think the philosophical lesson there is, like, do the work and put yourself out publicly and see what happens. Because I got a DM from Sam, the CEO that was like, hey.
Adam:How come you don't work for us? I was like, dude, no one's ever asked me to work for you. Like, why would I work for you? And so he said, you know, hey. I like what you're doing.
Adam:We're we're trying to hire developer educator, which I think is nuanced. Do you wanna come do that for us? And I was like, what does it mean? He said, I just kinda do the exact same thing you're doing, but more of it and get paid for it. I was like, yeah, that sounds great.
Adam:And so I think the nuance there is that I am I am a developer educator. And I listen. I'm new to this, like, be a public presence for a company. I think there is a whole community of developer relations that is a little bit different and not a community that I'm, like, super involved in. I think the developer relations community has structure and history and leaders and opinions, and I'm just like, I don't have any I'm I'm I am not a part of that community.
Adam:Mhmm.
Adam:And so I think what is slightly different for me is I'm a developer educator and my job specifically, we we have it really good at planet scale because our product is MySQL, and MySQL is broad and huge useful and useful apart from PlanetScale. I'm biased, but I think it's best on PlanetScale, but it's incredibly useful if you just put it on a box yourself. Right? And so my job is to, like, teach people how to use MySQL effectively. And as a part of that, hopefully, we will convince them that, like, you can use MySQL effectively, and you can use it most effectively on PlanetScale.
Adam:But if if you don't choose to come to PlanetScale, we're still gonna give you, like, all the knowledge you need to to use it effectively. And we have this nice split of, like, I don't know the lower level of, like, how to run MySQL effectively. And so I don't teach people how to do that, but that's great because that's what PlanetScale does anyway. So we have this nice split, kinda naturally.
Dax:The the broadness is something I've been thinking about so much. I'm so grateful for it. I think, it's easy when your company is in a broad space because then this part of your job, it's very easy to deliver broad value. Like so for us, you know, we build a very specific framework, but we're just in the serverless space. We wanna help people do stuff in a serverless way and help people figure out what the best way to do things is.
Dax:So I get to like talk about anything, like anything related to serverless, whether it's on the more on the front end side, more on the back end side, like that's fun and
Adam:I can kind
Dax:of talk about it. And it's like not hard for me to not be talking about SST every day because our scope is so broad, like we're we're down to like do anything. And MySQL is the same where, you know, there's so much information that's not PlanetScale specific. And that, I find, is the best probably the only form of, like, whatever you wanna call this category of thing, like, when companies have people publicly talking about things, like that's the only form of it that I engage with. The part that drives me crazy is when the company's scope and product is very small and specific, which is fine because a lot of value and opportunity there.
Dax:But then this side of it, like the DevRel side of it, ends up being really weird because they can only ever talk about this very specific thing and they need to talk about it as though it's gonna solve every possible scenario, every possible problem. And like, for me, that just kinda loses authenticity there. And I I think I actually find that's most of it. I would say, like, 90% of companies fall into this category.
Adam:I think, like, they could do what Aaron and PlanetScale are doing in some form. Like, I think of the auth case. Instead of just making a bunch of videos, they're like, here's how this auth service works with Vercel, and here's how it works with whatever. They could just, like, teach people about auth. I mean, right?
Adam:They could do the thing where there's, like, there are a lot of concepts here people are fuzzy on. And the more you understand about auth, the more likely you're like, I don't wanna do this. I wanna pay someone to just do this for me. Right? Could they do that?
Dax:Yeah. I mean, auth is actually a good example because I was actually thinking about it as it's hard to make that broad, but you're right. Because you can just talk about how OAuth works, how OIDC works Yeah. Like the history of it, like why this all makes sense, like why, like, why these standards exist and how they like, there's just so much you can talk about there. But as maybe the part that's gonna be spicy, you can only do that if you're an expert in those things.
Dax:And when PlanetScale hired Aaron, they didn't hire him because he was an expert at he didn't have, like, years of experience doing this role. They hired him because he has a lot of experience with MySQL. And they figured he could learn this other stuff and figure out his own flavor of it. I think that's a much better approach. Like if you are a company doing auth, like make sure you have someone that's just like the guy that can do all the auth stuff.
Dax:So yeah, I think that's maybe where it's hard for like someone with a lot of DevRel experience to like shift into like, one day they're working at a database company, the next day they're working at an off company, the next day you know, you can't become an expert.
Adam:That's the other problem. Yeah. The famous, like, DevRel's for hire, the ones that are on at all the conferences, like, when you don't know what company they work for at the conference they show up at, that's a problem. Like Mhmm. There's just no authenticity there.
Adam:Like, you're shilling a different thing this week. That's just that loses everything that we're talking about, which is the thing that's
Dax:so great about what Aaron's doing at PlantScale.
Adam:Yeah. There are only there are only a few of these roles I could fill, and plant scale is one. I would say Laravel is another. If they needed any evangelism, I could do that. But I would feel, like, I would feel really out over my skis if I were at some other company where it was like, I'm I'm being paid to evangelize something, and I am the junior here.
Adam:Because when like, at PlanetScale or with Laravel, I can talk intelligently about the shortcomings. Like, I know what the trade offs are. And so when somebody's like, hey. I need I need to run a analytics database, I can be like, I don't think MySQL's right for that. Whereas if I were if I were the junior, I was like, yeah.
Adam:Data you said database. I say database. Like, we're talking about the same thing. It's like, oh, boy. We are not talking about the same thing.
Adam:And so, like, if I were if I were to go to some other company, I would feel really insecure, but that's my personality. I think some people don't feel insecure. They just talk like they're the expert. And I'm like, wait. I know I know more than you about this thing, and I know that you're being paid to say this, and you're wrong.
Adam:And that's where I think it's like, oh gosh. This is this is a weird and that's why I said I'm not a part of the dev rel because there's a whole, like, commune I just I teach people how to use MySQL, and I think PlanetScale's a good place to do that.
Adam:Yeah. Yeah. I think there's a lot of room to grow. Hopefully, these people hear these kind of things as constructive criticism. Like, I think there's a lot of room for companies, startups to do better in this area in terms of marketing their products.
Adam:This this whole podcast has been so technical and so, like that we started this without a topic, and it just feels like it's it's had, like, a track. We're going places. We can
Adam:talk about peanut butter and jelly sandwiches if you want.
Adam:Let's do that.
Adam:Let's just I listened to yesterday's episode.
Adam:Yeah. What's your what's your perfect Saturday, Aaron? Let's talk about something that's not tech.
Adam:Yeah. Well, unfortunately, it might be tech anyway. I was I was just on yesterday. I don't know if y'all know Justin Jackson. He has a podcast called Build Your SaaS.
Adam:And Yeah.
Adam:Transistor. We use it for this podcast.
Adam:Yeah. Yeah. Yeah. Exactly. I was on with him yesterday talking about how at this phase in my life, I'm really trying to, like, change the trajectory of my life.
Adam:And so I'm working extremely hard in this era, and I call it, like, my maximum effort era. And it will you know, that era will end at some point. And so right now, my perfect Saturday is I have two kids who just turned two. They're twins. My perfect Saturday right now is usually we wake up, you know, seven, 07:30, get the kids up, do the whole breakfast thing.
Adam:And then I usually take the kids out so that the boss, my wife, has some time just like home alone, you know, just to like Yeah. Sit and stare at the wall and let the brain come down a little bit. So I take the kids out and then, you know, we come back and we usually, like, we usually hang out. This past weekend, we went to the fire truck museum here in Dallas, and the kids lost their freaking minds. It was so much fun.
Adam:They just firetruck ew ew just like all day long. So a lot of time with family. And then when they nap and then in the afternoons, I spend a lot of time just like doing side work. I was telling Justin yesterday, I don't have hobbies. I don't play video games.
Adam:I don't watch sports. I just freaking work, and I'm happy. Like, I like doing that because I'm think I like, I am pursuing my dreams, and this is what I wanna do. And so that's that's my uninspired take for Saturday right now.
Dax:Yeah. This is I mean, we're all gonna sound I guess people are gonna hear this and that again sound like these are toxic Americans.
Adam:Hustle bros.
Dax:Yeah. I love getting work done on the weekend because it feels like a bonus. It feels like cheat because, like, the expectation was zero. So if I get an hour work done on the weekend, it feels like 10 times more important than or more relevant than
Adam:That's exactly how I think about it. Like, as soon as Saturday morning comes around, it's like, anything I get done today and tomorrow, it's just gravy and that's I love it. Love the psychology of there's no pressure. It's like I'm just getting ahead.
Adam:Yeah. That's awesome. And, like, I'm fully aware of the toxic hustle bro thing, and I think I'm trying literally, I'm trying to, like, make my dreams come true. And, like, it just so happens that I'm not a painter, and I'm not an artist, and I'm not I just I happen to be a programmer. And so when I'm, like, when I am out here working and hustling on the thing that I want my life to be, it looks like the exact same thing that I do nine to five for PlanetScale.
Adam:So it feels like, oh, jeez. He just works all the time. But it's like, yeah. I'm trying to change I'm trying to change my life, and I'm I'm not a painter, so I just I just program more. You know?
Adam:Yeah. No. When it's your hobby, that's always been my my problem. It's like, this is what I do for fun. It makes me feel really guilty in my relationship with my wife because every time I'm in my office, I'm having a great time.
Adam:She knows that. She's not having a great time. So it does feel very like, I wish you could live your dream. Mhmm. Okay.
Adam:Now we're getting
Dax:too deep. I don't wanna go in that.
Adam:Never mind.
Adam:Backpuddle. Back to sandwiches. Back to sandwiches.
Adam:Yes. Anything else, please. My wife doesn't she doesn't sorry. On Saturdays, we don't just leave her. She leaves the house.
Adam:Mhmm. So the
Adam:whole weekend, she was gone, and it's just me and the boys at the house. Smart.
Dax:Well, I have a dog and two cats, so that's something.
Adam:You just do whatever
Dax:you want
Adam:all the time. That's amazing.
Adam:Oh, just soak it up, Dex.
Adam:Yeah. For real.
Adam:If you have if you plan to have kids and not like I mean, I love my kids. They're the best thing in the world. But it's just life is so different before and after kids that if I could go back, I would have viewed that time before we had kids so differently. We just had all the time in the world to do whatever we wanted. Mhmm.
Adam:And you don't realize it.
Dax:There's literally everyone in my life is telling me this, so I don't I don't think I'll take it for granted.
Adam:You're not gonna miss it. Yeah. Okay. That makes sense.
Dax:Everyone is saying the exact same thing. So
Adam:Okay. And I just I just wanna hear. Just give me just give me two minutes on on Laravel. I know that we're Finland or Sweden or whatever, but, like, tell me how much you loved it.
Adam:So I just I can't believe, like, there's not more people in the JavaScript community talking about it or, like, that have had any brush ins with it. I've seen people on Twitter now say, like, yeah, I see the same stuff. I see people happy, and I just have never tried. Like, why haven't we tried? It's just, like, I know PHP is a whole another thing I have to learn, but I've done it with so many other languages.
Adam:Why would I be hesitant to learn PHP to get in on this Laravel thing?
Dax:I don't know, man. We've seen you try to learn Elixir.
Adam:Okay. Okay. Just go go ahead, guys. Get it
Dax:all out.
Adam:Have you learned other languages? Have I? I've done all kinds of stuff, probably.
Dax:I would say so. Python?
Adam:Githon? Okay. I'm gonna stop.
Adam:I saw
Dax:you posted the other day you got started in Githon? That was just what they
Adam:in college. That was the first thing they taught us. It was like, here, we're gonna teach you a a weird if Python and Java had a baby language. That's your your first exposure to programming.
Dax:And you stuck with it.
Adam:No. No. I just did it in college. Like, that was No.
Dax:I'm saying, like, you didn't give up on programming right there.
Adam:Oh, yeah. Yeah. No. Yeah. I kept I kept with the programming thing.
Adam:Yeah. So Laravel, the the starter project, though, is just incredible. The and it just the cohesiveness of, like, going through the Laravel getting started from laravel.com, the getting started, it's just like there's an answer for all the things, and you don't feel like you have to make 50 decisions for every little piece of it. It's like, yeah, you gotta pick a database and there's a few options, but it's like it holds your hand through all of it. All of that's great.
Adam:I know a lot of technologies have that, but there's something different with once I did the Jetpack thing with Laravel and I saw the project, it's very clear it's so different so different from the JavaScript ecosystem. One, like, the the project is not, like, optimized for how few files and how little code can there be. It's like a ton of stuff, but, like, it's I got a lot of functionality out of the box. I don't know. I've said a lot of the same things in, like, three different formats.
Adam:So if you're hearing this out of my mouth for the third time, I'm sorry. I'm just very excited. I don't know. I wanna play with it more.
Dax:Yeah. I mean, like, that cohesiveness you felt, I definitely don't take that for granted. It's really hard to pull that off, like, all the way from, like, every part of it feeling the same, like it's one unit as opposed to a bunch of things glued together. It it is really hard to do that. It's really impressive when something can do that.
Adam:I haven't deployed it yet. Like, I can't wait to use Vapor, and I can't wait to play with all these other there's just so many different Laravel products and knowing that they're all kind of, like, under one roof and they have some that cohesiveness. The docs are amazing. I love the the comments, the lore around, like, his his three line comments that are all, like, staggered. It's true.
Adam:They're all over the place. It's incredible. The attention to detail, all of it. I'm just I'm a big fan.
Adam:Yeah. I will say I was, you know, listening while I was getting my coffee before I came on. I think the benevolent dictator plays a huge role. I also think the fact that Laravel is itself a company. So it's like if DHH didn't have Basecamp and DHH and thirty seven Signal spent all of their time, energy, and money on rails, I feel like it would be closer to Laravel.
Adam:But Laravel is a company that has, like, five or six employees, and they have SaaS products. So they are using Laravel to build full on SaaS products, and they're spending all of their time and all of their money to make Laravel, the ecosystem, better for Laravel developers. And so that's that's where you end up with things like Vapor and Forge and Horizon and all that stuff is because they were building a SaaS and we're like, man, running queues sucks. What if we built a queue management package? And they're like, okay.
Adam:We can do that and open source it. And it makes sense to, like, tightly integrate it because they're Laravel LLC. Of course, it's gonna be integrated with Laravel. So I think that is part of the secret sauce is Taylor this is gonna sound mean. Taylor has nothing else.
Adam:Taylor has Laravel. Like, he has Laravel. He's not running base camp. He's not running, you know, high rise or whatever. He's running Laravel.
Adam:And then so he just just focuses on that and driving the Lambo. So I'll leave it there.
Dax:Yeah. I I I love that model. Like, we obviously at SST, that's the exact same model we're trying to recreate. Like, just having it like, we like it's it's proven out there so we can, like, trust that we can it makes sense. But, yeah, everything about it is awesome.
Dax:Like, how small the company can stay and, like, how much impact they can have despite that. Like, it's it clicks with everything that we want as a team.
Adam:Aaron, thank you so much for coming on. We didn't even say, like, Aaron Francis. This is Aaron Francis joining us from PlanetScale. We just said, like, hey, Aaron.
Adam:Yeah. That's okay.
Adam:It's gonna be kind of
Dax:a weird transition in the middle of the podcast. Well, you just said it. You just said it. I just said it.
Adam:Yeah. Thanks for having me on. I'm glad I'm glad I was chatting in the Twitch and y'all could pull me on. I really appreciate being here.
Adam:Yeah. It was great to have you. Alright, Dax. Anything we wanna say before we wrap this up?
Dax:Nope. That's all.
Adam:Nope. That's all. We never have anything at the end. Goodbye.
Creators and Guests

