Hello everybody, and welcome to another exciting episode of JavaScript jabber Z on Today's Toys. I've always wanted to say the Z, but I refrain just letting loose. Today today we have with us Steve Yo.
I'm one of the I guess I'm one of the zombies in JavaScript jabber Z. Right, isn't that World war Z? Is that what you're going for?
Well, it's more like vegeta and gohan but close. Sorry, they're they're kind of undead. They are undead, they are technically undead. They are technically zombies. Uh, I am, I'm gonna be your your what No? I host goes last, okay, and then Kyle ed get a pie.
Hello, Hello, everyone, got to be back and I am your host today A j O'Neill yo yo yo, coming at you from Oh my goodness. I bought this stinky thing fly catcher thing, and it's stinking up the whole shed and I've got to have the shed door open a gen.
But does it catch flies?
You know that that?
I don't know, But the flies haven't been bugging me, so I think I think it's uh, it's working. And obviously I'm not really a gen.
I just.
I just I've been hooked on too much primagen lately, and so I you know, not mock imitation is the serious form thought it anyway. Okay, so let's get into this. First question I have for you is for those of you that don't know, no even before that you're now get if i X. What was why did you change from getti fi to get if i X.
So I had I still have the getafy account, and I just sort of I did a switcheroo where I created a new account and then swapped the two user names so that the followers that used to be on gettifi are now on getifi X. But there is still a getify account, so that's not it's reserved so that nobody else is using it. What actually happened was employment. A couple of years ago. The company that I was working for was concerned that I was that I needed to make sure to represent them and so or be
clear in my social media representation. So at that time I switched my Twitter handle from getifi to getifi at and then the name of that company. And then I worked there for ten months or something like that, and then I was not working there and I was going to switch back to just straight up Getify, but then we had already had the rename of Twitter to X and I was like, oh, well, let's go with this.
So I just went back to Getifi X. But again I still have that other Getifi account, so one or the other, but I mean the active one that I'm using is the getifi X account.
Okay, cool? And I think that's how a lot of people know you. But for those that don't know you, how did you get to be so famous? And why don't they know you?
Why? Why? Why? Well, so if we go back to a long, long time ago, in a land far away mid to late two thousands, like two thousand and seven, eight nine, that timeframe, that was kind of the first rise of JavaScript. We'd had frameworks like MuTools and Dojo, and then j Querry came along and Doug Crockford wrote a book in two thousand and eight called JavaScript The Good Parts, and we began to see kind of a
renaissance re imagining of JavaScript around that time. I had made an earlier bet, many years before that, that I was going to want to be an expert in JavaScript because people are going to want expertise, And that was
going to be a good career path. That turned out to be a good bet, But I made that early bet on JavaScript started focusing on that, and so by that time that JavaScript started to take over in the more public sense, and we started to have you know, JS comp I remember in two thousand and nine the first JAS comf in DC. We started to have conferences around JavaScript, and there started to be job descriptions around JavaScript,
and I had some pretty strong thoughts. Having already spent quite a bit of time with the language, I had some pretty strong thoughts about it, so I started trying to participate. The first thing I was known for was a dynamic scriptloader called lab jas that came out in early two thousand and nine and got pretty big. Was used on quite a few big sites like Twitter and Vimeo and Zappos and a few others, and so that's
kind of the first way that people knew me. You fast forward another couple of years and all the fame of a tiny two kilobyte library had faded. I'm saying that tongue in cheek, but that had faded. I had started to do some conference talks around various JavaScript and performance aspects, but I really felt like, I had some things I wanted to say about the language itself, and I started writing the you Don't Know JS books, and
that is how most people have heard of me. Is the sixth volume set, the sixth volume of the first edition. Second edition is a little more complicated in its status and length. But I came back, So the first edition was released in twenty fourteen and twenty fifteen. Then I came back in twenty twenty and started the second edition, and those are kind of on the shelf now, not really actively being developed. But that's yeah, two editions of
a six book series. Basically, okay, cool, all right, Yeah, and say I should say specifically just so that people are aware if you haven't heard me say this before the title of the book series obviously has several different layers of meeting. There's obviously a bit of a tongue in cheek kind of joke about the old you Don't Know Jack trivia game and some other things like that, But it was never intended to be an insulting name
the way many people took it. It was actually intended to be a challenge to approach JavaScript with a more open mind and a more active I'm going to always be learning kind of a thing, which is why the second edition added the word yet to it, you don't know JS yet, because I wanted to make it even more clear that the point of this was actually to kind of be hopeful and to spur people to learn the language more deeply.
Yeah. I I totally understood it when it came out because that that I think they just transitioned that to a mobile slash TV game where you could scan a QR code or something. So I totally understood it. But I could also see as the you know, Twitter sphere has boomed, a lot of the idioms, the English idioms have gone awry, you know that things have opened up a lot more so I okay, all right, Yeah.
And then it was a response to again two thousand and eight and two thousand and nine, this Cambrian explosion of JavaScript around libraries. Not a lot of people wanted to learn JavaScript the language. Everybody wanted somebody's library to
do it for them. It sounds a lot like today, actually, But what we had at the time was the JavaScript the Good Parts book, and that book essentially said, hey, I Doug Crockford have surveyed the whole JavaScript language and I've figured out that most of it sucks, but here's this tiny little subset that's really good, and you should
learn that. And I really wrote my book series and then the subsequent courses and everything else I've done since as a response to that book set to say I don't think you should learn only a small subset that one I opinionatedly, you know, put a linter for I think you should learn all of the parts of javas.
That's it's really unfortunate that you're so wrong there, But I guess we all have our opinions.
Say, man, I've been I've been wronged a lot longer than you were in the industry. I've been around a long time, so I'm all right with that.
Yeah, uh okay. So one of the things that we have you on for today was I saw some tweet that caught my eye about some local first stuff and then later some pass key stuff, and so let's just transition over into talking about that and what like what.
And it seems it seems really timely. I think when I first saw the tweet, between the time I saw the tweet and we got you scheduled, like it was, it was something that was you know, in the nicheness of its hype cycle, and now with all these with DHH making a stir, I think that some of this is actually maybe Local first itself is not on the rise yet, but I think that it's going to lead
to being on the rises. People are talking about performance and five dollars a month BPSS and whatnot, So yeah, it is.
Yeah, what I I can kind of set the scene for everyone around local first. A small little consulting company named Ink and Switch back in I think either twenty eighteen or twenty nineteen, they coined the term local first and they put out this little manifest. Though it's easy to google for the seven principles of local first development,
I'm not going to go through all of those. You can read them yourself if you're interested, but I will kind of summarize the one big point of local first, and we'll try to distinguish that because there's a lot of other things that people think it is or isn't. But the main point of local first was to kind of tackle head on this very clear trend that has moved nearly the entire web and in fact most of
software around it, towards a cloud centric model. And the tackling trying to go out this head first is to say that one of the big problems with a cloud centric model for architecture is that you make that cloud required, and the cloud in this very big amorphos sense, is not nearly as ubiquitously guaranteed for every user as we might like to believe. There are a variety of reasons why my version of an app that's on my device and the thing that it needs to talk to up
in the cloud might not be able to talk. One, I might have spotty or no internet. Two, there could be some sort of large Internet wide or you know, service wide outage in a cloud. Routers, dns. We see those things. Yeah, we see these things happen, and I think I personally resonate with There's actually probably almost half of the Internet's users, at least a third to a half of the Internet's users, live in parts of the world where both power and internet are not guaranteed unlimited assets.
These are resources that are quite constrained, they're metered, they cost a lot, and they basically can't afford in one way or another to be constantly cloud connected and constantly sending all of the data back and forth. So what Local First did was it came along and said, the way to start tackling this one one peg of this is to put data. The source of authority for data should be on a user's device. And by data, we were specifically talking about the data that is relevant to
or matters to that user. We're not saying that, you know, all trillion gigabytes of Amazon's database needs to be on everybody's phone, but the parts of that that they need should be on their device. And most importantly, I would extend that to say, the stuff that I create, or the stuff that is created about me, that's the stuff that's relevant to me, and that stuff, the source of authority for that data should be on the user's device.
That does not foreclose having cloud servers and having synchronization and all of that, but it shifts the whole mindset to we start with the user's device and we build up, we progressively enhance from there, rather than starting with the assumption that everything is cloud based and if you don't have connection to the cloud, you're dead in the water.
Yeah. I'll give you a little more different example than that. I did some work for a form Erner platform called form I own number of years ago, and I've had the founder on here a couple of times, and one of the use cases he gives for local first isn't necessarily you know, speed or bandwidth available ability, and their platform had ability built in where you could do everything locally on your device and then when you connect to
a server and sync up. And the example that Travis gave was a scuba diving company who would be out, you know, they'd be out on a boat out in the water obviously where you scuba dive, unless you're in a pool, and you know, you want to be able to collect all your customers information and so on and get it in there, and then when you get back to shore or back within Wi Fi reach or sell reach or whatever your technology is, then you can sync up with your server and get everything simpty sync up
that way. So just another scenario where local firsts would definitely come into play.
Yeah, definitely, the the realities of the world being experienced, the computing world being experienced in way more places than in a fixed office space with a fat Internet pipe that you're connected to the world is increasingly more mobile. That's not a you know, unusual thing to assert, but it's increasingly more mobile and increasingly less online. Actually, there's way more of the world that's happening in that spotty
part of the Internet. And it's been said before that spotty or intermittent Internet is actually a much more challenging problem, both for developers and users than no Internet at all. And so I think we definitely we need to embrace the idea that for the Web to truly reach all eight billion people in the world, we have to think about the residency of data being much closer to them.
We did have, you know, a brief few years where we said, well, if we just put more servers in more places, and if we hang giant balloons up in the air, and if we have satellite internet like, we'll just we'll blanket the world with Internet and that'll be the fix. That's the you know, techno billionaire's perspective on things. But I think builders of the web need to embrace this local first principle of making the server, making the
cloud optional as opposed to required. And it does bring in a whole It solves a bunch of things, but it brings in a different set of problems, and you mentioned those, the synchronization questions and the whole concept of synchronization data structures like CRDT. You know that that's now a big thing of discussion where that used to just be a niche academic topic, but we have got dozens of companies that are trying to build commercial solutions around
sophisticated synchronization mechanisms. When you have data on a device that needs to synchronize with other devices and with cloud servers.
So how much does that does the local first approach? I guess it really doesn't. Maybe it does. Exascer debate a little bit. Is the performance issue, So you know, obviously the issue with JavaScript versus a server side language is that since it's running the browser, that code has to be all downloaded to your browser. And so there's the ongoing issues that developers face with trying to make their code, whether it's using a framework or not, as
minimal as possible. So that for your third world countries, for your places where there's a poor connection, maybe only three G instead of five G, et cetera, you've got less to download.
So now.
You're adding a bunch more data to what you're downloading because you're stashing it locally. So that's going to make I guess that would make your on device performance when it's actually using the code faster because you're not having to make your API calls to your server. But at the same time then you've got to sync all that up.
So it seems, as I ramble on here, I guess you could say it's sort of minimizing that and making it less of an issue because you don't have all the data flowing back and forth as much as you do with JavaScript. Or is that a join issue?
Generally speaking, I think a local first app reduces the amount of data in totality that needs to go back and forth across the wire, but it may very well in fact frontload more of that data transfer, especially if you're synchronizing an existing user history onto a new device. There definitely might be more download, not only download of
the application itself. Because that's another thing, like if I have the app, I really should have a continuing to work app even if I have no internet, right That's that's the offline first part of this, which is only part of the umbrella. But I should have an app that continues to function even if the internet connection to the web server is down or you know, non existent because they went out of business. You know, I should
be able to keep using that. So there very well might be a trade off here where the initial experience is a little bit more like an app install experience
that is not instant on. And I personally think that would be better for the web to go back to not trying to fake the instant on experience and instead embrace the idea that I'm not websites, but if I'm choosing to install an app, it really should be a thing that I'm willing to wait three, five, ten, twenty seconds whatever it takes to get the whole app and
whatever data I need synchronized onto my device. You know, you could take a page out of Google's book, Google Crumb's book and put little you know, dinosaur jumping games in there while you're waiting. I mean, we can go back to the days where we had you know, better that better experiences than just those dumb spinners that can engage people and let them do things. But another point to this is that a local first experience should work even if if you don't have even if you don't
yet have your data. So honestly, maybe having an instant on experience as soon as you get the code, you should be able to start creating data, even if all of the data that it's going to merge with has not yet downloaded. So I think there's a lot of complexity in terms of those trade offs, but it is being intentional about saying that users should be able once they have a piece of data and they have an app to work on that data, they should be able to continue to do what that code and data enabled
no matter what from here on forward. My best use case to describe this, it's just one personally, but when we think about bank account apps, generally people think about bank accounts. Is the only use case is I want to know right now, instantaneously what is my current available balance in my bank account. But there's a tremendous amount of information in my bank account that has nothing to do with what the latest thing that I bought at the grocery stores. And that data is on my device.
I can see it, I can interact with it, I can search it. Except when my internet goes away, Now all of that's completely gone. I can't go back and look at what I bought at the grocery store last week. Because they make the assumption when they build the banking app that the only way that I want to use this app is to see current incident. If they can't give me that, they don't give me anything, well, that's bonkers.
I think that's my data, very clearly my data, and I have an app that's able to render and work with that data. So a local first app would say you can continue to look at all of your previous bank account transactions and read them and search them and categorize them and do whatever you want even if you don't have an Internet connection to look at your live
account balance. That's I think what we're missing is that we just assume that live everything is the only use case that matters, when actually there's a ton of use cases that don't require that live connection.
All right, So I'm going to push back on this, right and I actually like morally, morally I agree with you, but practically we have to look at what, you know, what the reality of the situation is. So most most web businesses are not profitable businesses. They are growth businesses.
The way that people make money is that for the first ten years or so, they just hand off the business from one investor to another as they go through seed round this A B C, D E, F G H I J K lemono, you know, and then and then after thirteen billion dollars, maybe maybe they become profitable, but most likely they just they just flyn So why why, like what what's why would anybody care about, you know, the people in these spotty internet areas because you know,
they have no money to pay for the product. So in terms of growth users, like, yeah, I guess you could. You could make an argument for say, yeah, there's a lot of people out there with spotty internet. You could get them onboarded as users if you're the only one that's actually trying to onboard these users, But then you can never count them in a metric as like potential customers.
So yeah, I totally disagree with that. I think that's a complete false dichotomy that people with spotty internet have no money. There's lots of lots of use cases that we can imagine you were referring. You know, we've talked a little while ago about the diving company that's out that's that's a high end hobby that people are spending a whole lot of money on and they just happen to be in an area where they don't have Internet at that moment where they're collecting and experiencing the data.
There's use cases around uh, construction and survey companies that are out in the field and they're nowhere near where Internet is. They're collecting tons of really useful and very expensive data that they need to sell to other people or synchronize with their company. But you know, we don't
even have to get into the big companies. There are tons, literally millions and millions of people in the world, tens of millions of people of the world who are a one man, one woman business, a one person business, uh. The fish farmer in somewhere rural. They may be collecting hundreds of thousands of dollars worth of product that they're going to take to market. They are very much somebody
that you can monetize and treat as a customer. But when they're out there collecting all of those fish and they're not yet at the market with it, they're not somebody who has Internet, but they still absolutely have tons of potential and should be treated as a valuable customer.
And that's not to even get into the larger moral question of we ought to treat everybody's access to the Internet as an important human right I believe, as opposed to only a right that comes if you're willing to pay for it.
But I don't know that I think about a yeah, sorry, it's all right, go ahead. I was just saying, I disagree that it's a human right. It's something that's very modern. It's something that's only existed for literally decades out of thousands of years of human history. So to call it a human right is on a like that's that's a bridge too far from me. But I agree, like I would love a world that is like what you're saying.
I get frustrated all the time. I mean, living here in Utah, things have gotten a lot better in the past ten years. But it used to be sometimes when I was going between cities because there's these little cities like Mapleton or Pleasant Grove is kind of booming, but they were really small, you know, and so I'd be going going between cities and not having phone, like really
good phone reception back when I was in college. Now now it's you know, because of all the tech booms that have happened, like all the past years, are being brought up and turned into business parks. A lot them are just sitting there empty, but they're there nonetheless, and and yeah, so it's it's a it's a bit better.
So I like that.
Idea, but I just I think it's a hard sell to talk with someone and say, hey, if you're if you're actually a legitimate startup trying to be profitable, how are you going to spend all this extra time to do something that's not an industry standard. There is no playbook for it, which I guess maybe that's part of what you're trying to fix. And and these are one off experiences from you know, the one percent of your customers. And let's say that we agree these are actually going
to be customers, not users. But you know they're the one percenters, or it's the one time they're out there, you know they don't have another option anywhere. They're really going to be that upset that, Okay, while they're skydiving, they can't use your app. I mean, maybe it's not safe to use the Apple skydiving.
There's another angle that I think we should point out, which is there's play of justification to attract businesses to create apps in this way that really has nothing to do with whether they ever charge their user anything, right, there's tons of apps out there that never charge a penny to any of their customers. They're just selling their data. They're selling them advertising or whatever. And there's plenty of reasons why those companies can benefit from local first apps.
One of the biggest reasons is that if you long term reduce the amount of churn of data going back and forth across the wire. In fact, potentially you might even completely eliminate the need for these big centralized stores of your data. You drastically reduce the footprint that you need in the cloud, perhaps even to zero, but certainly significantly less. Are there things that you'll still always do in the cloud. Yeah, you'll host giant video files and
other CDN things. You'll do really complex compute out in the cloud with AI training. But there's a ton of the generalized CRUD stuff that we do out in the cloud right now because it seems easiest to do it there, and we pay tons of money to those cloud providers to do that. There's a lot of that that can actually be shifted to the user's devices. We see potential growth in peer to peer device communications through various different protocols, both web and native that can reduce the stress and
the footprint that you need in the cloud. And like we were mentioning in the in the pre show, people like DHH you know, and the thirty seven signals folks, and the things that they're doing, they're not they're not bastions of those, you know, they're not leaders in the local first community per se. But what they are saying is, hey, is the cloud really required? Or can the cloud actually
be optional? Are there other architectures there where we can move back down to You have an app, you own the app, you host the app, and you host your data. And I think that's going to lead to companies starting to ask those questions, Wait a minute, do I really need to pay hundreds or thousands or tens of thousands of dollars to a cloud provider when I could offload a lot, if not all, at least a lot of what I was doing and reduce the cost. I think
there's a huge business benefit to embracing local first. And just like with any other movement, you said, true, it's early, it's nascent, there's not a lot of standard, but that offers huge upside potential for the companies that decide to be early movers in that space, and it's always been the case that early movers have had huge upside potential. Yes, huge risk, but huge upside potential. It comes with the.
Okay, So one thing that I think is pretty well established, and I would love to be corrected on this, but I think it's pretty well established that state management is more difficult on the front end than it is on the back end. Like there's just that it's a higher level of abstraction. There's more thing that you're not in control of that can go wrong. State management on the
front end is a nightmare. And React came in and promised, like, you don't have to worry about state management anymore because we're just gonna re render the whole page. And we've seen how that's gone. You know, it's not been like this shining star of Oh, state Management's not a problem anymore. It's been another game of hot potato where well, actually we do need state management, but it's going to live in this this component now, Actually it's gonna live in
this library. Actually we're gonna put it back on the server.
Actually we're gonna stream it down to the client. And you know, it seems like every six months to year and a half sixty eighteen months, React completely gets like a whole fundamental redesign, and then instead of calling it some other framework, they just call it React seventeen or eighteen years ye, right, which is just like one of the most that's like the best brand thing that has ever happened in the universe in terms of front end frameworks.
Release a completely different framework that shares almost none of the principles of the previous one other than the syntax, and call it the same thing.
But with that said, it's working companies that are behind React.
How are people supposed to They can't even figure out what they're doing right now, right like, they can't even figure out the state management problems that they have right now? How are they going to handle all the additional state management problems of local first? And maybe there's a snuck premise there that needs to be disbanded. But well, yeah,
so here's what I would say. First of all, a tremendous amount, not all, but a tremendous amount of the current complexity in modern front ends is directly related to the choice that we made to centralize architecture on a cloud first model and then also try to tell everybody, even though all of that data and all of that code lives not on your device but out in the you know, in the ether somewhere, we're going to make it look as if it's as close to instant on
as possible. Those two things have conspired together to create an entire, multi billion dollar industry of web performance optimization and literally dozens and dozens of these complexities that you're talking about, most recently the shift back to server side components and server side blah blah blah whatever. Most of that I think is chosen complexity, not necessary complexity, but it's been a choice that we've been continuing down that route.
And Local First says, actually much of that, not all of it, but much of that is not actually necessary. If the code is resident on somebody's device, If we build an experience where it's very durable and very stable instead of it's constantly changing every five minutes on every page, load a durable and stable experience, and we put the data where somebody needs it to reduce the amount of
the need of all of that back and forth. What what you're basically doing is you're saying all of the complexity that we have around eventual consistency, which is I think one of the worst terms we ever invented as technologists because there's absolutely no consistency anywhere. It's a total farce. It's a never consistency model.
If you think about what is the source of authority for Amazon's e commerce database, there are literally hundreds of thousands of sources of authority for Amazon's database. There is no one snapshot that says this is the true source of truth for what's going on with Amazon as a business. So what we're saying is they're already have the built in complexity of managing effectively with crdts, very bespoke internal
to their business logic and their cloud back ends. They're already having to deal with massive amounts of complexity of all of that state management. And I think I think
that's the hidden complexity that you weren't talking about. We have all this front end complexity, but the balance of that is all of that hidden complexity in our back ends, and we have tons of giant frameworks and messaging systems and all that that try to manage all that stuff of database architecture complexity with replication and all of that, and basically local firstus saying we could eliminate most of that if we stopped trying to pretend that the only
way for this experience to happen is to require a round trip. We can have round trips when we need them, but we don't have to require that to gate the
user's experience. We can install an experience for them. We can put data there that they need most frequently, and we can put the logic there that makes that data do what that user expects and stores whatever they've changed, and then in the background synchronizes that to wherever it needs, whether that's peer to peer to another device, or whether it's through a traditional sending some synchronized data back up to a cloud server, which is what many of them
are doing. But we're just simply saying that user does not have any anywhere near that amount of complexity. So this is a very different way of building applications. Does it have its own complexity, of course it does. Nobody's saying this is the silver bullet and it's just two lines of code and it's all done. But I actually think if we were if we went forward five years and then we're to take a really good local first app and there are several out there, linear and some
of those others. If we were to take their code bases and compare them to the equivalent cloud centric code bases, I really do, genuinely believe that the overall complexity, the overall number of moving parts goes down when you embrace these principles.
Okay, I I would love to agree with you. I'd need to see how, because again I'm just hung up on Fundamentally, caching on the front end is front end people are asked to do too much. They're expected to do CSS, which is essentially a design mindset, or they're copying design. They're either creating or copying design in CSS. They're expected to understand the DOM which is very engineer oriented data internals to event loops in a browser and
rendering processes. And they're expected to also be a programmer in JavaScript, where they need to have developed the acumen for writing programs. And these three things are literally they're all opposed to each other. CSS has nothing to do with programming being Honing your skills at CSS means that you have to give up honing your skills somewhere else,
like in programming JavaScript. Honing your skills and your understanding of browser mechanics and eventful paints and uh, the dom APIs you know all that C plus plus context switching. You know that that's that's systems level programming and and and that's very different from application level programming. And so, you know, like front end developers are just being asked to do too much, and I think that's why they're failing. And asking them to then also be good at data
transformations and etl. I just I think it's too much
because they're already burdened. Either we need to split up and say you're a front end programmer and you're a front end designer, or your front end programmer and you're a front end uh layout manager or you know whatever, so that they can actually focus and become good at those areas of skill and really be excellent, or or we have to somehow provide something to reduce the complexity, which again I think is the allure of React, because it's kind of saying, Okay, we're going to take care
of the CSS, and we're going to take care of the the the DOM life cycle, and we're going to take care of obscuring away that you know, the JavaScript for this this new the the r S R R S X now what jas X language, you know, So there's it just seems like there's a lot there, and I'm very I want it to happen. I'm just very skeptical. Show me the path. How do we how do we add more data manipulation on someone's plate and make their life simpler.
So what I think is really going to happen is the providers that are currently in this the local first space, that are trying to push for uh these synchronization engines and these these rather sophisticated uh CRDT mechanisms for you know, there's there's actually a lot more to It's not simply you know, last change winds. There's a whole lot of complexity about merging change, the live changing system across device and all of that, and there's a lot of different
trade offs that are being made. And so the people that are designing those engines are starting, at least from what I can see, I'm talking about things like replicash and a few others that are out there. So there's
some things that you can google. There's a number of solutions out there in the local first space and what they what many of them that I've talked to or heard from are saying is we do actually have quite a bit of industry experience around building the back end logic that knows how to talk to rms that are
backed by relational databases. So if we can build the replication logic and the the merging logic into those types of abstractions, we don't have to get people to learn an entirely new way of programming that type of what we would call back end logic. And I'm actually I'm using the air quotes around back end because I'm going to self service myself here for a minute and call back to a term that I invented back in two
thousand and nine and twenty ten called middle end. What sits between the front end and the back end is the middle end. The way I originally conceived of the middle end was it was all the plumbing in the bottom ten percent of your front end application and all of the plumbing that was in the top ten percent
on your server. And what makes those two things work together and talk together, whether that be templating or casing, or headers or session management or any of the data formatting, validation, all that stuff. That's what I call the middle end. But what I think is going to happen with local first is that there will in fact be a specialty.
Whether we call it middle end and I get any credit for it remains to be seen, but I think there will be a specialty for the back of the front developer or the middle end developer who builds a significant portion of the back end of that application. They move it out of what they would traditionally host in a cloud server and they put it into the app, and they build it around these abstractions like being able
to make relational database queries in an app. And even if that, you know, like you have a SEQL light in the in the client, because we can now do that, we can with the advent of WLASM, we can do all kinds of things, so we can literally have a
seql light client in the app. And that's what a lot of these companies are doing is basically saying, let's layer an o RM on top of an actual database so that I'm writing data into a sequel light on the device, and I'm also replicating those those right changes in the data off to a relational, you know, database that may or may not be seqal light up in a cloud server, but they're using that ORM layer to do this. I think a lot of that complexity that
you're worried about will be built around that. That's my prediction, and I think that there will be people who will really like that because they feel really comfortable in that, and now they'll be able to move a lot of those same skills into the back of the front or the middle end development in local first. I think there will be some people who will hate that and say SQL sucks and relational databases suck and we shouldn't use that.
But that's why we're going to have lots of different options, right, So you may have a you know, a group of providers that choose to build that around relational databases, and others that are going to make something that's going to look a little bit more like graph ql, a little bit more free form. I think we'll see that and a half dozen others that I haven't conceived of yet. But I don't think you will ask app developers to start becoming experts on the deep academic theory around CRDT.
I think that's what these providers are going to solve. They're getting close to solving, and they're working on hard trying to solve.
So you touched on one issue there, and that's the term of the local data storage. You know, I think the default at least one I always here thrown around versus SQL light or rescue light, you know, because this tool that has been around forever very very easy to use to embed within an application and store local data. So my question is do you see tooling around other kinds of databases that can be used locally. So one that comes to mind is for a document database such
as Mango dB. If somebody were to use that on the back end, I could see how that could be very difficult to convert between a sequl light structure on the local and then a Mango database on the back end.
You know, I could probably wouldn't recommend that.
I would not recommend it either considering how I work with the Mango every day. That would be hellish.
So I'd say the things that I see right now in the client space are sequel Light and post Grace. There's a post Grace Light client that's been compiled a wows them. You can use the Postgrace SQL flavor if you like, or the seql Light seql flavor if you like, but those are the two major players for highly structured data. I would argue that if you need unstructured, non relational data storage, we already have that in the form of
index dB and json objects and things like that. We don't need a Mango dbo RM on top of Jason objects if that, if you don't need the relational so I think the reason why we get big powerful engines like a sequel Light or post Grace Light being compiled to the browser is for all that relational stuff that's pretty hard for people to go and invent themselves. But if you're really talking about uh kind of document level storage stuff, there's already actually a pretty good and solid
way of storing data. We have not only the index dB, but a lot of people don't realize we actually have fully cross browser the Origin Private File System, where you can create files and store arbitrary data and both. In truth, it is absolutely true. I've written a library around it, so it's absolutely true. I'm act check this, Okay, please do if you If you get both index dB and OPFs the Origin Private Final System, both of those have essentially up to about two thirds of the device's disc
space that the browser makes available to them. So in the old days when we had like local storage and it was limited to five megabytes, and nobody could even imagine doing anything like, you know, like a real apps
back end on those things. Now that we have index dB and OPFs, and both of them have very solid access to disk space, and I just we're going to see a big explosion of people building real data storage in the client as opposed to kind of stuffing some stuff in local storage the way it used to be. And I think a lot of people are not didn't realize that that happened. But OPFs is absolutely already happened.
There's there are complexities around it, but you can work around those with libraries, which again that's that's what I've worked.
So let's touch on index dB real quick, just by way of explanation, since I always like to or don't like to assume that everybody knows when we're talking about a tool. So you know, just looking at the u NDM page on index it sounds like it is now is the actual storage the files is that in the browser or just stashed locally on your OS somewhere on your device.
So index dB, again fully cross browser has been around for you know, almost ten or fifteen years now, so it's it's definitely a reliable system. It's not new like OPFs, it's been around for a long long time. So index dB is kind of like back in the day, we had both index dB and we had web sql. They were both trying to vie for the structured data storage
in the client model. Index dB has a whole bunch of complexity around it, and web sql was like this higher level, you know, SQL light type of interface, and a lot of people said, I don't I don't really like the indexdb. So there was this favoring of web sql in the early days, but there were some browsers that basically said, we're absolutely not going to ever do a web sql like Firefox, We're not doing web sql,
We're only doing index dB. And so whether it was the better of the two options is kind of irrelevant because Browser's just sort of decided for us that the thing that we got was index dB, and everybody then agreed and just did it. Now. Indexdb again pretty low level API, a lot of complexity around, you know, transactions and other things like that. I don't even use index dB in that sense. There's a library called index dB keyval, IDB DASH keyval that creates a literal key value storage
abstraction on top of Indexdbuh. It's got millions of downloads, it's it's hugely popular. Earlier, I've never dealt with indexdb other than to use that library, so I look at indexdb as a really powerful key value store.
Do you know how it compares to local Forage.
I do know some of the history behind local Forage, but the most important thing to point out about Local Forage is that, as far as I'm aware, it's no longer maintained, IDB q val is actually actively maintained. It's Jake Archibald that built that library. It's an actively maintained library and still gets a lot of usage. Friend, local Forage hasn't hasn't been maintained for quite a while, I think.
So, Okay, yeah, I've noticed that there's some Yeah, there's some issues there. Okay, I'll have to to try this out next time.
So in any case, that that that explains what index dB is been around a long time, stabilized, and there are a variety of libraries Local Forage, IDB, KVAL and others that make working with index dB not as painful
as its native API is. A lot of people use index DV for that, and I would I would make the case that index dB should be the default client data storage over local storage, not only because it has larger disk space access, but also because nxdb can actually be accessed from workers and done asynchronously, where local storage and session storage cannot be accessed from worker thronts, So that makes it a more flexible data storage.
Now with OPFs, the og I got to fact check you. Okay, I do not see baseline support for OPFs. Okay.
So there's a lot of complexity around OPFs. There's a narrow layer that we're drawing here. OPFs has a variety of ways that people can envision using it. I'm going to talk about it in ways where you want to access existing files on the user's system, like something off of their desktop. There's that usage of OPFs, and that does not have baseline support. It might not ever because
there's still a lot of security considerations around it. But there's the Virtual Private file System of OPFs, which is a reserved area of disk space that you can read and write files into and its origin locked. That actually got much more widespread consensus among the browser vendors, but
there was performance concerns around it. So people wanted an OPFs interface where they could do easy kind of synchronous reads and writes from it, and there were performance concerns about you can't do synchronous reads and writes on the main thread because that could block things and whatever, and so what we got was this bifurcation where there was an asynchronous API that you could use from the main thread, and that one also has not yet achieved this sort
of baseline parody because notably Safari does not support that main thread asynchronous API. However, all of the browsers did implement the synchronous read and write from workers, willing to take on the complexity of burying your storage logic inside of a worker. You actually can do OPFs with synchronous reads and rites across all the major browsers. I would argue that is actually baseline in that subset.
That's well, I mean, we can see if it's baseline, because it'll have the sticker baseline on it on MDN and the other sites that that catalog these.
I'm just saying that it's there's the nuance and complexity may or may not be captured there in the way that they're messaging this, which is whether or not you're using the asynchronous API or whether you're relying upon the synchronous API and doing it in a worker. This narrow do it with synchronous APIs in a worker is actually something I've tested. It. It works on all these mobile devices and desktop browsers, so that.
I think super interesting. Will you drop we? Okay?
Agreed?
Agreed, because the baseline is pretty broad. Baseline typically applies to the entire specification, except in the case of past key, where it only applies to one item in half of the options. You and I have both had fun with that one.
Yes we have.
Yeah, yeah, so yeah, drop a link to some resource for that, please, because just so, what I'll do is like comments.
What I'm going to do is actually drop a link. I've referred to this a couple of times, but I'm going to drop a link to a library that I recently wrote, which tries to abstract client side storage. Gives you a key value abstraction across all five of the major client storage mechanisms. There's cookies, which people don't often think of as client storage, but you can actually read and write keyvaals and cookies. There's local storage and session storage.
There's index dB, and there's OPFs, and that library supports both the OPFs in the main thread, but then you know, it doesn't support all browsers, or there's also the worker version of that which does work in more browsers. You just have to be willing to do the you know, some of the reasons why people don't like worker based logic is because it can it can make more complex your security headers, like your CSP policy on a site or things like that. You have to be a little
more careful. But if you're willing to go down that route, you can use OPFs in all of the major the stable versions of all the major browsers and devices today. And so I'll drop a link to the storage library that I wrote that tries to just give you a very easy, consistent key value abstraction across all of those. So my understanding is the way that that works in practice is that you create a main thread API that
resembles closely the worker thread API. It transforms data into a buffer and then sends it as a shared buffer object across the worker thread, and then the worker thread sends it back as a shared buffer object, and then it gets re encoded. That is that the basic cycle of that. So sharing data between workers is actually a bit of a complex thing, and it's unfortunate that it
is so complex. But sharing data between workers can either be serializing to a string and sending that string of data across the inner process channel, or this newer standard
of these transferable objects transferable objects. It's a more complex programming paradigm, but it is effectively that you use stuff some data in a type deray, and then you tell the browser I'm relinquishing control of this type deray to a thread and I can no longer read from it while that thread has control of the type deray, and then the thread now instantly has access with zero copy to that same shared memory, can read from that type deray the literal binary data from it, can read the
bits from that, do whatever it wants right back to it, and then relinquish control back to the main thread. That's what transferable like, being able to transfer things. Most people don't go that route unless they have massive amounts of data that they're trying to send, and by massive I mean like one hundred megabytes for more. Most people, Yeah, I think when they're sending data back and forth are just serializing to Jason and sending it across.
I think that PAPA parse was maybe the first widely known, popular library that took advantage of these tricks because it supposed to be able to handle you know, gigabyte CSV files.
Mm hm, I don't know.
Do you know of anything else that's in that vein because that that's my experience with worker threads is pretty much PAPA parse and a couple of failed experiments.
I don't know Papa parts. I haven't used that one. I don't think I've ever used any worker libraries. I've always just used the you know, the direct work or interface that we get in the browser. So I don't have any specific recommendations to make around there. But like this this library that I'm you know, posting this this link to, you could look at that code. It's only
like a couple dozen lines of code. You could look at the code of how I'm managing those workers, and you could very easily write an adaptation of that that instead of sending the data across in Jason did so with a more sophisticated, you know, transferable or you know, bury it in a binary array and a typed array and do a transferred object kind of thing. You could do that. It wouldn't be that hard, all.
Right, Cool, So I forget the track that we were on. I actually, since I forgot anyway, I actually want to go back a little bit. And we've we've thrown around some terms that it seems like recently, I'm I'm. What I'm picking up is that people are using these terms in different ways, and so that's like huge step back. Let's define cloud, because cloud meant I have a VPS on Lenode. That's what cloud meant. What does cloud mean now?
I mean cloud basically means now that you're using a managed hosting solution with built in scaleability. So you're using something like AWS or Google Cloud Platform or maybe Azure for Microsoft, using one of those big cloud providers, and you're basically allowing those managed services to do all of the provisioning, the spinning up and down of your servers.
You're not really doing a lot of that manually, although you could, you know, you know, AWS as a dashboard, you could go in and take down a server or put up a new one if you want it. But you're basically creating these these policies so that it's managing your your scale and your growth for you. I don't have any more understanding of cloud than what I just said that is the sum total knowledge, because I never
got into that space. There's probably listeners here who would have a very different and much more detailed view of the cloud. But what I understand the cloud because I have a VM online line ode right, and I don't call that the cloud. I'm paying for a virtual machine, but I do all of my own management, and there's no built in scalability where I get a new VM just because I get you know, slash dot it or at the homepage of Reddit or something. I have to
manage all of that stuff. So I don't call that the cloud because they're not really doing anything for me. I'm just renting a bit of memory and CPU cycles from them.
So low cloud VPS, middle cloud auto scaling. But then there's high cloud, which is serveralus functions.
Sure, yeah, cloud Flare with you know, with their durable objects, and we've got you know, functions as the fast functions as the service and AWS Lambda and all of that stuff. That would be Yeah, I think that's fair to call that a higher abstraction of cloud.
Because right now on Twitter, right now, it seems like whenever people are saying cloud in references, particularly to all this DHA stuff, they actually specifically mean functions. They don't mean the auto scaling, they don't mean like they are strictly it seems like they are strictly talking about just functions.
And that was confusing to me because, like I said, I while I've heard the term cloud, it's gone from meaning I don't host the server in the closet at the office, I co locate it, or I use just a portion vert via VM, to now it means like it basically, it seems like it means anything that marketers wanted to mean at the moment.
And public I think it's important at each other. I think it's important to note there. I think there's a very important distinction between a VM that I am responsible with the root login to manage and turn take down and to reboot and upgrade and all of that stuff, versus a fully managed service where I don't even know what my VM is. I've just given you like Docker images, and I've said, please just go spin up whatever servers
I need out of that stuff. Those are very different system that men thought processes, and they take very different skill sets. So I think there's a distinction there to be made, and I would call the ladder of those cloud versus you use the term co locate. I mean I was doing that back in ninety seven in college.
I was running a server in my apartment in college, and then I remember the day that I was like, yeah, I can't do this anymore, and I went and bought a one U server and stuck my hardware in a data center somewhere that certainly was not the cloud, because I was still completely responsible for that server. They just gave me a power plug and an Ethernet plug, all right.
So, uh then onto onto the next thing, well, the kind of two things maybe. So I want to know where I want to know what is the alternative because we talked about, okay, people are going to have this data locally, and uh, I agree, there's some efficiencies there. There's also some inefficiencies, especially on Android devices due to the single core uh speed and and Jason parsing from local storage or index dB actually becomes significant a lot quicker than most people would think.
Uh.
But like there's there's a potential, there's certainly bandwidth savings. There's definitely potential performance savings, although a lot of the critics of that have you know, I believe that a lot of their points are valid. But like you were saying, it's like, what layer are you viewing at this? If it's if it's time to first contentful paint, but the person still can't click a button, well, then you're just lying to the user. You didn't actually do anything better.
And then, so what is the alternative to the cloud in terms of how the data is going to work? It doesn't seem like web RTC is really there yet, But what's the alternative? And then what are the places? How do we distinguish between the places where local first makes sense and local first doesn't make sense because it sounds like to me, Amazon or Walmart search would never make sense. Bank access and email access seems like that would always make sense, and Twitter would be somewhere in between.
So you give me your take, and that you know, given that context, these are.
Fair questions, and I'll I'll acknowledge that lots of different perspectives are going to exist on this, So I'm only giving my one little slice of perspective. But I actually do think that probably the lion's share of applications should move local first. And I personally feel that way because not only do we have the description, you know, the discussion that we had earlier about the business model and whether users can monetize and whether there's like a business
justification for local first. That's part of the equation. That's not what brought me to local first. What brought me to local first was actually a personal convection around the importance of the autonomy of users owning their own identity, taking that with them wherever they go, and owning their data. I make the assertion in a couple of different meetups and conference talks recently that data that you don't physically control is data that you don't own. In other words,
custody of data is the whole game. If I have data that theoretically is mine, but it's actually physically in the custody of a cloud server that's behind some business model of a company that I don't own and control, then that's no longer my day. I'm renting that data back, and I believe that's the ransom.
That's why they give you the first ten years for free.
Exactly. They get you hooked, just like any good drug dealer does. I genuinely believe that most of the Web needs to move to a model where users have that autonomy over their identity and over their data, and I believe that local first is the only compelling model for us moving in that direction right now. Are their challenges with local first? Of course? Is it so nascent that it's unlikely to win? I mean, I think we have to concede that most challenges to the status quo of
billion dollar businesses don't win. I think we have to concede that we've had a whole other sphere, which we're not even talking about here. We've had this Web three crypto movement that for fifteen years has been saying we're the answer to that. I actually worked at a Web three company for a while, and they've said we're the answer to all of that centralization and give everybody their stuff.
I worked for a Web three company and for that six months was like continually confronted by how easy it was for people in that space to just grin and blink away. The big gap between the way the web is currently built and the way users currently experience that and what Web three is. And so I left there thinking, I don't know if we're ever going to get to Web three, but if we're ever going to get anywhere forward,
we need to evolve the web. And I started calling it web two point five, where the web goes to more of a users own their data, users own their identity, the experiences are more installed rather than accessed on every round, Like you know, every time you go to a web page,
you're effectively reinstalling that web app. And that's bonkers because we wouldn't treat native AP apps that way, where every single time we opened up or clicked a button in an app, we re downloaded the whole app or even part of the app.
But this is this is the allure of React, right, this is this is the same problem like the state management's hard, the upgrade path is hard, Diffing the data is hard. We're just going to redo the whole thing from top to bottom.
I don't so. First of all, I don't think we're redoing the whole thing, because if you build local first apps with web technology, you can build.
What I meant re rendering, reloading.
But oh well, that's that's I We could do multiple episodes on whether or not the virtual Dawn was a good thing for for us or whether it really took us. You know, I think it was very much a let's climb a local Maxima hill and we got to the very top of that local maximam hill and then we're like, oh, this sucks. This isn't the right hill to climb. But that's you know, that's my personal take on on the virtual dom and dom diffing and all of you know, rerender every you know, fifteen MILLI.
But the basic concept what I'm saying is the basic concept is state is hard. Let's not do it. That was the allure. State is hard, Let's not do it. We're going to render the whole thing so we don't have to keep track of individual state. We don't need to know.
There's no app button, there's no app in existence that is using react, that is not doing sophisticated state management alongside it. So I know, I know that doesn't exist.
We's pardon your French, Sorry, No, I'm I'm there with you.
I'm just saying that that's the allure, and there is something to that, Like I think I've taken a look at swift UI and I think Android jetpack is the same and swift U. I when I hear if I close my eyes and I listen to the conference talk, I hear react react, react, react, But when I open my eyes, I see something that it's like this looks like this looks like it actually solves the problem, which is like really surprising because I was, like, I abhorred
reacts so much. But swift Ui is something that's really intriguing to me. How can these two things be And I don't know. There's like there's the promise, there's what's on the conference side, and then there's the implementation. And I think when you look at something like swift Ui, it's the same promise. But I think they might have the implementation right. I don't have enough experience with it to say, but I think they might.
The thing I would point out is that the only thing that's really significant in the front end development space over the last couple of years that is somewhat antithetical to the local first movement is the move to server side rendering of components and that whole complexity, all the other things that and and and, as I argued earlier, they only did that because they keep trying to chase this ethical zero millisecond reinstall experience that that product managers
and people have just sold as a reality that isn't. They're trying to get closer and closer to pretending as if the app can reside in both places at the exact same time and there's no cost over the wire. If you didn't ever start with that as your goal, which I never did, then you wouldn't have ever gone down the road of trying to do server side component
rendering and all of that stuff. That wouldn't have been the way you tried to fix it, and local first fixes it in different ways that I think are much less complex. And so that's really the only thing that's happened in the last few years of development that you might have to abandon. If you really wanted to embrace local first, you would have to kind of get away from that server side component way of thinking that people are starting to get excited about and enjoy. But all
of the other things that you could bring. You could bring a straight up React fifteen virtual dom application straight to local first. You can do what I do, which I didn't even use the front end frameworks. I use templating and I'm super old school, but I use mustache templates and you can do that. You can use reactive things like view you know, and their signals in spell. You can do any of those things for local first development.
The only thing you can't do is offload significant amounts of your front end logic to a back end, because you really need to stick that back end on the client to embrace what local first is about.
Okay, so this here, I just just bounce an idea the promise, the promise of graphql but delivered as a local API, because the allure of graphql was graphql is going to handle the data manipulation for you. Graphql and I think that the data, the ETL, the extract, transform load, the sinking of day, the transforming logic. I believe that that is classically a back end task. We could call it the middle end. And I'm one hundred percent on board with your classification of the middle end. There's like
the core API, the JSON where things kiss. That's the middle end and that and that's where that's the problem the graph Ql was kind of trying to solve. If you if you move graph QL's complexity to the middle end and you give people that are purely on the front end the the autocomplete of graph ql with local storage. I think I think maybe it wins.
Yeah, I'm I think you should go be a marketing consultant for a number of the players in the space, because that sounds very much like how they're trying to sell this. They know that there's a significant pleasurable desired DX around those types of models, and they're saying we can repurpose those models and back them with much more sophisticated things like a CRDT that's syncing out to a cloud server or whatever.
Okay, well, yeah, give me their contact information. I'll see what I can do. But yeah, I think graph kel was always going to fail because it was solving the problem fundamentally in the wrong way. It's saying, we're going to reduce your data load by making more round trips to the server all the time. If they had inverted that, we're going to reduce your data load by doing large batch fetches from the server and then updating ad hoc when data is stale and giving you the same API
that graph ql gives you. That I think could have been a winning strategy, and that that's really I think that's compelling because I look at graph l, I look at the promise of it, I look at those autocomplete tools and think, man, I love it. I absolutely love it. I just yeah, how do we? How do we? Maybe maybe that could be the the poisoned apple or you know, uh wrong term, but you know that the hook the addicts.
Thing, right. I think there's a tremendous amount of potential here, and I just I want to re emphasize that local first software development is, and especially local first web software development is really just saying, let's take all the things that we currently assume can only happen on a server and ask how much of that could actually happen on the client device. It's not saying if you like this framework, you just have to give up because you've got no place.
In fact, it's saying the opposite. Bring whatever uh application building techniques you have, but but build more of those things into the client experience. The thicker client, to borrow a term from the nineties, Build thicker clients that have more of that stuff built in, and stop assuming that the only place for data is up in a cloud server.
There's lots of other ways. And you asked you asked earlier about like how do we you know is webs is is web RTC or web sockets or whatever, like how are we how are we gonna have apps?
Yeah?
How are we gonna have these client apps talking to each other? So we do. We do definitely have web ertc. The nice thing is that it's been around for a long time. There's a lot of abstractions. The bad news is that webertc never achieved its goal of zero server signaling.
It's zero server after the signaling, but it still requires servers that can be quite expensive and quite uh single point of failure for the signaling aspects because of all the complexities of not traversial and stuff like that.
Just give it to you for free, though, I mean, don't you just get to use Google's Chrome Chrome? So if you're using Chrome, if it's in Chrome, if you get that for free?
Right? Not really? So there's two without getting too much into the rabbit hole, there's two standards. There's stun in turn. One is used for the signaling, but one is used for media. Really, which is what most people are trying to do with ROBERTC is do media relay kind of like the call that we're having here. They're trying to do media relay, and media relay is absolutely not free because it's very expensive to the provider. So the I believe it's turn servers or the media relay I might
have that backwards. It's stun in turn. But whichever one of those is the media relay servers, there are not free ones. There are companies that you can pay for, but it's you know, hundreds of dollars a month to pay for a scaled out media relay server. Anyway, So weber TC if we thought about it as one standard, I think it's actually a really good API. But this signaling problem is kind of the fly and the oightment or the poisoned apple to borrow the term from you
from just a minute ago. But there are wrong There are options for fixing the signaling issue. One of those options is if you move from purely web into hybrid apps, if you use those native wrappers with web views, things like towry, things like electron, things like socket supply. These these hybrid the old days it was like phone gap and ionic and stuff. There's there's dozens of them, but those native apps have the potential to kind of break outside of the current restraints of the web and give
you true peer to peer communications through networking protocols. And so there are multiple options there for a web app to be given a slightly extra superpower, which is let you communicate. There's also potentially, I really hope this happens, there's a there's a working group working on a standard for peer to peer local peer to peer communications which would be able to tunnel between my two devices using things like Bluetooth or local wife, which is a standard
that Android and iOS put together. So there are web standards that maybe hopefully land someday that are going to let us let our web apps talk directly peer to peer, even without those native wrappers around them. But I do think that that will for people that decide to go that route. That's not local first, that's kind of beyond
local first. But when you go beyond local first to trying to get closer to a peer to peer architecture of an app, that's where you see the true benefit of potentially shutting down your cloud server entirely and for closing on your entire cloud bill, because most of what you need to communicate with can actually tunnel over these peer to peer networks, and so I think that's a little bit further out from local first, but I think
it's a step along the way. I think local first, and then that will come after that.
But then, how do you get people if you can't ransom the data? How do you get people to pay? How do you turn? How do you turn from users to customers?
I'm used about this on my Twitter account a while back, like that, are there any business models that are compelling that are not based upon we hold you ransom? And we brought up thirty seven signals. They are basically saying, we're a successful business that is doing exactly that. You pay a one time fee you license our software. It's all your software, and it's all your data, and you don't have to keep paying us a subscribe, a subscription
ransom fee. You have to be willing to think about your business model potentially the way that we used to think about business models, which is not how do I capture as much possible value from every single user as humanly you know you can imagine versus how do I capture enough value that my business is viable and growing. You have to somewhat restrain the greed when you design business models that way.
I don't know that it's greed as much as it's hype. And you need money. You need a lot of money, you need a lot of time. So if you want to get the money, you got to get the investment. If you get the investment, you have to offer almost everything for free because you need the drug. And if you offer everything almost for free, then you'll never make that money back in a one time payment because the cost is too high. The investor won't get their return.
So you have to make it a subscription. I mean, even when you look at the companies, the profitable companies Microsoft, Apple, they're actually profitable and they're turning into subscription models because it's the only way to grow. There's no growth opportunity left. Word to capture the planet.
I don't agree that it's the only way to grow. I agree that it is currently the most popular and compelling way to grow. So how do you grow?
I don't captured everyone on the planet.
What's that?
How do you grow once you've captured everyone on the planet, other than subdividing your services and turn them into subscriptions, Because the only way you can't multiply, Like there's ten billion people. You've caught all ten billion people, all ten billion people have bought your product or use your service. That can Facebook, Apple, whatever. How do you convert them? It's either ads or it's subscriptions, because subscriptions you can give them. Well, you know, we told you this was
the pro tier, but actually now there's the ultratier. We told you was the ultratier, but four K is actually moving to the Ultra plus tier.
Well, you know, I'm not going to answer. I'm not going to give a very satisfying answer here, but it's the best one I think we can fit into this particular podcast episode, which is that's part of why the Web three folks are saying, hey, pay attention to us, because we have tried to come up with a decentralized mechanism for monetization. I'm not here to shill for Web three. Yeah, I know there might very well be useful ideas where you know, I'm just going to give a crazy little example.
Let's imagine that I've built a calendar app, kind of like what you know, thirty seven signals did they build a calendaring app. I build a calendar app, and I sell it for ten bucks and I let you run all your own data. You can host it wherever you want on a three dollars VM or whatever, and I don't charge any subscription fee. But then let's imagine that I come up with some really compelling cool thing, like an AI summary of a calendar or something. I'm just
making something up. Well, I can deploy services out there on the peer to peer web that, say, you can choose on a per calendar event basis to opt into this, and it's going to cost the equivalent of a dollar of cryptocurrency transaction for you to have that data that you send from your calendar send into this black box, and then this smart contract sends you back your AI summarized data or whatever. I'm just like, I'm literally making something up on the fly. But I can monetize that way.
I could create services out there that people can choose to use on an OLI cart basis. And if I make those services is compelling enough and I make it easy enough for people to pay for I think you can grow without locking people into subscriptions. But I do concede that the vast majority of the world, and basically every investor in the world, is only interested right now in the subscription based business models.
Yeah, and I just to touch on the Web three thing. I think it's really unfortunate because I do see the good ideas. The problem is one they called it Web three as a gimmick because it's not the Web. What they want is they want an alternate universe in which
it's kind of like rust right, like Russ. They want an alternate universe in which programming is perfect without trade offs other than the trade off of learning rust right, but it and the Web three people they want this perfect universe that literally can't exist because like first principles and incompleteness theorem and but and so there. Instead of saying, Okay,
we're gonna we're gonna evolve the web. We're gonna take what we have and we're gonna make it one step towards our ideal, they're saying we're starting over from scratch, but not just from scratch, like really from scratch, Like we would get rid of TCP if we could, but somehow we haven't figured out how to do that yet. Like if the Web three people had their way, you
would have to buy a proprietary network card. And by proprietary I mean not in accordance with any existing standard and not useful to any other standard it would.
Can I can I briefly offer an alternate view of
that world, having spent a brief six months there. I'm certainly not a spokesman for Web three, and I'm not here to shill for some Web three coin or something, but the underlying culture that I was exposed to in that world when I was trying to learn it and trying to figure out they hired me because they wanted me to help bridge the gap from Web two to Web three, and so I was trying to look at it from that perspective, what's missing, what are they assuming
that's not true? And all of that. And one of the things that I got from the culture that the cyberpunk genre of writing seems to be an extremely important part of the culture in Web three. And if you read people like Neil Stevenson or whatever. I'm not a big reader, but I did read a couple of his books trying to get this mindset a little bit more injected into mind. And if you read that, I think they're actually saying something a bit opposite of what you're saying.
I think what they're saying is not we want an idealistic, perfect world, but they assume that the world is inevitably going to fall in on itself in its current track, and the only way to avoid the certain doom. I'm using really big words like I was a you know, a writer. There's something there, but the only way to
avoid that is to jump to their view. So from where from where we sit in a mostly functioning but certainly not zero problem world, we look at them and say, oh, well, those folks are just you know, they're pie in the sky and they just they want things that are never going to happen. It's completely naive and idealistic. But I think their perspective is, man, you just don't even realize that the track that you're on is already going to fail.
It's inevitable, and we're just trying to get as many people to jump off that track before the train goes off the rails.
That's that's our bridge. We need an off ramp, because what they're asking is jump off the train one hundred and fifty feet down into the gorge below, rather than jump off to the train onto this nice little floating ninja turtle blimp we have for you.
Right, But That's exactly why I left that space and why I'm trying to build things that I I think will constitute the gap, that will bridge the gap. And I call it the web two point five. This idea of owning your identity, this idea of promoting local first, this idea of those are things that I think need to happen if anybody's ever going to plausibly make that job, that's my wible.
Okay, so I think we are we're at time for this. I for those listening on, I actually want to continue on with another segment, but I think so, I think we need to wrap this one up can make so please.
Please one last plug around this space. So I have been building pieces in the local first and the identity space, and anybody who's followed me on social media has seen me building libraries like, for example, the local vault library. I'll I'll provide all of these links, but the local vault library to use past keys to own your identity. That's one set of effort that I'm trying to do to to help create the things that other smarter people
will actually build real viable solutions around. I'm trying to put together those local pieces. So that they can be used. The other thing that I wanted to say, which is related butt separate, which is a recent initiative that I have around what's called what I call bring your Own JavaScript. There has been a decidedly like anti framework tone to our conversation, and I just want to state clearly for the record, I am not anti framework. I am not
down with React and view sucks. The people who created those things are far smarter than I am, and I look up to them. I wish I was as good an engineer as many of the people that design these systems, and I'm glad they exist and they are solving things in ways that many of our engineers in the industry really appreciate their I am not the great spoke when I say, I think there is a tremendous amount of value there. But what we have lost is what I lament.
What we have lost is the appreciation of the importance of understanding how the systems work under and how sometimes
those aren't the right answer. We've lost that appreciation, and so BYOJS, bring your Own JavaScript is really designed to not say down with frameworks and down with Typescript and down with tools, but rather, let's carve out a separate space where we can champion those who still believe that those skills and techniques are important, and we can mutually sit alongside the much bigger behemoth of the framework first
crowd the stuff. So I just wanted to plug the stuff I'm trying to do around local vaults and using past keys to create our identities and protect our data locally. And then this Bring your Own JavaScript is trying to champion JavaScript without the requirement to go very heavy on framework and tooling. Those are things that I think will be very important keys I hope in the local first movement. But I don't own the local first movement in any way, right.
I'm one guy. I don't have a company in local first. There are many many other people out there, so don't I hope that people won't take my little slice of thinking about local first as gospel. There's a tremendously big community couple thousand people in the Discord community for the Local First web dev which we'll have a link to. I invite anybody that's curious about local first, even if you totally disagree with how I've presented it, but you're
still curious, please come and join that community. Because there is a big tent, there's a lot of room for a lot of different ways of doing it. I just have my own little tiny slice of how I'm trying to go about it.
All right, Well, thank you for that, and again we're gonna continue on with another segment. We're gonna wrap this one up. Uh So, let's go ahead. We're going to do picks. If you it sounds like you're not gonna have any problem with that. I'm going to go ahead and have Steve go first, because he I want to be We've already not been sensitive to your time, so I have go ahead and have you go first.
There, Steve, all right, so the uh my picks are the highlight of any Javascriptaber episode, at least the ones that I'm on with the dad jokes of the week. So let's see this is sort of a visual one, but I'll make it a little better. Fun fact, the sentence are you as bored as I am? Can be said backwards? Right?
Am?
I as bored as you are? Backwards?
Nice?
Second, I've been a bit bored lately myself, so I decided to take up fencing. Man, are my neighbors mad at me? And then Finally, this is a brother tasty question. Why did the cannibal leave the restaurant? You got cold feet?
Oh that's so bad. That's so bad.
At least bring it out warmed up right right? Well, you know.
The the similar question is is why did Jeffrey Dahmer keep a blender on his porch? You'd like to greet people with a warm handshake.
Oh that too soon? Too soon?
Sorry, Kyle, Kyle.
Oh, I feel icky inside right now.
Oh that's gross. Please don't do that against Steve.
All right, great?
Uh?
Any was there anything else on that, Steve? Are we ready to move on to Kyle?
Ready to move on?
All right? Oh?
Wait, No, we do the We do the guest last. That's how we do it. See, it's been so long. I'm rusty moving from me. Yeah, I am moving on from you. That is that is what I'm doing, all right. So the thing that I want to pick is gonna be Oh I have to oh oh, Utah JAS conference, Utah JAS conference. The videos have dropped. So if you want to watch the Utah JS stuff, the videos have dropped.
And I'm gonna Utah JS COMF twenty twenty four. I thought it was a great conference because I think this is the second year in a row that I'm seeing the glaze coming off of people's eyes or no, that's not the right expression. People are starting to.
See the light.
Like the scales, the scales, the scales are coming off people's eyes and they're starting to see the light. Because there were so many great talks that were hey, maybe we could do this in a simpler way. One of the ones that I absolutely loved was I forget his first name is something delaney. I think he gave a presentation on the thing that caught my eye about it was server side events. And it turns out you can implement server side events and literally in a tweet, actual
functional server side events will fit in a tweet. Well, okay, I put it in an image in a tweet, but anyway, Yeah, and I'll give that too. And I would look up the name, but I don't want to take up too much time what what the actual talk was called. But let's see sc in a tweet. Where did my tweet go? Oh, I don't have it, but there's that. Okay, that's not
that's oops that that RL went nasty but oops? Okay, anyway, so yeah, those those are those are two things that I'm going to pick right now, I've got I've got a couple other picks. Maybe I'll pick in the next segment. But that's utah JAS conference. Go take a look on YouTube. I just put the link in here, but if you look up utah js on on YouTube. The conference, I
really really thought there were some great talks. There was one that was the one hundred year web app how to choose technology that will survive that you know, if you if you if somehow it's still hosted in one hundred years, it would still work in one hundred years.
I thought that was talking was actually so many excellent talks is here because it was it was getting away from I mean, there was still some framework hype there, but it was getting away from framework hype and it was getting back to not necessarily back to basics, like
service side events wouldn't necessarily say basics. But it was mind blowing to find out how simple they are in comparison to web sockets, how performant they are, and see that that demo that was done, and there was there was three or four talks I went to where I was just blown away with I learned stuff and stuff that I feel is valuable that I'm going to use, and I don't often feel that way about the hype stuff,
but I mean a lot of that's my attitude. But anyway, so I got that, Kyle, what are your picks?
I'll just do one similar to but not the same. And this is not something I created. But the last couple of days a new initiative is launched called the Pure Web Foundation, and you can get to it at pureweb dot dev if you're interested. But the Pure Web Foundation's goal is too similar to b yojs, is to champion building with the web platform without frameworks and tools necessarily layered on top. It's an attempt to kind of maybe even rediscover the way the web was built before
we were taken over by those things. I'm very excited about that, and I hope more people will kind of give it a look and kick the tires on this. They're going, we're a lot of resources that we're going to try to create for it. So it's not about creating code or libraries, but about creating resources that help educate around that.
So all right, well, thanks for that, and it has been a pleasure having you so so far. Thank you so much for coming on and talking about this, and and uh glad that we get to have some warm disagreements. I think that always makes an episode a lot better. And I'm glad that you were able to defend your position because I'm gonna say something that I don't normally say. Sometimes if people don't defend their position, I just don't
ask the next question. So, Okay, I don't want to be abrasive, but like when people defend the position, then that gives me the ability to dig deeper. Sure, so thank you for that.
Yeah, I've enjoyed It's been a good, lively debate, so thanks for having me, all right, And with.
That, those of you are online, stay tuned, but for this being cut for podcast release. Audios, everybody,
