00:00And so it's because it's
local-first, we can synchronize
00:02it across all the hardware, right?
00:03And we can back it up on a
central computer somewhere.
00:06And that means if you lose
your laptop you go and buy a new
00:08laptop and you sign into Playbit.
00:10Everything is back there.
00:12Like the window position, text selection.
00:14And that also means that you
can have many of these computers.
00:16And so we have this concept of workspaces,
they're basically virtual machines.
00:20And one of these computers you can share
with your friends or with other people.
00:23Yeah.
00:24And then you have essentially Figma
multiplayer, but like on the
00:26operating system level and these
facilities like this data syncing is
00:30available , as a first party API,
like for application developers.
00:34Welcome to the local-first FM podcast.
00:37I'm your host, Johannes Schickling,
and I'm a web developer, a
00:39startup founder, and love the
craft of software engineering.
00:43For the past few years, I've been on a
journey to build a modern, high quality
00:47music app using web technologies.
00:49And in doing so, I've been falling down
the rabbit hole of local-first software.
00:53This podcast is your invitation
to join me in the journey.
00:57In this episode, I'm speaking to
Rasmus Andersen, who helped to build
01:00many monumental products, such as
Spotify, Dropbox, and Figma, and is
01:05now working on Playbit, a local-first
operating system built from scratch.
01:10In this extended conversation, we go deep
on software quality, the trade offs of
01:14different data models, and the importance
of the web for modern applications.
01:18Before getting started, also a
big thank you to Expo and Crab
01:22Nebula for supporting this podcast.
01:24And now my interview with Rasmus.
01:27Hey Rasmus, so nice to
have you on the show.
01:29How are you doing?
01:31Hey Johannes, good to be here.
01:32I'm doing well.
01:33How are you doing yourself?
01:35I'm doing great.
01:36I couldn't be more excited
to have you on the show.
01:38I'm like a huge fan of so many products
that you've worked on in the past.
01:43So really delighted to
have you on the show.
01:46But for folks who don't know
you, uh, could you give a quick
01:49background on what led you to today?
01:53Sure.
01:54Oh, God.
01:54What led me to today?
01:55It's almost like we should go backwards.
01:57I think I've found myself through
various ways working on local-first
02:01software for quite a while.
02:03And we didn't really have vocabulary
for it until pretty recently.
02:07And so in the last couple of
years, as you know, yourself,
02:11and Ink & Switch, you know, uh.
02:13Adam and Muse and so on.
02:15There's, there's like a whole group
of people who have sort of like
02:18started questioning, you know, like,
is this way we're building things?
02:21Is this, this is sound,
this is like healthy?
02:23And sort of the idea of local-first
kind of grow out is to become
02:27more of a vocabulary as well as
sort of like the sort of handmade
02:30movement and stuff like that.
02:32I've started realizing that these
were values that I've had for a
02:35long time, but I wasn't aware of.
02:37I started programming when I was a kid
and I had my first job as a designer at
02:43an automotive company when I was like 15.
02:45I think it was something like that.
02:47I started my own company when
I was 17, maybe something,
02:52perhaps something like that.
02:53So, you know, very early in my
life, I started working and I,
02:56you know, I skipped video games
and I got gotten into those later.
03:00Don't worry.
03:00Um, but yeah.
03:01But yeah, so, uh, here I am, you know,
a couple, a couple of years later.
03:07That's awesome.
03:08Well, you're, you're very, uh,
humbly skipping a whole bunch
03:11of really monumental chapters
where you've like helped to start
03:15Spotify as a first designer there.
03:18And like, built a lot of the foundation
there and later also worked at
03:21the Figma and Facebook, et cetera.
03:24So I'm really curious to learn
more about those chapters.
03:27As you've already mentioned, I
think you've already been on a path
03:30to build local-first software way
before the local-first essay was
03:35out there, but you still arrived at
many, uh, Um, similar conclusions.
03:39So maybe starting with Spotify, as
there is also this really interesting
03:43parallel to me working on Overtone,
not trying to suggest I'm anywhere
03:49close to your level of polish with
your work, but I'm certainly trying to
03:55follow a bit in the, in your footsteps.
03:57So I'm curious.
03:59How you've thought about building
Spotify back in the days and how
04:02you've arrived eventually on sort
of like local-first ish paths.
04:07That's a great question.
04:08And before answering that, I got to
say, I think what you've got so far with
04:12Overtone is like better, higher quality
than what Spotify is today, but anyhow,
04:19that's a slightly different conversation.
04:21I don't think you should sort of like
undersell what you've created yourself.
04:25I appreciate it.
04:26Spotify came about in a time when
the technological constraints pretty
04:32much forced us to a decentralized
sort of local-first model.
04:36And so Spotify started in 2006.
04:39This is when we started working on it.
04:41The web platform.
04:42And I think that what is, what has been
in historically and still is today amazing
04:46about the web platform is distribution.
04:48And so, you know, that wasn't lost on
us at that point either, but it was just
04:52like, none of the technology was really
there to support something like Spotify.
04:56And so, you know, we built a,
it's like a fully native thing.
04:59You know, we built a native Windows app,
a native like Mac app, Android apps.
05:04There's a long list of
native apps that we built.
05:07You know, we had a NAT hole
punching traversal stuff, things
05:13way above my head of, you know,
like getting through firewalls to
05:17implement our peer to peer system.
05:18And there was like, you know, this
parity stream model where you can get
05:22Like different pieces of data to fill
your cache was very, very complicated.
05:26Right.
05:27I would say that 90 percent of the
complexity of, of the Spotify client and
05:32even the server side was due to the fact
that it was local-first and that evolved
05:38over a long time and there's, there
were many revisions, like kind of major
05:41revisions to the way, uh, they implement
and solve these problems at Spotify.
05:47That's awesome.
05:47Yeah.
05:48And I think there.
05:49Since then it's slowly but surely
degraded a little bit from its
05:53local-first origins and slowly, but
surely also being visible in the app,
05:58becoming a bit slower, et cetera.
06:00But I guess that's the price you have
to pay as the company grows larger.
06:06But so after Spotify, you worked
at Facebook and also at Figma.
06:11And I think there you've worked on some
aspects of the products that where you've
06:16also arrived on some similar data models
and data paths if you look at it from
06:21a certain angle, look like local-first.
06:24So can you share a little
bit more about that?
06:26Yeah, sure.
06:27When I was at Facebook, I led this
like OS project that they had.
06:30And we never shipped it, but you
know, that's kind of in line with
06:33right now I'm working on an OS,
so that's kind of interesting.
06:36And that, you know, after a year
of that, it kind of ended up not
06:40leading to where we wanted it to be.
06:42And I worked on Facebook
messenger, which it was in a
06:45company that had been acquired,
not long before I worked on this.
06:48And this is like, I think early
2012, something like that.
06:52And the team that they came with sort of
the acquisition of the product that, you
06:56know, later on underpin Facebook chat,
but these were like two things technically
07:00for a while was kind of local-first.
07:02And I think it had to be for
similar reasons that an email
07:05client has to be local-first.
07:07And so it was iOS technically
very limited platform at the time.
07:10That was kind of interesting to see.
07:12Did I have to work?
07:13Upwork and GraphQL together with, uh,
Lee Byron, Nick Schrock, Dan Schaefer.
07:18And that was really interesting.
07:20So, you know, I started out like a year
of, as a designer at Facebook, and then
07:24about a year as a software engineer.
07:26And after that, I worked at Dropbox
actually for a while and worked on their
07:29like data store thing, which is kind of
local-first thing with like automatic
07:32merge and, and, and diffing and stuff
and some other projects as, as well.
07:37Yeah.
07:37And, and Figma of course, like
fun foundationally is almost
07:41a CRDT kind of data model.
07:44Um, although it is a hybrid centralized,
decentralized type of product.
07:49So all of those products, uh,
I think all super well known.
07:53Most of those products, I would
not describe them as like, Oh,
07:56they're of course, local-first.
07:57I think now that you highlight it, I can
certainly see certain aspects of them
08:02following some of those principles of
local-first, but I'm curious in your
08:06perspective, what makes each of them
local-first also from today's perspective.
08:11It's.
08:11Oh, that's an interesting question.
08:13Obviously, like if you disconnect from
the internet, they keep working, right?
08:18That's the basic litmus
test of local-first, right?
08:20If I can send with Facebook
messenger, for example, which is still
08:23around, which is still local-first.
08:25If you open up that app and you send some
messages and you know, you do some stuff
08:29like make changes and you're offline.
08:32That works.
08:33And when later you come online, those
are reconciled with any changes that
08:37might've happened by other people.
08:39You don't like lose the
stuff that you've done.
08:42And I think that kind of sums up
how I would think about local-first.
08:44There are always limitations
to these things, right?
08:47Like there's some, like,
where do you draw the line?
08:49I think you have to think about
it from a human perspective.
08:51When doing this litmus test and not from
a computer technological perspective,
08:56meaning that there is just some
data that is just impossible to get.
09:00Right.
09:01For example, if you have in a chat
application, if you have a idea of
09:04presence, right, if someone is online or
not, like that's not, that's naturally not
09:07data that you can get when you're offline.
09:09Right.
09:10And if you did, like, it wouldn't
really be useful if you showed like
09:12cash data, like, Oh, Johannes is online.
09:15Like two months ago,
like that that's useless.
09:17Right.
09:18So I think you have to think
about it from a human perspective.
09:20Like if I sent Johannes a message and
I hit the send button, you close the
09:25app or close my phone or whatever I do.
09:27I know Johannes is going to
get the message eventually.
09:30That makes a lot of sense.
09:31So switching gears a little bit, uh,
and thinking about this more from like
09:35a developer perspective, how you built
those systems, what were, are there
09:39any sort of similarities that Emerged
from building those systems, maybe in
09:44terms of like how the data is stored
and how the data layer looks like.
09:48Yeah, it's interesting.
09:50So you and I have been, you know,
we've, we kind of friends, so, you
09:52know, we met a couple of times.
09:54So we've been talking about
these things in the past.
09:56So I think, uh, you know, where this is
going, uh, there, there certainly is.
10:01A very interesting, I think, uh,
observation that I've made with these
10:06like projects and with these projects,
I mean, like we mentioned these
10:09three so far, like Figma, Spotify,
Facebook Messenger, there are more.
10:14I've worked on a couple of more ones,
but I think these ones Perhaps some of
10:17the listeners have heard about there.
10:20It's almost like all of them end up
like sort of, if you think about a
10:24signal oscillating and then slowly
stabilizing into a line that is an
10:28equilibrium, it's almost like all
of them have stabilized around, like
10:32pretty much the same data model.
10:34Which is this kind of ordered map of,
of data, very practically speaking.
10:37And I think that's really interesting.
10:39Like if, if you have these individual
separate, like engineer organizations,
10:42even in different points in time,
ending up like with similar, but pretty
10:47different, like practical, like product
problems, and you end up with like a
10:51very, very similar data model, like could
there be so that that data model that they
10:57have is like actually a pretty good one.
10:58I don't know.
10:59So Facebook messenger.
11:00Is probably the outplay here in this
little, maybe a little bit different,
11:04but anyhow, , how I would describe this
like data model that I'm talking about
11:09is think about a list of things, right?
11:12So think about this thing as an array.
11:14Meaning that like an item in this list has
like a, has an explicit position, right?
11:19Position one or five or 2000.
11:21And now each like entry in
this list is a key and a value.
11:26And really it doesn't have
to be key in the value.
11:28The point here is that
you can say, give me.
11:32The fifth item in the list, but
you can also say, give me the
11:35item with this key in the list.
11:36And then the value, it's just
like a couple of bytes, you know,
11:41the value is not some like JSON
document or anything like that,
11:43the value could be an identifier of
another list deals like this, right?
11:48So now like you have a graph, right?
11:50So let's say you want it to build on this
so we can take Spotify as an example.
11:53So Spotify has playlists on the sidebar
and the desktop app or sort of in
11:57the mobile app, if you go to the home
screen, you have all of these things.
11:59They have a list of playlists
and you can make folders and
12:02put playlists and playlists.
12:04Right.
12:04And you have playlists from, you
have your playlists and then there
12:07are sort of a, you can browse
for other people's playlists.
12:10Right.
12:10And all of these things, at
least for a very long time, were
12:13all the same data structure.
12:15They were all like this type of list.
12:16It's right.
12:17A playlist, think about it.
12:18It is pretty much like what
I'm talking about, right?
12:21You have a list of songs.
12:22They have a specific order, right?
12:23Since you might want to play
this song before that song.
12:25So that's important.
12:26And a song itself.
12:28Can be represented also as a list.
12:31But here you use the keys, so
a key could be artist, right?
12:35And sure, there can be many
artists, but let's simplify it.
12:38So a key can be artist and another
key can be, you know, song title.
12:41And another one is run length and so on.
12:43And now your playlist is
essentially the identifier.
12:47Each entry in your playlist is
an identifier of a list that
12:50represents a song, a track.
12:51I think it's perhaps obvious at this
point, you can now have a, uh, a folder.
12:56That's essentially a playlist
with links to playlists.
12:58Right.
12:59And now you have a graph and you can
build this graph up and this list
13:02of things that is the guarantee,
the ice date is the isolation, like
13:07primitive in something like Spotify.
13:10So like, if I say like, make these,
like move these songs in this playlist
13:14and move these songs in that playlist,
then these are two transactions.
13:18If you want to think about it that way.
13:19You cannot like, you cannot say
either, like move these things in
13:24these two playlists or don't move
anything in these two playlists.
13:27You can also only say, like, in within
this list, make these changes and
13:32have those, like, give me some sort of
guarantee that they will be reconciled
13:35in a predictive manner in all instances
that have access to this playlist.
13:41So the diffing and emerging
happens on that kind of list level.
13:45And interestingly, this is
kind of how Figma works too.
13:47And there's like some articles,
this is not any trade secrets here.
13:51Some articles published about this
on the Figma blogs and Figma pretty
13:54much have the same principle, right?
13:56There's a graph that's built up
by these sort of like entries.
14:01So you can think about them as a
log or you can think about them as
14:03like a serialization of a graph.
14:05It goes both directions and that's
the level where you different merge.
14:09And one of those lists
is one document on Figma.
14:12And so one document is that like.
14:14You know, it's a unit about isolation,
like either of these things change, you
14:18know, or they don't like one document
that's kind of in one known States and
14:22Facebook messenger in a similar way,
you have like messages and a message,
14:26you know, similarly, it's like part
of a list in a conversation and so on.
14:30That's super fascinating.
14:31I think most listeners on this
podcast, when they think about data
14:35models and data systems, there's
typically one of two reference points.
14:40The most common one would probably be like
a traditional database, whether it's on
14:44the server side where you have something
like Postgres or MySQL, et cetera, or if
14:49you're a mobile developer, you are used
to using SQLite in your client directly,
14:54or that's now also possible on the web.
14:55So I think that's the most
traditional approach is like.
14:59Rely on a data system as a database.
15:02So I'd be curious how your
suggestion kind of compares to that.
15:06I would assume maybe what you've described
can be a foundation of a database, but
15:10what would be the downsides of using
a database directly to build your app?
15:15Contrasting with your
approach and also now with.
15:17A local-first CRDTs is a very common
approach to have data structures that
15:22are also allow for collaboration.
15:24So maybe you can contrast your
approach that you've described to
15:28using a database or CRDTs directly.
15:31Yeah.
15:31I think this is an interesting
conversation, which is like, what
15:35tools do you use at one point in time?
15:37And like, what is a good
fit for your problem?
15:39And there's almost like.
15:40If you imagine some sort of graph
between perfect fit and time
15:44required and stuff, there are these
two lines and they meet somewhere.
15:47And it's very specific to each project
and you want to kind of hit that spot.
15:50Okay.
15:51Let's, let's think about like a
bunch of different projects, right?
15:54Everything from something like Spotify,
there's like a, you know, a big
15:57undertaking, like a company where, you
know, we're going to be, okay, we're going
16:00to spend a year or two of like 10 people.
16:02And we just kind of like, you know,
pour like tens of thousands of, of hours
16:06into making this one thing go well.
16:07And on the other side of the spectrum,
think about like a, you know, sort
16:11of a Robin Sloan home cooked meal
type of like, I'm gonna like make an
16:15app in an afternoon sort of thing.
16:17I think these two, you gotta
take very different approaches
16:20for these two things, right?
16:21If you build this company-size thing
by just like just throwing some generic
16:25thing on it where it really matters.
16:26And I got to say, you know,
there, there are going to be.
16:29A hundred different problems you need
to solve and 95 of those problems,
16:33you should solve a generic technology
and it's really hard to know upfront.
16:36There's 5 problems that really will set
your product aside from the competition.
16:40And those are the 5 problems where
you want to think really hard and
16:43solve for really, really well.
16:45So say that you've
identified those 5 problems.
16:47You don't want to throw
something generic on there.
16:50Because that's going to like
ruin your opportunity to really
16:53differentiate with Spotify.
16:54For example, we knew that like to
skip in a song that should never
16:58be slower than 200 milliseconds.
17:00And so a lot of engineering went into
just making sure that that was true.
17:02Right.
17:03And that's kind of how you find
some of those like five things
17:06with the home cooked meal type of
like, I'm going to spend a week
17:08and making an app kind of thing.
17:10You don't, you just don't
have the luxury of that.
17:12Right.
17:12Even if you do identify, these
are like one or two things that
17:15Like make my thing like different.
17:17Maybe my friends will like it more.
17:19You got to be creative.
17:20And I think in that scenario and find
either really hacking solutions or
17:24like just be super lucky and find
some existing stuff that does that.
17:28And I realized we're on a bit of a
tangent here, but I think like it's
17:32important to have that, like setting
that like picture frame, so to speak.
17:35Right.
17:35So with something like Spotify and
something like Figma, which both end up
17:40with like pretty much the same or very,
very similar data model, those data
17:44models are specific for their problems.
17:45They're both in both sides.
17:47They are one of these like five
things that makes them stick out.
17:50Right.
17:50Like if Figma had not came up with
it's a sort of CRDTs smelling semi
17:56centralized sort of, uh, document graph
format, whatever, it probably wouldn't
18:01have been as fast and, you know,
probably wouldn't be able to scale and
18:05it probably wouldn't feel that very
good if it wasn't that fast, right.
18:08And maybe it would never have gotten
traction in the market and wouldn't
18:10have been successful as a company.
18:12And similar for Spotify, like if
collaborating on playlists and
18:16stuff will be really slow or you
would just like sometimes lose data.
18:19You would probably also
have lost users early on.
18:22And these solutions were very specific.
18:23So I think that that tension exists.
18:25And when building something
ourselves, maybe we're not on
18:28the extreme of like, I only have,
you know, 10 hours to make this.
18:31Maybe it's more like, you
know, I've got maybe 200 hours
18:33over the course of two months.
18:35I think it's very, it's very like.
18:37Attractive.
18:38To reach for an existing solution,
but I think in many cases it ends up
18:41costing us as much to use third party
code as it does to write it ourselves.
18:46So think about it.
18:47Let's say you use like a
library someone else read.
18:49So you put that in there.
18:50It does mostly what you want,
but at some point it will not.
18:53Right.
18:54Like every single piece
of code has bugs, right?
18:56Like I've never worked on
something that doesn't have bugs.
18:58Everything is bugs, right?
18:59So you just assume that
that's the thing has bugs too.
19:01And at one point there's gotta be,
uh, there's gotta be an issue, right?
19:04Or like, it doesn't do the
thing you want it to do.
19:06Maybe there's a bug and it does do
the thing that you want it to do.
19:09Right?
19:10So basically now you have
to fix that code, right?
19:12Or change it.
19:13And that means that you have to
read the code and understand it.
19:15And I argue that probably
takes a very similar amounts of
19:19effort in the common case as it
would, if you wrote it yourself.
19:23You probably, to understand it,
you're going to have to go beyond
19:26the code and understand the, you
know, the logical aspects of it.
19:29Maybe you have to read some like
technical papers or some books or
19:32speak with some people to understand
how things are solved in a way,
19:36not just like what the code does.
19:38So I'm not saying like people should
always go and write their own thing.
19:41Obviously there's gotta be a couple
of things , that don't fit this,
19:44they're outliers to what I'm saying.
19:46So if you, if you say, I kind of
need like a relational database
19:49and you're like, okay, I'm going
to build my own Postgres or SQLite.
19:52That's, I think, obviously a bad idea
since like there are existing solutions,
19:57really well tested, really high quality.
19:59If they don't do what you want it
to do, it's extremely flexible.
20:03You can probably bend it to
do what you want it to do.
20:05If you were ever run
into performance issues.
20:07You can solve the problem then, right?
20:09Assuming that like the solution
fits the problem that you have.
20:13I really like this mental model of like,
you choose for like 95 percent of stuff.
20:18You use like the default things, but like
on 5 percent you spend your innovation
20:23tokens and that's super interesting.
20:26I, and I definitely agree that choosing
the right foundation for your data model.
20:31It's a super high leverage bet that you
can place your innovation tokens on.
20:36One more thing to consider is
the, almost like the, how well the
20:40glove fits or like the Swiss army
knife problem, if we call it that.
20:45So let's say you've got to,
you're going to cook some food
20:47and you need some tools to cook.
20:49You need some pots and pans
and some knives, right?
20:51As a cutting boards.
20:52I think one approach to doing
this is you have one pot.
20:55Or maybe you need two pots because
you're doing two things concurrently.
20:58But like you have this
kind of minimalist mindset.
21:00You have one knife, you used
up all your, all your chopping.
21:03You got like, you know, one or two
pots and you cook everything in it.
21:07And then you got on the other side,
you got the maximalist mindset.
21:10You have like 20 different
knives of different sizes.
21:13You're right.
21:13And you have like 14 different pots and
you have rice cooker for that kind of rice
21:17and a rice cooker for this kind of rice.
21:18And you know, there's
this like specialization.
21:20I think that this thing
happens with technology too.
21:23And especially early on.
21:25I think that there's a, an appeal to
using something that's very flexible
21:28early on to have those 20 knives
available just in case I need like a tiny
21:33paring knife or a big butcher's knife.
21:34Right.
21:35Just in case.
21:36Right.
21:36And so I think a lot of people reach
for something like SQL late early
21:39on, just because they think, oh,
I might need like some inner outer
21:43join search thing hidden, you know.
21:46Functions in a database kind of thing,
maybe down the road, I need that,
21:49you know, maybe I need to do like
some something, you know, I need to
21:53set up constraints and to protect
myself because like, maybe I'll
21:55forget what I did and stuff like that.
21:57And, you know, that, like, like
everything, there might be some,
22:01there might be some truth to
that being like useful, but I
22:04think in most cases it's not.
22:06And I think in most cases, we start
out with too much flexibility.
22:10And the problem is that anything that's
simple will grow to become complex.
22:15Or another way of thinking about it
and complexity always grows, right?
22:19Anything you have, it's like kind of the
law of entropy, essentially, like whatever
22:24you have your computer system, whatever
your app over time will only grow complex.
22:29And you have to work really, really,
really hard to do the opposite, to
22:32make something complex, grow the
other direction to the towards simple.
22:36And so, you know, if you agree with that.
22:39It's, I think it's pretty reasonable
to say if you start out with something
22:43that is pretty flexible, it's probably
pretty complex and it will become
22:47very, very complex in the future.
22:49And so I think in most cases,
what people need, it's just
22:52like a key value store early on.
22:53And I mean, I mean, that's what
SQLite uses under the hood, right?
22:56SQLite is like, you know.
22:57A set of like functions is
essentially on top of a key
23:00value store to make that easier.
23:02And I think in most cases, if Facebook
messenger is a key value store, for
23:05example, at least when I worked on
it's a level DB before rocks DB thing.
23:09So yeah, anyhow, I just want to say that
and wrapping that up, what I was trying
23:12to communicate here is that when starting
out with something new and thinking
23:15about databases can be, you're smiling
because I know like with Overtone, you've
23:18been thinking a lot about this and I
think coming to the similar conclusions.
23:22Start out with something that's like a
glove that really fits your hand instead
23:25of like a whole wardrobe full of like
potential winter clothes you might need.
23:29Yeah, I love that analogy.
23:31And I've seen this story now so many
times that either you start out with a
23:36database and then step by step you like
remove layers from the database because
23:41you need to go more low level and you
need to have that performance or power.
23:45Or you go the other way around and
you start it up from scratch and then
23:49your app kind of becomes a database.
23:51I don't think there is a right or wrong.
23:53I think there's a good fit for the
right use case, but I agree that
23:57this is like a super common scenario.
23:59And it's very interesting to see
that all of those different companies
24:03that you've worked at, that this
emerged in a very similar way.
24:07Moving on a little bit from
the data nitty gritty details.
24:12On to a more broader topic.
24:14The most.
24:15popular platform right now, the web,
you've been building things on many
24:19different platforms, but I think that the
web has always been like a common factor
24:24in all of the systems that you've built.
24:26I'm curious, what is your
perspective today on the web?
24:29The web is what got me into programming
computers in the first place.
24:33Well, that's not strictly true.
24:35I started with like in a
friend's basement on basic.
24:38But the thing that really pulled me
in was like the web in the nineties.
24:42And I thought it was like absolutely
magical that I can go on a webpage and
24:46it usually said CGI bin in the location
bar and I can go to a webpage and I
24:51can like make a change and then I can
go to a friend's place who also had
24:54a modem and we can look at the page
and I can see the change that I made.
24:57And that to me was like.
24:59That that's magic.
25:00That's like, that's amazing.
25:02Forget everything else.
25:03I don't want to be an astronaut anymore.
25:05Like I want to make that thing.
25:06So like, I've got, you know, I've got a
lot of love for the web and yes, I worked
25:11on a lot of web stuff through the years.
25:13And I even worked on like a,
together with a friend of mine in
25:172010 or so, we had like a, a fully
local-first, like website, and then
25:21even, even the like image processing.
25:23Like decentralized on clients,
computers and stuff like that.
25:26No Bitcoin mining, but you know, it
kind of smells like that a little bit.
25:29So I think the, in the last 10 years
though, it's like gone in a direction
25:33that I'm not super happy about.
25:34So first I want to say that like what
is really, really powerful and valuable
25:39with the web is not HTML and CSS.
25:42I think that's mostly like
a historical accident.
25:44What's what is so, so powerful is
the distribution, the fact that I
25:49can give you just like a URL, which
is a piece of text, which is like
25:52the most ubiquitous data format.
25:54And, you know, exactly what to do.
25:56I don't have to ask you to like,
Oh, by the way, with this piece of
25:59text, you have to go to that app
and do this thing, you know, right?
26:02I can send it to, you
know, exactly what it is.
26:04So it's ubiquitous, the human
understanding of what a URL is.
26:07You see that.
26:08My mom sees the URL, she
doesn't understand HTTP like,
26:11and she doesn't have to, right?
26:12But she sees it, she knows the URL, she
punches it into a web browser and she
26:16will see something that's like pretty
similar to what I see, you know, it's
26:20like, you know, it's similar enough
that it feels like it's the same thing.
26:24And that I think is, is so valuable.
26:27That all the downsides of the web
and all the valuable things of
26:31other platforms are just like,
just not tipping the scale, right?
26:35Like this is way so heavy on sort of,
uh, you know, an imaginary scale that
26:39the web platform I think has won.
26:40You look at like a tech workers, like
laptop today, it's probably a MacBook,
26:46but do they run any native apps on it?
26:48Like probably not, which is
kind of like bonkers, right?
26:50You're going to, you're going
to look at it and use Slack.
26:52It's a web view, right?
26:54And they use Figma.
26:55It's a web view.
26:55And they use like, uh, Discord.
26:57It's a web view.
26:58And they use Spotify.
26:59It's these days, it's a web view, right?
27:01And then they probably have a web
browser with like a hundred tabs.
27:04And, and that's obviously a web thing.
27:06And what's left, I don't know,
files on their local, like those,
27:10those are not like web things.
27:11Right.
27:11And so I think it's like really
hard to argue that the web platform
27:14hasn't like won in terms of.
27:16Becoming the dominant platform and
platform, including like Microsoft
27:20windows and iOS and Mac OS as platforms
here alongside web, um, because the
27:26web really does feel like a sort of
an operating system or a platform.
27:30It's like a target for
software development, right?
27:32And distribution.
27:33So where web has now has
definitely won is the.
27:37best distribution mechanism
that we have today.
27:39I think we've also sacrificed a lot
when I think there's like the sort of
27:43fuzzy word of like, is the app native?
27:46I think there's like no clear line
of an app being native or not.
27:50I think it's rather like, does
it feel native , corresponding
27:53to a certain platform?
27:55So where would you hope that.
27:57The web would go further.
27:59Where do we leave money on the
table in regards to the web?
28:02That's a good question.
28:03And I realized now that we're a
little bit off topic of the sort
28:05of general, you know, theme of this
podcast, but I think that's okay.
28:09I think this kind of relates somehow.
28:10And I think what you were saying
Johannes is I think really like stirs
28:14my mind in a really good way, which is,
you know, What is native and perhaps
28:19it's something that like feels native.
28:22Right.
28:22And what does that mean?
28:23I think what, what it means to me
is if I run JavaScript or if it's
28:28objective C or Swift or Android Java
or go, it's all the same, right?
28:34Like all of these things just,
you know, Are translated different
28:37ways to the same instructions on
the CPU and use the same memory.
28:41There's really no technical
difference below a certain level
28:45of any of these technologies.
28:46Right.
28:47So it would be incorrect to say
that like web is a different, it's
28:50like a user, a different CPU, like
the JavaScript CPU, that like.
28:54That's not a real thing.
28:55Right.
28:55So these are all the same thing at like
a pretty low level on the computer.
28:59And so what leaves us then is like,
not really like, does it run a
29:02different CPU because it doesn't,
it's more about that feeling.
29:05I think that feeling comes from
and why it, why it matters.
29:08We can talk about too.
29:09But I think that feeling comes
from just like things looking
29:12the same and behaving the same.
29:13Looking the same, I think is
less important behaving the same.
29:16I think it's a big deal and looking
the same where it's important is to
29:20recognize that something looks similar.
29:22So let's say we're walking outside.
29:24We walk in a park, right?
29:25There's like trees and stuff.
29:27We can identify a tree as a tree.
29:29Although we don't know if it's like
an oak tree or a pine tree, right?
29:33Or like some specific, like, type of oak.
29:35Maybe we do know that, oh,
that's probably an oak tree.
29:37That's probably a pine tree.
29:38But we don't know the subspecies, but it
doesn't matter the fact that, like, we can
29:42tell that that's a tree and that's a rock.
29:44This is the sky and this is the ground.
29:46Like those things are really important.
29:48Then if the grass is green or yellow
or brown, that's less important for
29:52our, like, you know, ability to,
like, navigate, right, the space.
29:56And I think the same is true in a, in a
user interface, that if I see something
30:00that looks like a pop up button and, or
something that looks like a button, Right.
30:05The most fundamental of UI elements.
30:08If it doesn't behave like a button,
like my mind will break, but it doesn't,
30:11it doesn't have to like, look exactly
like the button that I'm used to.
30:15Right.
30:15If I'm using macOS and the button, this
button we're talking about now looks
30:19totally different like aesthetically,
but I still identify as a button.
30:23The fact that it looks
different is not important.
30:26Right.
30:26As long as it behaves the same.
30:27So I would say that behavior is,
is really the most important part.
30:32It's like recognizing that it is about
the yes, that behavior, big deal.
30:36And I think this is where the web
platform has a huge problem because
30:40it comes to not an analogy, right?
30:43So imagine that we have like a planetary
system with different planets, you know,
30:46Mac OS or iOS, let's take that as an
example, iOS, that's one planet, right?
30:51You got a set of like rules there, you
know, grass grows in a certain way.
30:55There's a certain amount of gravity.
30:56The sun rises in a certain time.
30:58There's like a bunch of rules and there's
a world and everything sort of is.
31:02In harmony with these like laws of
physics there, and then you go to
31:05Microsoft windows and there's a different
world and some things are similar, but
31:08like, a lot of things are different.
31:09Right?
31:09And then you go to the,
to the, to the web, right?
31:13But the web is not a planet.
31:14The web is another planetary system.
31:16There's like, not one website works
the same as the other website.
31:19This is actually a problem
from a business perspective.
31:22And it's like a lot of big things,
you know, run by businesses
31:25and they care about money.
31:26And so I think they're
leaving money on the table.
31:28By making things like
behave differently, right?
31:31I go to, I don't know, uh, a
website for, uh, for getting
31:35groceries delivered, right?
31:37And now this website has like some
pop up menu that's like some homemade
31:40thing and it doesn't work the way I
expect it to and now like that, that
31:44becomes like a cognitive, like work
that becomes like a, a road bump
31:48that becomes like, like a detour.
31:51Right for myself, that's something that
I have to spend my, my limited energy on.
31:54Maybe I go to this website.
31:56And again, order groceries.
31:57I haven't done it before.
31:58I'm like, is this going to,
is this, is this a good idea?
32:01Should I do this instead of
going to the grocery store?
32:03Blah, blah, blah.
32:04Then let's say that this website
would be like, there's a big hand
32:07coming up in the middle of the
website that says like, fuck you, man.
32:10It's like, you suck.
32:11And like, I would pretty quickly as
close the website to go somewhere
32:14else, probably if it started, like,
assaulting me sort of verbally.
32:17So that's like a very
extreme version of it.
32:19And I think these small things
are these, like, tiny things
32:22to build up to the same thing.
32:23Right?
32:23Eventually, when it's like, I filled
something out in the form, and then
32:27I switched tabs and I came back and
like, They had some server side session
32:31or some like insane idea like that.
32:33And it like wasted all of the stuff I
read them because I hadn't submitted
32:36it because my, my session expired.
32:38Right.
32:39I'm going to be furious
and things like that.
32:41Those kind of, they almost account
toward like a rising thermometer.
32:46And when it gets too warm, I'm
like, Ooh, I'm starting to sweat.
32:48I'm out of here.
32:49I know I'm like saying a lot of words
and it's a little fluffy, but I think
32:52that there is some, some real value left
on the table here in terms of like,.
32:56Removing that friction and instead
having that like limited cognitive
33:01supply of a user of a visitor of
whatever thing you have focused on
33:05what makes your thing different.
33:07Right?
33:07If I go to Overtone and I use
Overtone, like how, like I scroll,
33:11that shouldn't be like the thing
that I spend time on, right?
33:14How I select what happens if I double
click like these things, if I have
33:18to spend my brain energy on that.
33:20I'm not going to have much brain
energy left on like what actually
33:22makes Overtone interesting.
33:23So I think then, you know, where,
where is this not true that I'm saying?
33:27I think it's like with
entertainment and art.
33:29Right.
33:29If I visit like a website that is
supposed to give me an experience,
33:32what I'm saying does not apply, right?
33:34If I like play a video game and part
of the video game, it's just like,
33:37there's just some, some ideas about you.
33:39You kind of want the person to think
about like how you interact with something
33:43instead of a button on top of like the
screen, maybe you like, there's a 3d
33:48world and you interact with some liver.
33:50So, so it doesn't apply everything, but
I think in vast majority of web apps,
33:55What I'm talking about is like an issue.
33:57Right.
33:57Uh, I always look about like the web
as a spectrum from going for like what
34:03the web was originally created for
websites to now what we are also using
34:08the big web hammer for is like for
web apps, and I think there is this
34:12spectrum and my theory is that we're.
34:16the web apps, this is where it really
matters that the apps feel more native
34:21and that all the paper cuts are really
like worked out, but they are not.
34:26And I think this is where we are
using the wrong, the wrong hammer
34:30for building those, those web apps.
34:32And so I think one way to think about
addressing that is I think to build
34:38those apps in a, in a more local-first
way as a way out of that misery.
34:43Would you agree with that?
34:44Or do you have other ideas how we
make the web better in those cases?
34:49I think the local-first
approach is one of them.
34:52I think that it's.
34:53It's interesting how making a web app
local-first is kind of like playing
34:57on hard mode, I think, since the web
is fundamentally centralized, if you
35:01think what, what defines the web?
35:03Well, I think hypertext, like, you
know, originally defined the web.
35:06And I think today it's more like web
browsers define the web and hypertext is
35:09like 1 medium, you know, you could open a
PDF, you know, in SafarI can open a PDF.
35:14I can do that in Chrome too, but it sucks.
35:16And it's fundamentally like built
on this idea that like, I have a
35:20portal that connects to a service
somewhere else over the internet.
35:23And, you know, now we have
like things in the web browser
35:28that kind of fuses the border.
35:29But, um, if you think about like a
local email client instead, right.
35:34Or an email client running on iOS or
something like that, then you're not
35:37starting out in an environment that is.
35:40Already set up against you, so
to speak, if you're not trying to
35:43build something local-first, right?
35:45It's kind of neutral ground, right?
35:47You can build an email client that
works like a web browser, right?
35:50That like the first thing that does
when it starts up is to connect to
35:53a server somewhere and ask it what
emails does Johannes have, right?
35:58Another way of doing it, you can, but
you have to write that code, right?
36:01And now they're like conscious,
like choice that you can make is.
36:06Let's read from a database.
36:07What emails I already know Johannes have.
36:10And now I'm going to go and ask
a server if there are any new
36:12emails to put in that database.
36:14Whereas on the web, like you have
that first choice made for you.
36:17And to some extent, like you
can't even undo that choice.
36:20You have to kind of work around it.
36:21So I think like your question
was really about like, does
36:24local-first make the web better?
36:26Like, what can we do to like fix it?
36:28And what's the issue?
36:29I think the, the solve here is,
is more about the user experience.
36:34I think.
36:35You said the web was kind of made
for web pages and, and I would go a
36:38little further to say the web was kind
of made for like documents, right?
36:41Like text document.
36:42I think your average marketing
website when information about some
36:46service or product or whatever, or
like, uh, you know, an essay or an
36:50article about to learn about something
that HTML and CSS is great for, I
36:55mean, this is what it's made for.
36:57It's fantastic.
36:57It's like a layout tool for like, you
know, text and images and video and stuff.
37:01Right.
37:02And of course we've gone way beyond that.
37:03We can now have interactive elements to
learn about how like a, I don't know, some
37:07sort of water lock on a boat works right.
37:09By like playing around with it.
37:10And that's super cool.
37:11And I think that's where it
like really shines the medium.
37:14But then you think about something
like Figma where we, where we
37:16spent over 1000 engineering
hours on just the context menus.
37:20Which is insane and they still
kind of suck, you know, and
37:23that that is like, not okay.
37:24I think it's a good, like, think
to think about, like, do I want
37:27to spend if I care about quality?
37:29And I think a lot of people listening
to this do care about quality.
37:33And it's maybe 1 of the reasons they
even started thinking about local-first.
37:36If If I care about the quality of the
thing that I'm building and the people
37:41have a good experience with it, there's
a couple of trade offs I have to do.
37:43Right?
37:44Like, first off.
37:45Yeah.
37:45You can't just get quality for free.
37:46Quality has a cost.
37:48So usually that means I will have
less features or fewer features.
37:51And it probably also means that I will
have to spend more time in a couple of
37:55areas that are like hard to identify.
37:58And in turn, that means I have to spend
time identifying those areas, right?
38:01Something like context menus at Figma.
38:03Time, like trying to understand, like,
what, what is a good context menu?
38:06Like, what do people expect?
38:08This is still a lot of, still a
lot of product or engineer work or
38:11whatever you want to call it, design
work, but it's not work where you
38:14like write code or like draw things.
38:16This is like, you speak with
people and you thinking whiteboard
38:18and all that kind of stuff.
38:19Right.
38:19But that's still like an important part.
38:21Uh, on the road to getting to something
that has like decent quality, because
38:24then the next step is going to be, now
that we understand like what people
38:27expect and, and I think quality and
expectations are very much intertwined.
38:32Now we know what, what to build.
38:34And then you have like something like
the web platform with this input event
38:37model and it's focusing system and all
this kind of stuff you have to sort
38:40of like, you know, that's another like
place where you got to invest time.
38:43Right.
38:43So I think like what a possible better
future might look like is if you imagine
38:48in a web browser, Having a different
content type that's like, I don't know,
38:53um, application slash application.
38:56I don't know, whatever.
38:57It doesn't matter.
38:58So like a server, like sends back
like a blob of data that is this
39:03different format, uh, instead of
HTML for something that's an app.
39:07Right.
39:08I think that's a stopgap solution.
39:09And I wouldn't be surprised if
someone like Arc or something is
39:12like working on this right now.
39:13But that's going to require developers
to like write apps in a different way.
39:17And I think that's a.
39:18Big deal.
39:19And you're still going to be in
the scenario for web browser.
39:22That's fundamentally centralized, right?
39:24The whole model is like you're
in inside this like little box
39:28on your very powerful computer.
39:30You put this little box inside your
like amazing powerful computer.
39:33That's like literally like visually
a little box inside and this
39:37little box inside now can only
use some of your resources, right?
39:40It's single threaded mostly.
39:42And it can use maybe two gigabytes
or four gigabytes of your
39:44like 90 gigabyte, like memory.
39:47And, you know, you got all of these
like kind of weird things and that
39:50is not going to go away, but, and,
and the more long term solution might
39:53be something, something a little
different or like maybe bringing back
39:56native apps, whatever that means.
39:57I don't know what that means, but
anyhow, the user experience here, I
39:59think like moving away from HTML and
CSS, it's, it's a, it's a, I don't
40:04even, I can't really see the path.
40:06Toward that, but I think that
would be like a true improvement to
40:09quality where I can say, I want a
context menu with these things in it.
40:13And I know that it's going
to work and work everywhere.
40:16And people know what to expect.
40:17And I can spend like maybe one
day on putting that context menu
40:21together and testing and stuff
instead of like, you know, a year.
40:23What do you think?
40:24Like, you've been asking
me a lot of questions.
40:26I'm also really curious what you think
about these things because you actually
40:30think about this like day to day, right?
40:32When it comes to like the web.
40:33Would you agree or do you disagree when
it comes to like the, you know, the
40:37quality and the fit of HTML and CSS
here toward like a model that's better?
40:41I completely agree.
40:43I haven't reached the context menu stage
yet in the app development journey,
40:47but I've so far spent a lot of time on
tables and just making the app fast.
40:52We haven't talked, we've like somehow
touched on performance, but another
40:56aspect besides just raw capabilities of
the web is also just making the app fast.
41:01Building a fast web app is something
that's like you said, like it's, it's
41:06an hard mode, not just hard mode in
terms of capabilities, but also hard
41:10mode in terms of performance, since
if you want to build things in a
41:14like rich, interactive experiences
with that HTML, CSS document model.
41:20That's not what it was built for.
41:22And so this is where I find myself
reaching for other approaches now.
41:27So I'm specifically for like the table
component I've mentioned, I'm using a
41:31great tool or a great software project
called Glide Data Grid, which, um, is
41:37like a React table implementation, but
which is rendered entirely on a canvas.
41:43Um, and so that allows you to get
like 120 FPS smooth experience and
41:49way outperforms any other react
table implementation out there, but
41:54you gotta switch your mindset a bit.
41:57So you're no longer tweaking
CSS values and wrapping things
42:01in 5 deeply nested divs.
42:04But if you want something more custom,
you got to reach for like the canvas
42:09API and go back to drawing rectangles
and so on, which I personally enjoy.
42:14And I think a lot of other
people have also come to like
42:17rediscover this approach.
42:19That is actually quite nice.
42:20But I think, Looking at this more broadly,
I think there could be almost like a
42:25app kit kind of abstraction, what you
got on, on iOS, on Mac, but maybe for
42:31the web, maybe like a whole new, whether
it's, uh, the MIME type like application
42:36slash application or something else, but
that I think we have now really powerful
42:41primitives, whether it's web GPU and
WASM, et cetera, where we can have like
42:46entirely different model, we leverage
the distribution mechanism of the web.
42:51But we're going for like a flash 2.
42:540, but I think there's some really
interesting developments there.
42:59And, uh, this glide data grid canvas
table that I'm using, I think that's just
43:03like the beginning of, of new approaches.
43:06So another, uh, notable project that
comes to mind is, uh, it's called eGPU.
43:11I think, uh, no, sorry, eGUI.
43:13Oh, by Emil at, uh, uh, Rerun.
43:16Exactly.
43:17Yeah.
43:18So that, that's a really
compelling project.
43:20I think it's still, um, I think it's
both come along really, really far, but
43:26it's still early compared to like all the
primitives that you're getting from like
43:31HTML and CSS, and it's kind of a miracle
how capable browsers still are and how.
43:38Relatively speaking, how performant
all of those things are compared to
43:43the complexity that they can afford.
43:46So I'm of the same opinions like that.
43:48I have a love hate
relationship with the web.
43:51Yeah.
43:51I just want to like reflect
on what you were saying.
43:54It's, it is interesting though, right?
43:56How you're talking about the table
component, how you're basically
44:00just like exiting out from.
44:01All of the HTML and CSS, right?
44:04It's kind of what the canvas is.
44:05You punch a hole through all
of that stuff and you say, I'm
44:08just going to go like start from
scratch, basically, and draw pixels.
44:11And now you're going to, you're
going to make some trade offs, right?
44:14Like you're going to have
to implement your own like
44:16shadow DOM for accessibility.
44:18And you're going to have to like, you
know, re implement things like scrolling.
44:21And you're going to, there's
like, now there's like an
44:24ocean of stuff you have to do.
44:25And perhaps that's why you use the
third party code that maybe has
44:29already climbed this mountain for you.
44:31But it is interesting how, like
the solution, so to speak, for your
44:34problems there was just like, not
use the web platform essentially.
44:38Right.
44:38Like not use HTML and CSS.
44:40I think that's why, like there's
eGUI, there's like, you know, there's,
44:44uh, Deere image GUI, there is make
pad, there's like Zed and warp.
44:50And there's like, there's so many
projects that develop their own.
44:52UI frameworks, some of them target
just like some unknown platform.
44:57That's kind of all of them.
44:58Some of them specifically target the web,
but I think what they all have in common
45:01is that like, they don't use the web.
45:02Right.
45:03And I think the web is like
the dominant HTML and what
45:06makes a computer fast, right?
45:08Like, or what makes
software on a computer fast?
45:10So the hardware we already talked earlier
about the hardware that we have today.
45:13It's like.
45:14So ridiculously fast.
45:17It's hard to comprehend how
like fast computers are today.
45:20Even computers from five years ago
are like mind blowingly fast, but
45:24software keeps getting more complex.
45:27Right?
45:28So there's always that, like, there's
the balance of hardware, hardware
45:31engineers makes things go faster and
software engineers make things go slower.
45:35Right.
45:36There's that, that it's like a pump.
45:38It goes like that forever.
45:39And so, yeah, you take something
like, like one of these, like, uh,
45:43new GUIs that are implemented on just
like, uh, Canvas or like Figma, right.
45:47They are fast because like,
they just do less like shit.
45:52Like it's as simple as that, right?
45:53They just like cut out some
stuff that they don't need.
45:56What makes software go fast on a
technical level at 15, 20 years ago, it
46:00was, it was like, uh, processing speed.
46:02People will do a lot of smart things
with caching to make things go faster.
46:05Today it's memory, right?
46:06If you, and memory and context switching,
and you know, you can go further up in the
46:10abstraction stack, but like fundamentally
you have a CPU, right, or like a core of
46:15a CPU and you have a conveyor belt and on
the conveyor belt are instructions, right?
46:19And there are things like
load something from memory.
46:22Uh, and load something else from
memory, add those two things together
46:25and then put the result, like
upload that to memory here, right?
46:29That's all it does.
46:30That's all the computer does, right?
46:31It just goes like this forever.
46:33The speed of this conveyor
belt, and that's the CPU.
46:36It is so fast that it's basically today.
46:39It's like almost fully limited.
46:42By its ability to communicate with memory.
46:44So memory is really the limit.
46:45It, of course there it's
more complex than this.
46:47And there's like many levels
of memory and stuff like that.
46:50But I think what happens is we use these
like high level things like JavaScript
46:54running in a, in like virtualized in
some container on top of something else.
46:59So now like you got basically none of
the benefits of really fast memory.
47:03That is the CPU has like a
memory built in called registers.
47:07And then it has like a.
47:09A very small piece of
memory that's nearby it.
47:11That's like the first level of
like a cache, like a line cache
47:14and and further and further away
and fetching something from memory.
47:17It's kind of like, imagine
you're sitting by your desk
47:19and you need a pen to write on.
47:21If you have opinions next to you, that's
kind of if it's in, in, in the line
47:25cache in the CPU, you just pick it up.
47:26Be right with it.
47:28And now like getting the pen from memory,
it's like walking to your neighbor's
47:32apartment to borrow a pen, going back
and writing one thing and then going back
47:36to the neighbor again to leave the pen.
47:37Like that's the order of
magnitude of difference.
47:39Right.
47:40And now you use something like, like a
higher level thing, like JavaScript, the
47:43Python, or there's like many, many things.
47:45I'm not saying one thing is like bad
or good, but just the concept of it.
47:49Urea is always going to have to go to
the neighbor for that patent, right?
47:52You can very rarely like use the same.
47:54If you have things adjacent in memory
and you access them, like you're
47:57looping over like a, an array of
things that are all in this contiguous
48:01array of things, like in memory.
48:02That's like, that's like basically free.
48:04If you have an array that points,
like that are pointers to things.
48:09That's just like a hundred times
slower, at least it's, it's, it's
48:11not even like a little bit slower.
48:13It's just like incomprehensibly
slower than the first thing.
48:15And so what a lot of like performance
stuff does today and some of these
48:18UEs, like they recognize this fact,
like memory is the limitation.
48:22We're just going to put things in a race.
48:23We're going to use like memory allocation.
48:25We're going to be conscious about
memory and the web platform.
48:27Like that's the second thing, right?
48:29There's like, there's a blob of things.
48:30There's a bag of stuff and you have
pointers and you have a huge graph.
48:34And so I think this is like, why a lot
of those things are fast because they
48:37have the mechanical sympathy, right?
48:39They, they kind of realize that this
is kind of how computer works and here
48:42are the constraints and weaknesses
and powers of how the actual computer
48:47hardware works and, you know, things
like scheduling and virtual memory.
48:51And we're going to use
that to our benefit, right?
48:53And on the web platform, even if
you do have mechanical sympathy
48:56and you do understand this, there's
nothing you can do about it.
48:59Even in WebAssembly, you
don't, there's no stack, right?
49:02I guess it's like this
implicit kind of stack machine.
49:04And even at that level, you have some, you
have some very limited abilities to manage
49:09that, you know, that very sort of low
level to squeeze the last performance out.
49:13I think video games is like a,
an interesting like place to
49:15look because they, They have a
very, very tight frame budget.
49:18And that is like a holy thing.
49:20You don't break that.
49:21you might drop an entire frame.
49:23You might drop objects.
49:24So you might like just what
the modern games do today.
49:26Instead of dropping frames,
they, they drop objects.
49:29So they drop quality.
49:30Maybe the textures like gets
a little fussier for a little
49:32while just to make that happen.
49:34And we're talking about, we're measuring
things in microseconds at this point.
49:37And I think a lot of people who work
with web software, like even if they
49:40wanted to, It would be kind of like,
uh, you know, an uphill battle.
49:44So you measure things in milliseconds.
49:46They're like, Oh, this is
takes only eight milliseconds.
49:49And that's like eight milliseconds.
49:50That's like an ocean of time for
someone working on a video game.
49:53That's like, that's like
basically the entire game.
49:56Like running.
49:57It's, it's entire like thing.
49:59It's like eight milliseconds.
50:00Right?
50:00Yeah.
50:00in the web, we don't even have.
50:02Uh, mechanisms to get more
fine-grained resolution than
50:06milliseconds in, in most browsers,
like, I think for security reasons.
50:10I think there, there was once,
but I think it's mostly been
50:13removed in, in many browsers.
50:16But it's a, it's a very interesting
parallel, what we've been talking
50:19about in regards to getting the
best performance in the web.
50:23You gotta abandon a little bit of the
primitives that the web gives you.
50:28Punch through and go more lower level.
50:30And it's a very interesting parallel
to what we've talked about earlier in
50:34regards to the data models, whether you
use like a really powerful database and
50:38then you start peeling off the layers.
50:40It's basically the same story just for
a different, um, for, for a different
50:45use case here, whether one is like
fast UIs and the other is fast data.
50:50So you as someone who's so prolific
in building apps, building tools,
50:56I'm curious whether there is any
apps or tools that you particularly
51:00admire and love using today.
51:02I think that there's quite a few,
but not as many as I would like.
51:05One that comes to mind that I
started using recently, maybe three
51:09years ago, it's called MimeStream.
51:11It's by this indie developer.
51:13It's a Mac app.
51:14It's a native Mac app.
51:15It's an email client.
51:16And it's the first time
in a very long time.
51:18I used an email client
that like I liked using.
51:20I think mailbox on iOS was the last time
I used an email client that I liked.
51:25Everything since then has been like
a bit of a disappointment for me.
51:28So that's just like a piece of software.
51:30I think in recent years I've been
sort of pleasantly surprised by.
51:34Sublime text is like that.
51:36That's usually the editor
that I use for, for writing.
51:39And I'm kind of a person, I
have used a few tools and I
51:41use them for, for everything.
51:43So I have very few like programs that
I use and I tend to use each program.
51:47For a lot of tasks, the sublime
text for me, it's like fantastic.
51:51It, and iTerm is another one,
but it's very, very niche thing.
51:54But, uh, sublime text kind of, uh,
text works the same on pretty much the
52:00same on like Ubuntu, Linux, Windows,
Mac OS, but it like respects like the
52:07lay of the land of these different
platforms, like shortcuts, like window
52:10behavior, scrolling It's very, very fast.
52:13Most operations, like you just
finished when you ask for them.
52:17You know, there's no
sort of measurable delay.
52:20One thing that I think is really neat
about sublime and this, this goes for
52:23a few other apps, like, uh, I termed
that I mentioned or something really,
52:27really cool as well in this vein is
like, uh, they, they care about state
52:31sublime text care about state, right?
52:32And I think there's a lot of apps today.
52:34Even iOS apps, like don't do this anymore.
52:36Meaning that if it is come on
cute, just quit sublime, right?
52:39Let's say I got a bunch of windows open.
52:41Each window has a bunch of tabs, different
text files, some of them not saved.
52:46Some text selection scroll, we might
be talking about 100 files open, right?
52:49Think about your web browser and tabs
and like scroll position text selection.
52:53And I quit it and first off
quitting it takes like a 2nd, right?
52:57It doesn't, I don't have to, like, if I
quit Chrome, I have to sit there and wait.
53:00And then if that was a mistake and I
started again, what happens is that,
53:02like, all the windows come back up.
53:04Um, exactly the way the word, the
same Texas elected skull possession.
53:08And this might seem like, Oh, that,
that doesn't seem so valuable.
53:11But what it does is it makes
me not afraid of software.
53:17It makes me not hoarding tabs.
53:19It makes me like not think twice.
53:21If I, when I'm going to reach for
sublime, because I know that the
53:24cost is like basically zero, right?
53:26If I like, Oh, I should write something.
53:27I'm going to start sublime.
53:28And I, and then I
realized, Oh, I shouldn't.
53:30And I can just quit it.
53:32Well, it was a lot of other software.
53:33There's just like, we touched
on video games a couple of
53:36times in this conversation too.
53:37I think video games is this problem
too today where I have to like commit
53:42to this big time chunk of investment.
53:43If I want to use something, if I want
to switch tools, if I want to play
53:46a game on the PlayStation, I need an
hour to like apply updates before I can
53:50play it and then get through the menus.
53:51It takes 10 minutes, right?
53:52And then load the game.
53:54And now play for, for 10
minutes and now, Oh, time is up.
53:57Right.
53:58Or like I opened some web app
and I have to wait like five
54:01seconds for it to be functional.
54:02And you know, there's this old cost.
54:04And if I quit the tab now, right.
54:06Baxin or whatever, I've
lost most of my state.
54:08So I think that there's some good
software, but it's, uh, they used to
54:12be more good software in my opinion.
54:15I'm also like an old dude,
so you know what they say.
54:17Everything invented after
you're 30 is just wrong.
54:20So there's, there's some bias here, but
I think that there's, um, there used to
54:24be a lot of software that would qualify
him in my book as being pretty good.
54:28And there's not that much anymore.
54:30How about you?
54:31Do you have a, do you have an app
or, or service or something you
54:34think it's, it's doing particularly
well on these, these accounts?
54:37Well, so I definitely share your
perspectives and observations.
54:42And I wanted to also ask, like, whether
it's just my feeling or whether that is
54:46de facto, the case that they used to be.
54:49More higher quality software in the past,
and that has sort of degraded over, over
54:53time for in terms of like apps that I,
that are really like, uh, I can plus one
54:59of the ones you've mentioned, I think,
uh, telegram as an app on, uh, macro
55:04as an, an iOS is, is one that I, that I
like that just feels like very snappy.
55:10But, uh, I agree like your observations
in terms of, uh, like preserving
55:15state kind of like respecting
the, where a user left off.
55:18And then when you come back,
that is still all there.
55:21That gives me confidence and just
makes me less afraid of using it.
55:25I definitely agree.
55:26And then also, even if it does
remember everything, just making
55:30things fast or keeping things fast,
that is another, another aspect
55:34of just like respecting my time.
55:36It's another.
55:37Paper cuts when I'm using software
and it takes forever to load.
55:41It just makes me, it's not like
that the software is broken, but
55:45in a way, it like sucks out a
little bit of joy out of my day.
55:49And this is also something where I'm
spending out of like the 95 to 5%.
55:54This is where I'm spending probably
one of the five, uh, on, on Overtone.
55:59And given that Overtone is targeting
the web, that is like you say, Very
56:03much on hard mode and you got to poke
through a lot of layers on the web.
56:08And I take more inspiration from
native development and app development
56:12to try to get there, but it's really
hard, but I do think it's possible.
56:16I think it is possible to get the best of
both worlds, at least like directionally
56:21where you get the distribution of the web
and directionally closer to the to the
56:26performance of like a, a native platform.
56:29I'm curious why you think that is that,
uh, software in the past was maybe felt
56:35higher quality, was higher quality.
56:37Do you have a theory on that?
56:38I do.
56:39I think it's like as simple
as technological constraints.
56:42Earlier in this book, In this episode,
we were talking about, or I was talking
56:46about Spotify and sort of how they came
about in a time where a web browser,
56:51like the web platform just wasn't a fit.
56:53It just didn't have the features.
56:54You couldn't just play audio randomly
or there were no web sockets and stuff.
56:58I think a lot of like.
56:59Software that we're talking about
that we say like, Oh, that was kind
57:02of good, like an old version of
Outlook from Microsoft, or I know
57:07like, uh, Microsoft Word these days.
57:09It takes like 10 minutes
to start on my computers.
57:10I don't know.
57:11Not 10 minutes, but it takes a long time.
57:13I mentioned to you in the past.
57:15I have this, uh, Mac book,
a power book from 2002 and
57:19it's a bit of a time capsule.
57:21Uh, it still boots up just fine.
57:23And it's like pretty fast.
57:24And if I start certain
apps, they start right away.
57:26And I'm like, This got a mechanical
hard drive that's like, I don't
57:31know, 20, 20 something years old.
57:33This shouldn't be this fast.
57:35Right.
57:36And I think it's that fast
because there's a human, almost
57:39constant, like set of thresholds.
57:43If we forget about computer for
a second, there's like, what is a
57:46reasonable amount of time to wait for
something to be ready for me to use?
57:50I think the answer is it
will be in relation to how
57:54important it is to use that.
57:55If I'm going to travel across the world
somewhere, I am okay with spending
57:59four hours in like taxis and airport
security and stuff and getting on an
58:04airplane before I get to the, into
the air, on the air, in an airplane.
58:09Whereas if I'm just like going
to the grocery store, I would not
58:12be okay with waiting four hours.
58:14To like get on the bus to
get to the grocery store.
58:16It's in proportion to like the threshold
or like the, where the amount of,
58:21and the threshold is like, if I'm
going to say, yes, okay, I'm going
58:23to do it, I'm going to wait for it.
58:24Or like, no, I'm going to
find a different solution.
58:27That's kind of the threshold.
58:28It's in relationship
to how important it is.
58:30And I think this is a human thing
and not something that's like,
58:33Oh, that was the case in the
nineties, but now it's different.
58:35Or like, Oh, that's has
to do with computers.
58:38And so now let's say, yes, for the
sake of conversation, uh, opening an
58:41app, my threshold is like two seconds.
58:44If the app hasn't started in two
seconds, some app, whatever, Microsoft
58:47Word, then I will probably just
go and find a different solution.
58:51Maybe I'll use notepad and windows to text
that into macOS and I'm just going to be
58:55fine with some features not being there.
58:56I think that developers like have been
very conscious about this or found this
59:00out through research or somehow like
know that like what this thing is, right?
59:05Okay.
59:05We need this.
59:06We need Microsoft Word to
start within two seconds.
59:08Let's make that happen, right?
59:09Otherwise we're, we're not
going to get customers.
59:11And then 20 years ago, you had to
go to some pretty great lengths
59:15to make something start within
two seconds because you know, like
59:18computers were a lot slower, right?
59:20Hard drives are a lot slower and so on.
59:21And today I think we have the same,
we have exactly the same like human.
59:25Properties, but now we can boot up
like an OS, like I'm working on an OS.
59:30We can boot our OS up in 250
milliseconds from scratch.
59:33Like the kernel and
everything and drivers, right?
59:35We can boot up like our OS 10
times over before like Word
59:40even, even has started on my Mac.
59:43And that, like the fact that
like our thing boots fast,
59:47like that's kind of irrelevant.
59:48It's more like a comparison that like you
can make something quite complex, like an
59:52operating system, like do a lot of stuff.
59:55Right.
59:55And so what does Word
do when you start it up?
59:57And it takes like, you know,
5, 10 seconds for it to start.
1:00:01I don't know, but it must
be doing a lot of stuff.
1:00:04And so I think that's what
keeps happening over time.
1:00:07We just keep doing more and
more and more and we're doing
1:00:09less and less like clever stuff.
1:00:11And I think now wrapping all of this up.
1:00:15I think there is a strong correlation
between what we do here and like,
1:00:20the local-first, the purchase, the
local-first approach in a nutshell.
1:00:23Right?
1:00:23Again, it's kind of like, you make sure
that things like work when you're offline.
1:00:27Right?
1:00:28And you make sure that, like, if you, if
you lose that connection forever online,
1:00:32you can still use something, right?
1:00:34You're not totally lost.
1:00:35To an extent, I think that goes hand in
hand with like making things like fast
1:00:39within a certain realm of things, right?
1:00:41Like if the first thing you have to do is
to like re index like all, and this could
1:00:46be a problem for local-first as well, but
have to re index everything that exists.
1:00:50That's just going to take a long time.
1:00:51Every time Dropbox starts, it's gotta,
it doesn't know which like files
1:00:55have changed on the computer, right?
1:00:56So, if you have a 200.000
files, this guy has to go and
1:00:59look at 200, 000 files, right?
1:01:02And that's a challenge you might have
as a local-first thing and not as like a
1:01:05centralized thing, but as a centralized
thing, you always have this problem.
1:01:09You cannot get away from it.
1:01:10Yeah.
1:01:11I think you're, you're always paying sort
of like for the worst case by having,
1:01:16by like threading everything through
typically through the network, et cetera.
1:01:21You can't quite like.
1:01:23Go off the happy path where everything
is like as close as, as possible.
1:01:27It's basically an extension of what you've
described earlier with the memory, where
1:01:31it's like, it's not, not, not just to
the neighbor's house, but it's literally
1:01:35across the ocean to get that pencil often.
1:01:38So I think there's a lot of similarities.
1:01:41So we've been exploring a lot now, like
here, the data systems you've been working
1:01:45on, uh, on, on previous companies, not
just data systems, but that's what we
1:01:50focused on and talking more broadly about
the web, the benefits and challenges.
1:01:56But you've mentioned a few times now that
you're working on an even more ambitious
1:02:01thing, your own operating system.
1:02:03So before digging more into that.
1:02:06Yeah.
1:02:06I'm very curious what led you to
going on this audacious journey of
1:02:10building your own operating system.
1:02:12I think some of it actually comes from
a lot of what we touched on today of
1:02:17quality and software and the joy that
I can find that many of my friends can
1:02:23can find or have been able to find.
1:02:25In making software, I think it can be a
very like fulfilling and fun thing to do.
1:02:30And the, I got to say the web platform,
I think over the, over the past 15
1:02:34years, there's been such a relentless
focus on scale because it's been such
1:02:38a focus for a huge economy that we have
made very conscious trade offs in terms
1:02:42of like joy and ease and simplicity.
1:02:46In favor of scale, like economic
scale, technical scale, you know,
1:02:51the ability to have like a million
concurrent users on like a thing.
1:02:54So today, if you want to like
make a fun, if you want to
1:02:57make a home cooked meal, right.
1:02:58If you want to build like a fun thing
for your friends or just for yourself.
1:03:02I even tried making a homepage
with a guest book today.
1:03:05And if you have, if you have like maybe
a weekend, you're going to spend that
1:03:09entire weekend just like trying to
figure out which of the 200 different
1:03:12AWS services do you need and like,
which databases, how do you set it up?
1:03:15And like there are keys and there's
so many layers of virtualization that
1:03:18is compatibility and there's this
and that and different dev tools.
1:03:21And, and all of this, I'm not saying
this stuff exists because like.
1:03:25People are dumb or anything like that.
1:03:27This stuff exists for very good reasons.
1:03:29Right.
1:03:29And these are reasons for like, you
know, scale, like big companies,
1:03:33basically like big things.
1:03:34And I felt like, you know, the time
when you can just like either just
1:03:38make a native Mac app, for example,
in Cocoa, or like make a kind of a
1:03:41guest book with a CGI bin script,
like a Pearl script on an FTP server,
1:03:45like there was some joy to that.
1:03:47Sure.
1:03:47It wasn't a secure and safe and sure
it wouldn't scale as well, but it
1:03:51was for a different, like recent
and different audience and so.
1:03:54Three, three and a half years ago,
I started really thinking hard about
1:03:58these things, or four years ago, I
started, started really thinking deeply
1:04:01about these things and feeling that
it's something I care a lot about.
1:04:04And around the time I learned that
Apple were thinking about getting rid of
1:04:09Mac OS, at least Mac OS as we know it,
which I think has been a very important
1:04:13player in the having fun making apps.
1:04:16I don't know if you ever
wrote a Cocoa app, sort of its
1:04:18heydays, like 2010, 2009 or so.
1:04:22But it was just like a, a, a really
like joyful way of doing things.
1:04:25You earlier, you mentioned
you need a table view, like
1:04:28in Cocoa, there was a table.
1:04:29There was not three different
ways of making a table.
1:04:32You, there was exactly one way.
1:04:34And that was really
performant, very flexible.
1:04:37It did usually what you wanted to do.
1:04:39Everyone used that.
1:04:40There were a lot of really quality
cocoa apps, like their companies,
1:04:44like panic that still exists today
and still make great software.
1:04:47But there used to be a lot
more like companies like that
1:04:49that did really cool software.
1:04:51Yeah.
1:04:52Like sofa, like the, some of the people at
sofa now, you know, are working on framer.
1:04:57Who made some incredible backups.
1:04:59There were Cocoa apps
and they all felt good.
1:05:00And so at the time I was like, I
thought, I thought a lot about this.
1:05:03And then I decided to leave Figma where
I worked at the time and go and, and try
1:05:08to do a little bit of research, trying
to figure out like, what, what, what's
1:05:11going to happen five, 10 years from now?
1:05:13Like, are things better?
1:05:14Where are things moving?
1:05:15Where are things going?
1:05:16And, uh, and that's, I think when
I saw sort of like a couple of
1:05:20possible futures, uh, and one of
them I got kind of excited about.
1:05:24Yeah, and I think that shows
already in the name for, for your
1:05:28project and undertaking playbet.
1:05:30I think there's a, there's a, um, a
person on Twitter called Anselm, who I
1:05:36think in his bio has like, uh, Something
along the lines of like, uh, work
1:05:43doesn't work play works, or I think
something along those lines, but that
1:05:48really resonates with me where, like, if
something feels like work, I don't like
1:05:53it, but if something feels like playing.
1:05:56Then this is where it can be most
productive and I can do my, my hardest,
1:06:01what other people would describe as
work for me, it's not work for me.
1:06:05It's just joy and playing.
1:06:07So your focus with the name already,
Playbit, really resonates with me.
1:06:13And also just how you framed is
like software that feels good.
1:06:17I think that's something
that I'm really striving for.
1:06:20And that's rather the
exception than the rule today.
1:06:24And I think building a foundation
where that is just the default software
1:06:28that feels good, feels amazing.
1:06:30So I would love to learn
more about Playbit.
1:06:34What is Playbit and what
is your vision for it?
1:06:36So Playbit, imagine that you
have that kind of app kit you
1:06:40were talking about before.
1:06:41Right?
1:06:41So you write a program and that
developer experience is pretty
1:06:47similar to what you have today, but
you know, it's, it's vastly simpler.
1:06:51And every time you hit build and run,
imagine if you use Xcoder or Visual
1:06:56Studio or something like that, you kind
of have, you can change a line of code.
1:07:00You can hit command R
or something like that.
1:07:02And you try your app out and you,
that's kind of how you iterate.
1:07:05Every time you do that, you also
have a web version of that app.
1:07:10It's kind of a Figma.
1:07:11Grade.
1:07:12Type of web app, right?
1:07:13So, and so Playbit is an operating system.
1:07:16And I think, uh, two big challenges
with trying to build something like an
1:07:20operating system or platform is one,
you're asking people to go to some like
1:07:26foreign planet and asking people to
go to a foreign planet is always going
1:07:29to be, uh, you're going to have a huge
drop off rate where like, it's just
1:07:33like a very fundamental human thing.
1:07:34The things that we're, they're familiar.
1:07:36We're.
1:07:37Much more prone to
approaching things unfamiliar.
1:07:40We're kind of naturally afraid of them.
1:07:42Uh, so we survived the
bears and tigers and stuff.
1:07:45Right.
1:07:45So that's what, that's
one problem you have.
1:07:47And now the problem is like a
chicken or the egg or kind of
1:07:49a bootstrapping problem, right?
1:07:51If you're to say, well.
1:07:53Let's get some people like on this
platform who like build programs for it.
1:07:57Who are they building those
programs for themselves?
1:07:59Right?
1:08:00How fun is that?
1:08:01In some scenarios, the answer
has got to be, Oh, that's fine.
1:08:04Because like, maybe I'm building up
some tools for myself or for my friends
1:08:07who are also on this platform, but
I think this is also a huge hurdle.
1:08:11And so the first one.
1:08:13I think it's really, it's really hard
to do something about if you make it too
1:08:15familiar, then why even bother making it?
1:08:18Right.
1:08:19If it's just like something that
exists, like why even put the effort in?
1:08:22If it's too strange, like, I don't know
if anyone listening here used Google
1:08:26wave back in 2009 or whatever it was.
1:08:29I think that was like, it was too novel.
1:08:31It was a great idea, but it
was just like too strange.
1:08:34You know, you got to hit the sweet
spot there of being like novel enough.
1:08:37So that it matters that it exists,
but still have some familiarity.
1:08:40So it's not totally like scary to try.
1:08:43The other part I think is
kind of important and fixable.
1:08:47So again, kind of what I was talking
about with Playbit, you make this app
1:08:51and we just kind of cross compile it
like, you know, the compilers is capable
1:08:55of compiling to native code, right?
1:08:58x86 or x64 and just like
in an ELF executable.
1:09:01I think you're kind of macOS.
1:09:02app thing.
1:09:03You just run it and you just zip it up and
send it to a friend or whatever you want.
1:09:07And then the other thing you get is
a, is a folder with like an index
1:09:10that HTML file that just contains
like a web assembly version of this.
1:09:14So our GPU API or like our
graphics API is web GPU.
1:09:19So you can do full compute, you can build
some AI and train ML models and stuff on
1:09:23this, you know, it's like you can really
use the GPU through this, which is not
1:09:26possible through WebGL, but there's no
other levels, like, although we're using
1:09:30the Linux kernel, it's kind of private
as much Linux as Android is Linux.
1:09:35So not a lot of it is Linux,
but we do use the Linux kernel.
1:09:39And so you could say, well, I can just use
something like Vulkan to instruct my GPU.
1:09:45And that's a possibility, but like in
the ethos of some of what you and I have
1:09:49been talking about before in Playbay, we
want to like reduce the number of choices
1:09:54that you have to make, and we want to be.
1:09:56We want to be very careful about
like what we sort of introduce
1:10:00as like a choice or like a path.
1:10:03And so we're starting with the
only way you can draw things to
1:10:05the screen is through web GPU.
1:10:08That's it.
1:10:08And so of course you got a full file
system access and all that kind of stuff.
1:10:12And when you're running something on
the web, like we have a translation
1:10:15layer, essentially something that, you
know, it doesn't emulate a Linux kernel.
1:10:18You don't have the full feature of,
uh, of like a Linux kernel on the
1:10:21web, because that would be too slow.
1:10:23Instead we have sort
of like a system layer.
1:10:25System call, like layer that emulates that
and translate that to the web platform.
1:10:30And certain things are just
not possible on the web, right?
1:10:33So there's gotta be some
sort of like limitations.
1:10:35So is my understanding correct that
you've drawn the, uh, analogy to Figma
1:10:41where me and many others, um, I'm
sure like first tried out Figma in the
1:10:47browser were blown away from it, but,
uh, by, by, but they would have never,
1:10:52really bothered to install it in the
first place, unless there was a really
1:10:56good reason, but the web brought down
the barrier to entry by so much that
1:11:01this is where you fall in love with it.
1:11:03And then when you use it more
regularly, you install it actually
1:11:08on your, on your real machine.
1:11:10So is there like a similar.
1:11:11two step process there to Playbit
that maybe the first time you interact
1:11:16with some Playbit apps is in the
browser, but then the next big step of
1:11:20commitment is not just downloading a
desktop app, but, uh, actually like,
1:11:26uh, flashing it on to your computer.
1:11:28Is that sort of like the two steps?
1:11:31Not quite.
1:11:31I think we're a little bit more
pragmatic or I believe we are at least.
1:11:35So Playbit does, you know, I can boot
it on hardware, but that's not our goal.
1:11:39In five years, yes, you can just like
put it on hardware, boot it on hardware.
1:11:44We're maybe a month or so away from
starting to, um, starting to open up for
1:11:49like an early preview access to Playbit.
1:11:51And the way that works is we
have a Mac app and a Windows app.
1:11:55Um, then you just like download
and run like a video game and
1:11:58the user runs full screen.
1:11:59And it contains like a
virtualization environment.
1:12:03And so you basically a startup and it's
just play a bit and you can use it as
1:12:06like, you know, on your current computer,
we're not asking you to like, get a second
1:12:09hard drive and do installations and stuff.
1:12:11None of that who wants to do that.
1:12:13And so one way of
thinking about it is like.
1:12:16Another one, another way of thinking
about it is like, uh, uh, a developer
1:12:20tool or like an authoring environment,
or even something like a fantasy console,
1:12:24like peak weight or something like that.
1:12:25Although Playbit is more, you know, as,
as, as very different like aims and the.
1:12:31Yeah, and the applications that you
build, let's say you make like, I
1:12:34don't know, a guest book, right?
1:12:36Or something like that.
1:12:37Like how, how does that work?
1:12:38Sure.
1:12:38We can make a GUI kit and that's fine.
1:12:41It's a lot of work, but that's
just one piece of the puzzle.
1:12:44Like where are your
messages stored, right?
1:12:46How do you authenticate people?
1:12:47Like all this kind of stuff.
1:12:48And that's also part of playbits.
1:12:49And so the whole operating system is
like local-first from the foundation.
1:12:54Early on, we explored, could we do
like the thin terminal play, right?
1:12:59Of like, we have a server somewhere.
1:13:01That server actually runs the
computer, we send a video signal
1:13:04over, it turns out that doesn't work.
1:13:06I mean, there's like two aspects of it.
1:13:08We can talk more about it if you're
curious, but the speed of light
1:13:11is like pretty slow actually.
1:13:13And the human cognitive center has like
a limited, has some interesting features.
1:13:19If you do this with like a, a video
game pad, and if you use something like
1:13:23PlayStation, the latency is actually quite
high, even if the PlayStation is right in
1:13:26front of you, like 100, 200 milliseconds.
1:13:29And that's fine because like, we have
this, you know, we have this kind
1:13:32of coalescing, like Nagel algorithm,
like thing in our brains that can,
1:13:36you know, synchronize audio visual
input and other sensory stuff.
1:13:39Right.
1:13:39To make that feel like it
happened at the same time.
1:13:41Although it didn't like
someone clapping their hands.
1:13:43Like we, we see the clap at the same
time we hear it, but obviously we'll
1:13:48technically we see it beforehand.
1:13:49And so that ends up just like not
working out the thin terminal thing.
1:13:52And so, yeah, so Playbit
works when you're offline.
1:13:56And one of like the things that we
really believe in is the software
1:14:00should live for, for a long time.
1:14:02So it's kind of an
archivist mindset in a way.
1:14:05And this is like a secondary thing.
1:14:06And, and some features
won't like work this way.
1:14:08Yeah.
1:14:09But we say you should be 50 years from
now, Playbit might not exist anymore.
1:14:13Maybe it's not developed anymore.
1:14:14There are no servers online.
1:14:16You should still be able to
like boot up Playbit and do
1:14:19something and get to your stuff.
1:14:20If it's to like migrate it out
of there, or if it's because you
1:14:23want to continue using it, you
That should always be possible.
1:14:26So those are 2 of the 2 of the main
drivers of why it's local-first.
1:14:30And then the other part, when it comes to
data is that it's also fully multiplayer.
1:14:33So play with computer is this sort
of like, it's essentially a virtual
1:14:36machine that transcends your hardware.
1:14:39And so it's because it's
local-first we can synchronize it
1:14:41across all the hardware, right?
1:14:42And we can back it up on a
central computer somewhere.
1:14:45This is one of the things that wouldn't be
available in, you know, a thousand years.
1:14:49And that means like, if you know,
if you lose your laptop, maybe
1:14:52you drop it in the sea or someone
steals it or something like that.
1:14:55And you go and buy a new laptop
and you sign into Playbit.
1:14:57Everything is back there.
1:14:58Like the window position, text
selection that we talked about, like
1:15:01Sublime I was speaking about before.
1:15:03And that also means that you can,
you can have many of these computers.
1:15:06And so we have this concept of workspaces.
1:15:08They're basically virtual machines.
1:15:09And one of these computers you can share
with your friends or with other people.
1:15:13Yeah.
1:15:13And then you have essentially like
imagine Figma multiplayer, but like on
1:15:16the operating system level and these
facilities like this data syncing
1:15:20facilities and stuff is available
to, you know, as a first party API,
1:15:25like for like application developers.
1:15:27So you write your guest book,
as I was talking about before.
1:15:30Then you just put messages in there
and authentication will be, you
1:15:34know, maybe that's a problem that you
have to solve, but everything else,
1:15:38data storage is you just get that
for free and it's just local-first.
1:15:42And if Playbit is gone or the servers
don't work, like your guestbook
1:15:46will still work on your app.
1:15:47Like, so it's not sort of
bound to Playbit itself.
1:15:50That is incredible.
1:15:51I mean, I can't imagine a more audacious
path forward and a foundation to build,
1:15:57but, uh, the way how you've described
it, uh, makes, uh, makes perfect sense.
1:16:02you still get the benefits of the,
the web in terms of distribution, but
1:16:08you're leveraging the most powerful
way of building web apps right now.
1:16:12By leveraging web GPU, et cetera, taking
care of all the data in a local-first
1:16:18way and unlocking even more power by
letting you use the, like the virtual
1:16:23operating system there as a full blown
native app on your given operating
1:16:28system, hosting operating system at
some point, like real operating system.
1:16:32I love that progression and
it already unlocks from, from
1:16:36day one, a lot of utility.
1:16:38So I can't wait to see what a
Playbit app will, will feel like.
1:16:43I'm also curious what it will
both in terms of feel like
1:16:46to use, but also to write.
1:16:49Can you share a little bit more about,
uh, the local-first aspects of what it
1:16:54means to build a local-first Playbit app?
1:16:57Yeah, we have, we have these
like three types of data.
1:17:01This is kind of in the conversation about
like what, What information is there?
1:17:05How do you like categorize information?
1:17:07What guarantees and sort of
like attributes does this
1:17:10different information have?
1:17:11Right.
1:17:11So you have something
like an email client.
1:17:13Let's say we have like what
email is currently being viewed.
1:17:16What text is selected?
1:17:18That's one type of information.
1:17:19Another type of information is like.
1:17:21What is in the email, what is
written in the email, right?
1:17:23Who sent it, which time was it sent?
1:17:26And, uh, there's, there's other kinds
of data too, but sort of like thinking
1:17:30in this way, right now we can add
a third type of data, sort of like
1:17:33a very ephemeral, like imagine that
there's a friend in there, so there's
1:17:36a second cursor on the screen, like
where the cursor is, who that is, like
1:17:39that, that's another piece of data.
1:17:41I think these like have different,
you have different expectations about.
1:17:45Where it is the synchronized hot,
like what reliability of this is, what
1:17:49the latency of this data is roughly
speaking, like what's in the email,
1:17:54what'd you expect there to be correct,
but it can take a while to load.
1:17:58I'm exaggerating here now, obviously
everything should be correct
1:18:01and be fast, but you gotta make
trade offs the cursor, right?
1:18:06It's sometimes you can drop a frame, so
to speak, and it's not that important.
1:18:10Right?
1:18:10Like you can lose this information.
1:18:12You don't have to cache it.
1:18:13The information about like what's
selected and like scroll positions
1:18:16and stuff like that is, is things that
can have lower integrity than sort
1:18:21of like what's in the email, right?
1:18:23And that information might, you
might not want to share with others.
1:18:26Right.
1:18:26Like what's, what texts
do I have selected?
1:18:28Maybe that's something that
shared in a different way.
1:18:30Right.
1:18:31Let's say you have two people
looking at the same email.
1:18:33Then if you shared the tick selection,
like what does that even mean?
1:18:36Right.
1:18:36If I want to select something, I
would change your tech selection.
1:18:39That's kind of like weird.
1:18:40So you've got to treat that differently.
1:18:41So there are, there are
different categories of data.
1:18:43One thing.
1:18:44So more concretely to your question,
it's like when you write a Playbit app,
1:18:47there is some of this information that's
just handles for you automatically.
1:18:51So things like the sort of scroll
position and stuff like that.
1:18:56All handles for you automatically,
you can override any of that.
1:18:59And if you wanted to manage your own
scope position, of course you could, then
1:19:03there's an API and we call this like game
state because you know, often we talk
1:19:07about, and we look at video games, because
I think there's a lot more to learn there
1:19:10than, uh, comparatively to utility apps.
1:19:13So game state is essentially like
the state that the program has
1:19:17that's unique to the program.
1:19:18And earlier in this episode, we talked
a little bit about like, uh, like almost
1:19:22impotence mismatch or a match between sort
of like the, the fifth of your problem
1:19:27and the database and stuff like that.
1:19:28And so you have a similar problem
here that, like, we, we could just
1:19:31give you, like, I just like put
things in a SQLite database and
1:19:35they will automatically just like.
1:19:36Be synchronized, right?
1:19:37The problem is like, that's not possible.
1:19:39That is not, not possible because
like it's hard technologically.
1:19:42That's just impossible because
like a real life human level.
1:19:45It's not possible, right?
1:19:46We cannot possibly know.
1:19:47And the same thing is true
for like a file system.
1:19:49We cannot possibly know what these like
chunks of bytes mean without trying to
1:19:53interpret them, in which case you're
not on a file system level anymore.
1:19:56But on a document level, and
so to like, solve this problem,
1:20:00we choose to not solve it.
1:20:02And this that give you the
tools to solve it yourself.
1:20:05And so imagine that we, we make
a game like a tic tac toe game
1:20:08and we can play that together.
1:20:09It has like, it has a, it's
a turn based game, right?
1:20:12So 1 and it's a 2 player game.
1:20:141 player is across the other 1.
1:20:16It's like a circle.
1:20:17And.
1:20:18Let's say you start out and you do, you
click somewhere, you can choose, right?
1:20:22And then it's my turn.
1:20:24And so now game state in this
example is whose turn is it?
1:20:28What sort of like what on, on
this kind of like three by three
1:20:31or nine by nine or whatever you
end up doing on this game board.
1:20:35Like, what is the state of that?
1:20:36Which cells are empty?
1:20:37Which are currently like filled?
1:20:39What are they filled with?
1:20:40Right.
1:20:40And then you have conditions and
this is not part of game state.
1:20:43It's like.
1:20:44Did someone win?
1:20:45Like, Oh, who is leading?
1:20:47Like, this is stuff you
derive from the game state.
1:20:50And the game state itself is
essentially a key value store.
1:20:53And on the key value store level, we
give you the, we give you transactions.
1:20:58And so if you say like, uh, change this to
the, to that and change this to that, and
1:21:04you can make up your own keys and values,
we guarantee you that Those things are
1:21:10merged with all the other clients with the
same result within that one transaction.
1:21:15So we give you this kind of like
primitive, that is a key value
1:21:18store with like CRDT transactions.
1:21:20I don't know what to call them, but this
is kind of like a notion of transaction.
1:21:24And on that level and beyond that
level, below that level, We as like,
1:21:28we had all of the diffing and merging
and syncing for you automatically.
1:21:31Then of course we finally, we
give you like a, the lowest level.
1:21:35So the highest level is like, you
don't use any of these things and
1:21:38you get some limited multiplayer
functionality and the scene graph of
1:21:42the whole, like the whole desktop,
if you will, is synchronized always.
1:21:45And so that's the highest level.
1:21:46That's the simplest thing.
1:21:47You can write like a 20 line
program that has some limited
1:21:50multiplayer functionality.
1:21:51And it's fine.
1:21:52All the defaults in Playbit, like
in our APIs, if you don't opt in for
1:21:56something, you will get something that
we think is a good default, right?
1:22:00If you don't pass, if a function
call has like a flags attribute
1:22:04or argument, if you just pass zero
for that, we will like, instead of
1:22:08giving you a window, for example,
sorry, this is a tangent in macOS.
1:22:11If you say.
1:22:12And this window, create a new window.
1:22:13It's the API for creating a new window.
1:22:16If you set flags to zero, like no special
flags, you get a window that's useless.
1:22:21You can't close it.
1:22:21You can't resize it.
1:22:22You can't like do much with it at all.
1:22:24You can't even move it.
1:22:26And so you have to like set certain
flags to get the default window.
1:22:29And, and it's kind of like folk knowledge.
1:22:31You just know which flags to set and
which flags not to set and the caveats.
1:22:36In Playbit, we're trying to like have
an ethos that is like, when you don't
1:22:39opt in for something, you will get the
thing that is that you probably want.
1:22:42And yeah, so this goes
for the data layer too.
1:22:44And yeah, we'll see.
1:22:46So you got these three kind of
like, I want to start easy mode.
1:22:49You just give me a thing.
1:22:50It will be multiplayer.
1:22:51It'll be pretty fine.
1:22:52And then you say, actually, I want
to like have my, the state of my app,
1:22:55my game to be multiplayer so that two
people can play tic tac toe together.
1:22:59Then you use this like fairly
straightforward, but still you
1:23:02got to model your data now.
1:23:04Um, like this database and then at the
very lowest level, you get something
1:23:09that is kind of like a socket, but we,
we handle like encryption and you know,
1:23:13the actual connectivity of it for you.
1:23:15So you can say, give me a connection
to the other instances of this app.
1:23:19And now your app can, you'll send
like arbitrary data if you want
1:23:22to do something really like wild.
1:23:24Right.
1:23:25But now there's no different emerging.
1:23:26It's, we just give you an ability to
say, send bytes between, um, between
1:23:31different like instances of your app now.
1:23:33Got it.
1:23:33So that's how, how data flows.
1:23:35Um, I'm curious, what is the authoring
experience for me as a developer?
1:23:40Um, do I have to use like a certain
programming language for that?
1:23:43Can I choose between different
programming languages?
1:23:46Is there, can I bring some outside
technologies, for example, something
1:23:50like react, or is there sort of
a bespoke way to do all of that?
1:23:55You have to use our own flavor of Fortran.
1:23:58That is backside.
1:23:59You know, no, it's a, so.
1:24:01Um, This is obviously an important thing.
1:24:03I think that there are
two paths that you can go.
1:24:05You can either say, here's a blessed
programming language, and this is what
1:24:08you use, or you can say like, bring your
own language, here's like a minimal API.
1:24:15And I think the two like common examples
of this is like on, uh, on iOS, you
1:24:21got, I guess a little complicated.
1:24:23Now you get Swift and Cocoa, but for
a long time, you had just Objective C.
1:24:27And if you want to write an
app, you write an Objective C
1:24:30and you use these libraries.
1:24:32And there's some flexibility if
you want to do something else,
1:24:34but it's like pretty much zero.
1:24:35And then you have something like BSD or
Linux where you say there's a syscall.
1:24:39It's essentially like a single function,
uh, that's called syscall, which is
1:24:43really just like a CPU instruction, but
it's a syscall and you give it a number
1:24:47and the first number represents like the
thing you want to do, like open a file,
1:24:50close a file, read some bytes, right?
1:24:52And then you give it some number and
it's a fixed number of things you
1:24:55can give it arguments essentially.
1:24:56And that's the entire API surface.
1:24:58This is one function to
your entire computer.
1:25:01So these are two extremes and with
Playbit, we're closer to the second,
1:25:05because that gives you the flexibility
of if you want to use Python or Node.
1:25:08js or BUN, you could do that.
1:25:11And I think that's important.
1:25:12Some people have opinions about this.
1:25:14So Playbit has a C A B I and B as
in, as in Bob, as a binary interface,
1:25:20basically any programming language
today can interface with a C A B I.
1:25:25It doesn't mean you have to
write it and see the developer
1:25:27experience currently in Playbit.
1:25:28And so, you know, Playbit does exist
and we use it day to day and we
1:25:32develop Playbit inside of Playbit.
1:25:34It's kind of weird sometimes is we
got something that's a little bit like
1:25:37Xcode, something that's a little bit like
developer tools, like on the OS level.
1:25:41And so in our version of the finder
or windows file explorer, there's
1:25:47a button called new app and you can
click this and like a new app is just
1:25:50made for you and it's called like, you
know, new app that app and inside it,
1:25:54like, you know, there's a main dot C
because we got a C compiler and system.
1:25:57So it's main dot C and
it's already ready for you.
1:26:00And when you, when you create a
new app, there's another toolbar
1:26:03button, like in the file browser,
this says build and run it, click
1:26:06build and run and your app starts up.
1:26:09And there's, you don't need to use
terminals or anything like that.
1:26:12You got standard out and standard error.
1:26:14You can get those kinds of things like in,
in a more friendly sort of developer log.
1:26:18We have an inkling to this now,
but there's also a couple of
1:26:21ways to like, look at the dom.
1:26:23So we have the scene graph
that your app has, right?
1:26:25You can inspect that.
1:26:26You can inspect actually the scene graph
of the entire desktop if you wanted to.
1:26:30So that, you know, this opens
up some very interesting things
1:26:33for accessibility, for example.
1:26:34But anyhow, so the developer experience
is very much like, it's very like
1:26:38straightforward, very lightweight,
very opinionated right now.
1:26:41So again, you click, you click a
button to just create a new app.
1:26:44And you can just rename it
by changing the folder name.
1:26:46And if you don't want to even open
a text editor, you just click the
1:26:50building ride button, which is the same
place your app is built and is run.
1:26:54And it takes like a
couple of milliseconds.
1:26:56And now you can just like, and it's
just going to say, hello world.
1:27:00It's just a window that opens hello world.
1:27:02And it has closed buttons,
you know, it's very basic.
1:27:05And what you can do now is that
you can open the source file.
1:27:07In the text editor, it's only
in graphical environments.
1:27:10And now you can, you
can change them, right?
1:27:13You can change, for example,
like where it says hello world to
1:27:15say, you know, hello, Johannes.
1:27:18And then you hit build and run again.
1:27:19And now like it restarts
and says, hello, Johannes.
1:27:22And then, you know, there's some
generated documentation for the API.
1:27:26There's functions, of course,
for, you know, we've got.
1:27:28Grid functions, all of the kind of
really gooey things you might expect,
1:27:31you know, pop up menus and scroll bars
and radio buttons and all of that stuff.
1:27:35And if you want to bring in
libraries and stuff, you can do that.
1:27:38And if you wanted to use Python
instead, then you will call these
1:27:41functions through the C ABI and
FFI functions in Python, right?
1:27:44So that's kind of like the, currently
the developer story in PlayBit.
1:27:48That makes sense.
1:27:49So you've like laid out the absolute
foundation and that allows for a lot
1:27:54of layers, optional layers to be built
on top where you want to follow like
1:27:59a certain flavor of app development.
1:28:01And I think that also allows an
ecosystem to be built around PlayBit.
1:28:07But I think the new level of primitives
and the, this new, um, More like
1:28:122024 foundation that you're laying
where you get things that are, that
1:28:17was probably shareable by default,
that's collaborative by default.
1:28:20So, uh, a lot of the local-first
aspects, what makes local-first software
1:28:25great, having that be baked into the
foundations of an operating system.
1:28:30Uh, that is not something I
would have expected in 2024 to
1:28:33already exist, maybe rather 2040.
1:28:37So you make me feel like
living in the future.
1:28:41But I got to say, I think that there,
it's almost a logical conclusion
1:28:44when I'm going to come to here.
1:28:45But I think, first off, I want
to say, I think, I think of
1:28:47Playbit as being a platform.
1:28:50I think it's very interesting to
talk about, like, what is an OS?
1:28:53Like, what is a platform?
1:28:54We've been talking about the web a
lot today for really good reasons.
1:28:57And the web to me kind of smells
like an operating system, you know,
1:29:00in a way, and it is a platform.
1:29:03And I think Playbit similarly,
although it is like, technically
1:29:05speaking, a real operating system,
you know, it's like manages memory
1:29:08and hardware and all of that stuff.
1:29:10I think, or I hope at least it
also can become the platform.
1:29:13That has a primary environment,
which is, you know, its own OS and a
1:29:18secondary environment, which is like
other systems, like the web, right?
1:29:23Other platforms.
1:29:24And the logical confusion I was
mentioning, thinking about what,
1:29:27what does a platform OS do?
1:29:30Why, why does it exist?
1:29:31Why do we have them?
1:29:32Historically and an operating system
does really is two things, right?
1:29:36One, it abstracts the hardware.
1:29:38It used to be so.
1:29:39That if you want it to write the disc,
you would have to like write the disc.
1:29:43You have to have different code
depending on the specific hardware
1:29:46you're writing, which is kind of insane.
1:29:47But that's how it was.
1:29:48And then someone was like, Hey, what,
what if we have like a layer in between?
1:29:51So like you say, right to hard
disk a or hard disk B and you use
1:29:57the same like function calls, even
if this is like a, you know, a
1:30:01hard disk from this manufacturer,
if it's like a floppy disk drive.
1:30:04Right.
1:30:05And that is like, Those are
like drivers or whatever.
1:30:08That is like one important
role that OS serves.
1:30:11the other category, it's very interesting.
1:30:13It's like the OS then needs to
provide services for like the
1:30:16tools that run on top of it.
1:30:18And this is where I think we as like,
we as kind of like set back in our
1:30:22chairs, you know, in, in like the late
nineties and said, Oh, we're done.
1:30:26You know, I mean, iOS is like built on
macOS, which is built on next, which is
1:30:30built in the eighties and we have windows,
which like still has like some parts in
1:30:34it that are from, you know, the nineties
or maybe even further back than that.
1:30:38And so a lot of these OS's that we use
today, and even like the windowing,
1:30:41like the compositing windowing system
is sort of like an ancient idea, right.
1:30:45Of like, that comes from like X11 and
stuff like that, or, you know, even
1:30:49earlier stuff, of course, X11 was not the
first, but, you know, you have a window.
1:30:54And you have a window and
these are two like bitmaps or
1:30:57textures, if in GPX or either.
1:30:59And each window is like a process
or whatever you want to call it.
1:31:02And they like use the same library code to
draw the same button into their bitmaps.
1:31:06And then on the desktop, you
put these bitmaps together and
1:31:09that's how you have windows.
1:31:10I was like, gee, the huge problem
with this is that how do you like
1:31:13introspect what's on the desktop?
1:31:14How do you do things like accessibility?
1:31:16How do you, how do you like, uh,
debug something that goes wrong?
1:31:19That crosses the boundary of two windows.
1:31:22Like you, it becomes really hard and
you end up with this like really weird
1:31:26patched on things at the, at the end.
1:31:28And so I think that the
services argument, right?
1:31:31Like then we think about, so why is it
so that today you look at someone who
1:31:36used a Mac book And what apps do you use?
1:31:38These are web apps that they use.
1:31:40They are not native apps, but they
have this like Mac OS running there.
1:31:43Why aren't there Mac OS apps?
1:31:44I think it's because Mac OS
doesn't provide the things
1:31:46that people want, right?
1:31:48Developers want.
1:31:49I want to be able to just like fetch
the thing from the network, right?
1:31:51I can do that one line of code in
JavaScript or like a fucking million
1:31:55lines, excuse my French, of codes
in, in like a Mac OS native, right?
1:32:00There's just like a, there's a mismatch
between the services that an OS provides.
1:32:04Another thing is like, like
payments or like subscriptions
1:32:07or whatever, like revenue.
1:32:08Let's say that I read a little thing.
1:32:10And it's a hobby thing.
1:32:11I can't spend too much like time
slash money on it, but I still spend
1:32:15a lot of like my time and money on it.
1:32:16Right.
1:32:17Even if it's like, you know, five
hours a week and now I'm going
1:32:20to ask people who really like it.
1:32:22It's kind of the shareware model.
1:32:23So like, give me a dollar,
like a month, if they like this
1:32:26thing or just like one time.
1:32:27And obviously I'm not like pitching
anything novel here, like the, you know,
1:32:32Apple app stores are very successful
and everything else that comes after it.
1:32:36But the problem with that is that
it is sort of like a monolith.
1:32:39It's this sort of like
it's in the planet Apple.
1:32:41First off, if you want this to
work on other platforms, like
1:32:44you can't, it's iOS or nothing.
1:32:46And if you want to market this somewhere
else where you really can't, it's in
1:32:49the app store or nowhere else, and you
have to build it specifically for them.
1:32:53And there's all of this, this
whole list of cabinets is basically
1:32:55like there's a little bubble,
you can put it in the bubble.
1:32:58If you don't want it to be in
the bubble, you're on your own.
1:33:00You got to Do a Stripe integration
or something that's going to take
1:33:03you a lot more time than you have.
1:33:05And so I think that there's a lot of
hobby developers out there who make
1:33:09something truly valuable who will
just like, just pass on it, right?
1:33:13They will just pass on the revenue
they could get because it's
1:33:15just like not worth building it.
1:33:17So that's just one example.
1:33:19Uh, multipliers we were talking about
is another example, like data syncing,
1:33:22all of these things that like the OSS
that we use today, they just don't
1:33:26provide But the web platform does.
1:33:28So we moved to the web platform instead.
1:33:29Yeah.
1:33:30I love that, that vision.
1:33:31Uh, and, and so I've mentioned before
that I am trying to build the best
1:33:36of both worlds for like embracing the
web, still making the app feel native
1:33:40and, uh, the app also following the
local-first ideals as much as possible.
1:33:45This is really, uh, building an
app on the hard mode compared
1:33:49to how you build other apps.
1:33:50So.
1:33:51Um, chasing that quality,
et cetera, but it's so hard.
1:33:55Um, and this is where in the future,
where I can just build Overtone on top
1:34:01of Playbit, this is where I can put all
of my effort on making the, like spending
1:34:06the quality on like even, even more higher
leverage things, and you've been taking
1:34:12care of like the tough foundation that the
app is collaborative by default, that it
1:34:17feels more, gives me better primitives.
1:34:19The app feels native where, depending
on where it's running, whether it's
1:34:23running in the browser or whether
it's running on, on someone's
1:34:27more, more native environment.
1:34:29So I'm really looking
forward to that future.
1:34:31I have one tangent question.
1:34:33Uh, you've been mentioning that you're
developing Playbit inside of Playbit.
1:34:39Looking at this from a similar lens,
I'm very curious whether you can already
1:34:43have a browser running inside of Playbit
and then open a Playbit environment
1:34:48within the browser running Playbit.
1:34:53Oh, we don't have a web browser yet.
1:34:57If there's anyone out there who wants
to join us, I mean, play, but it's
1:35:00like a venture backed company, like,
you know, we can pay you a salary.
1:35:03It's like a real job.
1:35:05If you want to come work with us
and, you know, put Chrome or Firefox
1:35:08in play, but yeah, hit me up.
1:35:11Or if you want to work on like
GPU stuff or the Linux kernel, we
1:35:16are looking to hire a few people.
1:35:17So yeah, there's no web browser yet.
1:35:19It will, it will be a mind band.
1:35:20Yeah.
1:35:21To like run it inside a web browser,
because then you can keep going.
1:35:23It's like you take a video camera
connected to a TV and you point
1:35:27it at the TV, you know, you got
this like, Infinity mirror effect.
1:35:31Yeah.
1:35:31That's kind of fun.
1:35:32Uh, exactly.
1:35:33That's what I had in mind, or I think you
get the same when you like use like Google
1:35:37meet or something or whatever it's called
these days, but yeah, I would like take
1:35:41up that, that job offer opportunity in
a, in an instant, if I had the background
1:35:47that fits it and If I wasn't already knee
deep in all sorts of other things, but
1:35:52I'm sure there, there will be someone
out there who is the perfect fit and
1:35:56I'm sure that's an amazing opportunity.
1:35:59So before wrapping up, you're
all, you're not just building such
1:36:03an ambitious startup, but you're
also about to become a father.
1:36:07So I'm very curious, uh, from
a personal perspective, like
1:36:11how are you navigating that?
1:36:13How do you balance going after such
an, such an ambitious project, uh,
1:36:18and also navigating that becoming a
father, raising a family and so on.
1:36:22I think I've just got a bit of perspective
of what I think it's like important.
1:36:26And less important, the more
important and worth spending time on.
1:36:29Like earlier in my life, there was
one point where I found myself like
1:36:33in a heart intensive care, minutes
away from like dying because I wasn't
1:36:39sleeping and I was working all the time.
1:36:41And it was like an
absolutely insane lifestyle.
1:36:43You know, I would be partying and I
would sleep like basically three hours
1:36:47a night and have two jobs and party.
1:36:49And you know, one day my body
almost like give up and it was died.
1:36:53And that was like a
pretty good wake up call.
1:36:55But that didn't fix it.
1:36:56I was still like insane.
1:36:57And so this was before I joined
Spotify and it's Spotify.
1:37:01I, you know, I was, I ran the whole
design department for four years alone.
1:37:06So, you know, I would do marketing
stuff and all of the UI and everything.
1:37:10You just one person, right?
1:37:11There's no other designers.
1:37:13It was absolutely insane.
1:37:14And I didn't know better.
1:37:15And I worked all the time.
1:37:17And I mean, like basically 24, 7, 4.
1:37:20The first, like, year or 2 and, you
know, I paid like a pretty heavy price
1:37:25from both of these experiences and
it's, you know, just like a waves on a
1:37:29body of water, you know, the cost and
effect, there's a quite a bit of delay.
1:37:34And so I started to realize that.
1:37:36You know, what the costs have been and
losing, you know, friends and, and losing
1:37:41out on like social events and, you know,
losing my girlfriend and like, yeah, it's
1:37:46losing a lot of things, losing health
and, you know, all of this kind of stuff.
1:37:50And anyhow, so that, that was a long time
ago, you know, that was like mid 2000s.
1:37:54And now I think that work is
like, yes, it's a part of life.
1:37:58And if you're lucky.
1:38:00You'll find something to work on that
creates a passion in you know, when
1:38:04in the morning you wake up and you
think about it in like a good way.
1:38:07If in like, I gotta get make a cup of
coffee and like get jump into this layer.
1:38:13That thing I think that is like.
1:38:15All one can wish for when it comes
to like work that is like the,
1:38:19if you, if you get to the level,
you're like, you've made it right.
1:38:22If sure, if you, if you still
need to make money, that's another
1:38:25problem, but like beyond, beyond that
and then everything else in life.
1:38:28So I think as I just have this philosophy
that like work is important and it's about
1:38:33passion, you know, if you can make it so,
and with play a bit specifically, and I
1:38:38made it very clear to everyone involved
in play a bit from like day one that.
1:38:43This is something that will be done
on, uh, like, uh, on a balance.
1:38:47This is not a, I'm going to
give up like five years of my
1:38:50life just to make this happen.
1:38:51This is not like a, I'm going
to like get rid of my friends
1:38:55because it's more important.
1:38:56And so, you know, starting a family and
like moving and having hobbies outside
1:39:00of work is like an explicit goal.
1:39:03And it's the same with true for
like our employees that there
1:39:06are no expectations to work.
1:39:08Outside of working hours and compensation
does not happen on a time basis.
1:39:12Not like if you work four hours, you
make more than if you work two hours.
1:39:16I think that model is just fundamentally
incompatible with this mindset.
1:39:19And that also goes to like, you
know, we don't really have sort
1:39:22of like milestones or, or, uh,
measurements of like how we're doing.
1:39:26It's more like we have a roadmap
and we build things toward it.
1:39:30And we have different
areas of responsibility.
1:39:33How well we are doing is measured
in like the actual product.
1:39:36Like, can it do the thing, right?
1:39:38Have we done the thing that
we said we were going to do?
1:39:40Like, if, if not, we're not doing well
and we got to figure something out.
1:39:44If it does, we're doing well
and let's keep doing it.
1:39:46Exactly.
1:39:47And if you have that passion, like
getting up in the morning, being super
1:39:50pumped about doing that, that is the,
that's the best fuel to get there.
1:39:54Probably even more efficiently
than if you'd have like the best
1:39:58product managers who figure out
every, every step along the way.
1:40:02I think that's right.
1:40:03And I think it's like, it's, it's such
a nice kernel of an idea, but to build
1:40:07things around, like you think about, okay,
now, how do you, how do you create that?
1:40:11Or how do you maintain it?
1:40:11If you have created it, I
think that's really hard.
1:40:14And it's a lot of work
to make that happen.
1:40:15Right.
1:40:16For once, if you, let's say you
like to eat pizza, if you eat pizza
1:40:19every day, pretty soon, you're
not going to like pizza anymore.
1:40:22Right.
1:40:23And so like, if you work on the
thing that you're really passionate
1:40:25about, like, Unhinged like totally
all the time, very quickly.
1:40:29Will you like burn out or
whatever you want to call it?
1:40:31It's not going to be fun anymore.
1:40:32So you lose it.
1:40:33If you don't get to exercise what you're
excited about, it will like wane away.
1:40:38Right.
1:40:39So there's like more dimensions to it.
1:40:41Managing that I think suddenly
becomes done an effort.
1:40:44It's not like we're working less.
1:40:45We're just working hard
on different things.
1:40:47Right.
1:40:48And so like, you know, the way we work
now, sometimes maybe someone like feels
1:40:52like tired a day or like feels like
they have a cold or something like that.
1:40:56Yeah.
1:40:56You just don't work that day, just
take the day off or, or it feels like,
1:41:00Oh God, I've been like, we're, we
have this like memory corruption bug.
1:41:03Uh, we weren't sure.
1:41:04Is it in the kernel?
1:41:05Is it in the compiler?
1:41:07Is it, there was this thing that
was lasting for two weeks and we
1:41:09were like, okay, we just got it.
1:41:11We need to take like two days off and
just like, I don't know, read a book, look
1:41:15at a tree, play a video game, whatever.
1:41:18And came back to it and, you
know, we, we, we found it.
1:41:21And so I think like, you know, part of
this is also taking like a break when
1:41:26you're like, you know, uh, climbing
a mountain and it's like really hard.
1:41:29You need to take a break.
1:41:30Otherwise you're just going to
overextend yourself and fall down.
1:41:33Yeah.
1:41:33And, but I think it's
like similar to food.
1:41:36It's not just like that besides pizza,
everything tastes bad, but there's
1:41:41plenty of other good things that taste
really well and you can, you can just
1:41:46Choose and like cycle between them.
1:41:48And I think this also shows in your
portfolio work, you've not just tackled
1:41:53super hard data problems or, uh, or
performance problems, but you also took
1:41:58like more scenic routes, creating one of
the most popular fonts out there, enter.
1:42:03And, uh, for, for me, I can, can
totally see how just switching a
1:42:08little bit of, between those different
things can be really re energizing.
1:42:12And I love that mindset and that,
that balance that you're striking for.
1:42:17And I think that is, is very
on brand for, for Playbit that
1:42:22it should be fun and playful.
1:42:24Yeah.
1:42:25Life is really short.
1:42:26It's much shorter than we think.
1:42:27And we usually don't realize how
short it is until we lose something.
1:42:31You know, like a family member
or health or whatever it is.
1:42:35So I think it's never a bad idea to
reiterate that like life really is short.
1:42:38And the one thing we all have the
same amount of is time, right?
1:42:42That's, I think that's like
your body and your time are your
1:42:45two most valuable resources and
everything else is just secondary.
1:42:48Right?
1:42:48Well, thank you so much for making the
limited time that we have more joyful.
1:42:53by great software and, uh, thank you
so much for taking this huge amount of
1:42:58time today out of your day, uh, to share
all of those stories on the podcast.
1:43:02Thank you so much.
1:43:03Thank you so much, Johannes.
1:43:05This was super fun.
1:43:06I love just talking about
these things with you.
1:43:08If it's on a podcast or over a
cup of coffee, and I hope we can
1:43:10do more of this in the future.
1:43:12Awesome.
1:43:12I couldn't agree more.
1:43:14Take care.
1:43:15Thank you.
1:43:15Bye.
1:43:17Thank you for listening to
the localfirst.fm podcast.
1:43:19If you've enjoyed this episode and haven't
done so already, please subscribe and
1:43:23leave a review wherever you're listening.
1:43:25Please also tell your friends about it.
1:43:27If you think they could be interested
in local-first, if you have feedback,
1:43:30questions or ideas for the podcast,
please get in touch via hello at
1:43:34localfirst.fm or use the feedback form on
our website, special thanks to Expo and
1:43:40Crab Nebula for supporting this podcast.
1:43:42See you next time.