localfirst.fm

A podcast about local-first software development

Listen

Conference

#6 – Rasmus Andersson: Playbit, Software Quality, Data Models Tradeoffs


The guest of this episode is Rasmus Anderson, who helped to build many monumental products such as Spotify, Dropbox and Figma and is now working on Playbit, a local-first operating system built from scratch. 
This extended conversation will go deep on software quality, the tradeoffs of different data models and the importance of the web for modern applications. 

Mentioned in podcast


Links:

Thank you to Expo and CrabNebula for supporting the podcast.

Transcript

Intro
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.
Spotify
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.
Facebook, Dropbox & Figma
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
Why all those projects where local-first?
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.
Data Models
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.
The Swiss Army Knife Problem
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.
The Web: A Love/Hate Relationship
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?
What is Native?
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
Performance
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.
Favorite Apps
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.
Theory on Degrading App Quality over Time
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
Playbit: A Local-First OS
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
Local-First Data in Playbit
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,
Passion and Finding Balance
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
Outro
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.