0:24:32 Yeah, I love that analogy.
0:24:34 I think this was really like what blew my
mind about React in the, like, when I saw
0:24:39 it the first, the first time, not just
that it made my life simpler by not having
0:24:44 to take care of like all of the dumb
children, like appending, creating, etc.
0:24:50 So it made everything simpler, but
also having all of that just work
0:24:55 automatically without me having to even
like tell it like, Hey, now update.
0:24:59 That reactivity for the views, but also
for like the local state, but applying
0:25:04 that now for global data, uh, I think
that is really a killer feature of
0:25:09 local-first that I think is not well
understood by, by a lot of app developers.
0:25:14 It's just so funny because like it's the
water we live in, you know, it's like, Oh
0:25:17 yeah, when you're building stuff, you're
just, you spend a lot of time moving data
0:25:20 around and checking it and updating it.
0:25:23 And it's just like
endless little problems.
0:25:25 Uh, I remember like Gatsby cloud, we
would like, it was such a common problem
0:25:30 where it would like ship an update,
which like, you know, use a slightly
0:25:34 less efficient query or up the number of
calls Internal API calls, and then all
0:25:41 of a sudden, like the post, our Postgres
database with like red line, like, and
0:25:44 we like, ah, no, like, or whatever.
0:25:47 And like, it was just like a constant
headache because like, when everyone's
0:25:51 constantly like asking for stuff,
there's just enormous inefficiencies.
0:25:55 Cause like, I remember that was a big
thing where people are like early on
0:25:58 with React, people are like, oh, like.
0:26:00 My jQuery calls are so efficient,
you know, and like react is doing
0:26:03 all this extra work and whatever.
0:26:04 But what pretty soon everyone kind of
realized it's like, well, yes, like react
0:26:09 does do extra work to accomplish the
same goal, but it's only actually more
0:26:14 work if every single jQuery operation
was optimal, like you'd actually thought
0:26:21 through the algorithm, you know, in detail
for every single one, because in practice.
0:26:27 Everyone was just doing
lazy, weird shortcuts.
0:26:30 You're like, you're like, I
just got to ship this feature.
0:26:32 So I'm just going to blow it away and
rewrite the whole thing or whatever.
0:26:34 He said, we were doing all sorts of
like weird, crappy things to, to, to
0:26:38 kind of like update the Dom, which,
yeah, it was just like very janky,
0:26:43 very slow all the time and whatever.
0:26:46 So, so, so react was like,
yeah, it's like, it was an
0:26:48 overhead to doing automatically.
0:26:50 But it was sort of like a consistent
overhead and everything was consistently
0:26:56 a little bit slower than optimal
instead of like sometimes optimal,
0:27:00 sometimes widely not optimal.
0:27:03 And so the same thing with
like moving data around.
0:27:05 It's like, you know, people are like,
Oh, yeah, like, My data fetching is so
0:27:10 clean and so good But you know, you have
one engineer who just accidentally grabs
0:27:16 five megabytes of data from their API and
like, whoops, and then all of a sudden,
0:27:20 like the whole thing falls to pieces
where, again, with like sort of more of
0:27:24 an higher level of abstraction, it's like,
you just, it just can't happen because
0:27:29 you can even put in checks, you're like,
You can only ask for max of 300 kilobytes
0:27:34 in a batch or something like that.
0:27:35 Whatever.
0:27:36 I mean, there's all sorts of like.
0:27:38 Smarter things that the
system can do for you.
0:27:41 All kinds of new abstractions of
kind of like both face these same
0:27:45 challenges of, of, or complaints.
0:27:47 It's like, Hey, like I do it really
well and you're doing it poorly
0:27:50 in all these cases and whatever.
0:27:52 But if the abstraction is like
good enough, it eventually
0:27:55 pretty quickly becomes.
0:27:56 Better in most cases and
often better in all cases.
0:28:00 And even if it's not better in all cases,
like taken as a whole, it just eliminates
0:28:04 a lot of really suboptimal problems.
0:28:07 It's like memory management, you know,
that's sort of another great example.
0:28:10 Like people are like, I manage memory
so well, like these GCs, there's
0:28:13 lots of overhead, blah, blah, blah.
0:28:15 And then like.
0:28:16 30 years of, uh, CVEs of,
you know, security issues.
0:28:20 It is very, very hard to build
fast, efficient data loading and
0:28:24 keeping it up to date and whatever.
0:28:26 After like, you know, spending all
this time building local-first stuff,
0:28:29 even like very good apps built with
like great teams, like, you know,
0:28:33 name a name, like Vercel's dashboard.
0:28:34 I mean, they're pushing like react
server components and all that stuff,
0:28:36 but like you click around their dashboard
and there's like endless little, like.
0:28:41 Loading, you know, like if they had a sync
engine, they would know that the next few
0:28:48 has all the data and it's up to date and
they wouldn't have to like go back to the
0:28:51 server, like, Hey, did anything change?
0:28:52 Did anything change?
0:28:53 Cause I'm sure they have a
local cache, but like what
0:28:55 they're doing is always like.
0:28:56 Asking again on every click, they're
like, Hey, has anything changed since
0:29:00 the last time this person was here?
0:29:02 And that, like that request, like, or sort
of that, that fundamental uncertainty with
0:29:07 an imperative approach, like, just because
you just can't, you can't, you can't
0:29:12 know if, if, if the data is up to date,
um, there's no way of knowing for sure.
0:29:16 Cause there's no system that's like
reliably telling you that like, yes, the
0:29:20 data is up to date for this next view.
0:29:22 You have to check.
0:29:25 And that check.
0:29:26 Take some amount of time, which
adds glitchiness into your UI.
0:29:29 And there's just no way of, no
way of getting away for that
0:29:31 without, without a sync engine that
can like provide the guarantee.
0:29:34 I think it's really interesting.
0:29:36 You've used the term, uh, thinking about
your app data first, maybe as opposed
0:29:41 to view first or, or react first.
0:29:45 Yeah.
0:29:46 I think that's kind of a big mental shift
that I've also observed in my own app
0:29:52 development evolution of my perspectives.
0:29:56 And I think this has been a really
powerful step because it intuitively
0:30:01 makes sense that if you don't have the
data, then if you want to render it.
0:30:06 And you don't have it, then
you also can't render it.
0:30:09 And so thus you render a loader
or a skeleton, et cetera.
0:30:14 Whereas if you think about your app.
0:30:17 Navigation routing user experience
overall more in a data first way to
0:30:22 think about, okay, I'm currently here.
0:30:24 This is all the data that I need, but also
think a step ahead of like, Oh, what if
0:30:29 I would go to, to this other route here?
0:30:32 Maybe I should already have the
bare essentials in terms of the
0:30:36 data for that, that if I'm going
there, it's immediately available.
0:30:40 And then you think about your data
more, maybe you think about it as a
0:30:44 graph or like a collection of documents,
however, you want to think about the
0:30:47 data, how it fits your app's use case.
0:30:49 But once you start thinking about
your app data first, I think it's
0:30:54 so much easier to build a really.
0:30:56 high quality, fast user experience
then, um, and it's also so much
0:31:01 easier to make that available offline.
0:31:03 I'm not sure whether you need Vercel's
dashboard, which is gorgeous, but has
0:31:08 a bunch of loaders, loading spinners.
0:31:09 I don't think you need that
necessarily to work offline.
0:31:12 But another way to, if it works
on offline, then it's crazy fast.
0:31:17 And I think it would be
great if it was a lot faster.
0:31:21 So I would, I would completely agree
with kind of thinking about your, about
0:31:25 your app development workflows as data
first, as opposed to React or Vue first.
0:31:32 So we've been talking a lot about the,
all the good things now that you've
0:31:36 experienced with local-first, but
I'm sure you've also experienced like
0:31:40 some pain points, some challenges,
um, in regards to that new approach
0:31:45 of building software or in regards to
the technologies you've been using.
0:31:49 Tell me a bit about that,
which sort of challenges have