¶ Intro
You know, in the end, I kind of hope all software will be local-first, but there's varying degrees to which paying that, being early tax, the pioneer taxes, as you described it, may be worth it depending on the domain that you're building for. But of course, over time, that pioneer tax gets less and less. It's already gotten way less than last year, and probably in the last six months, it will get less. It's going to continue going down, and so that makes the trade off.
to think about less and less. And eventually it just becomes the pragmatic solution to just say like, Oh, obviously you're going to do things that way. That's just kind of the best way. Welcome to the local-first FM podcast. I'm your host, Johannes Schickling, and I'm a web developer, a startup founder, and love the craft of software engineering. For the past few years, I've been on a journey to build a modern, high quality music app using web technologies.
And in doing so, I've been falling down the rabbit hole of local-first software. In this episode, I'm speaking to Adam Wiggins, who's the founder of Heroku and one of the original co-authors of the local-first essay by Ink & Switch. As Adam is also a co-organizer of the first Local-First Conference, in this conversation, we reflect on the event, share our learnings, and discuss a couple of key topics, such as a new definition of local-first software.
Before getting started, also a big thank you to Rosicorp and Expo for supporting this podcast. And now my conversation with Adam. Hey Adam, welcome to the show. How are you doing? Hey Johannes, I'm doing really well. Still kind of glowing with the buzz of a successful conference. Yeah, I'm super excited to have you on the show.
Uh, and to be fair, this show probably wouldn't exist without you since you've provided a lot of guidance behind the scenes, given that you've, run this, this amazing podcast for Metamuse, which has always been a lot of inspiration to me. And so you've certainly been a bit of a catalyst for me to start this podcast, but for the audience who's maybe not as familiar with you, would you mind briefly giving a background and what led you to local-first?
Certainly. Well, I think a lot of folks might know a company I started called Heroku, which does web app deployment, very cloud centric, which is sort of part of the story of what brought me to local-first is going all in on cloud when that was on its rise.
Since then, I founded a industrial research lab called Ink & Switch, which I'm guessing listeners of the podcast may often know that that was the place where we gestated first the research, the kind of CRDT and peer to peer stuff that led into us forming this position piece, which we eventually decided to give the label local-first software and indeed has continued to try to push forward in that, in that field.
And after that, I went to work on a spin out from the research lab called Muse, which is an infinite canvas for thinking, did that for about four years before handing it over to my colleague who's still running it, and, we built that as a fully local-first system, kind of homegrown, and, Yeah, that's, uh, that's what brought me, brought me to today.
¶ Local-First Conf genesys and recap
Yeah, I feel like there's a lot to unpack and to go deeper, but that is not the focus for today's episode, since, you and I have not just been collaborating on the podcast, but also on another undertaking, which is the first Local-First Conference that we did together in Berlin. And so this conference kind of came to be as I did last year, when Jeoffrey Litt was in town, I wanted to meet with Jeoffrey and a whole bunch of other people and the common theme was local-first.
So I felt like a good way to accommodate all of that is like led to me doing a local-first meetup in Berlin. That went so well and had so many people show up and so many interesting conversations that at a minimum, I was thinking of doing the meetup again, but I was floating the idea of doing a Local-First Conference, and taking sort of that next step. I was floating this idea with you and I was floating this idea with a few other friends who I organized, the GraphQL conferences in the past.
So one thing led to another. And, jokingly thinking about starting this conference led to us actually grouping up, doing the conference together. And, I think it went absolutely brilliantly. So, so many interesting folks Giving amazing talks, so many interesting conversations of in between the talks and people came from all across the world, from like Hawaii to Australia to Singapore and Bangkok.
And so that went way beyond my expectations, but I suppose only a few amount of the people who are listening to the podcast maybe had the chance to actually attend since the tickets were kind of flying off the shelves pretty quickly. So would you mind providing a recap of like what the conference, how that actually went down for, for the few days where it happened? Yeah, there's a lot to tell there.
Uh, if I can add just slightly to your, to your origin story, uh, there, I do think it's interesting to note that, you know, you talked about the meetup that you organized last year and all the energy that came from that.
I mean, I think you and I were, were discussing around that time, you know, over lunch or something like that, that like we saw this surge in interest in local-first, well funded companies who are popping up to build infrastructure, more products who are either using that terminology in their marketing or building in that, that way. And this is sort of surprising because the paper itself is five years old. A lot of the research and technology is closer to a decade old. Why now in particular?
And I think the answer is ideas just take a long time to disseminate or I'm not even sure why, but we were just observing this and saying, This is pretty exciting. And then what should we do to help that? And I was brainstorming along the lines of like, maybe it's the time to make a foundation or something like that. And you, you kind of felt no, and I think your instincts were right. And ultimately, yeah, you organized the meetup. That was an incredible amount of turnout and energy there.
You said, I'm going to start a podcast, which you have done and, and it's going great from what I can, uh, what I can tell as a listener. And then this beginning of this year, you said, you know, maybe it's the time for a conference to really try to put it on the map, not just as a kind of an academic thing, because there have been programming local-first days connected to academic conferences, but as a thing for builders and a thing for, this is a thing.
This is a technology or a set of ideas about how to build applications that is real. It is here now. You can use it. It's exciting. And, you know, meet other people who are, meet the other weirdos who are interested in this. I think this very distinctly marked a moment for me where There were so many people and, most notably a bunch of people who I've never seen before, who I've never met.
So this kind of like tightly knit group of local-first experts seems to have like really grown already into a wider audience. Who, taking those ideas, building apps that I wasn't aware of. And so this is growing beyond this, this, core group, which I think is a, is a brilliant sign of success that the ideas are, going to where they need to go. Yeah, that's a great point. I think that was part of the thing last year.
It was like, up until that point, if anything ever came along, a library, a product, an essay that referenced the concept, I'm like, oh yeah, I know who that is. I know them from this core community, this small circle of people who's been interested in it. And last year, it started to be more and more things popping up where I just thought, I'm Who is this? I've never met this person. That's good. It's growing beyond its, its origins.
Exactly. And I think what's also been interesting in the conference, and I'll invite you to provide a recap to, to that shortly, but it's been so interesting that like local-first has sort of a diffuse timeline where there's certainly the very notable point in time where you and Peter and Martin, et cetera, have like written this, this amazing essay. But the ideas of local-first, already were out there before that. They were maybe not as crisply written down.
And so at this conference, we also had people who've been de facto doing local-first software before the term was like as clearly written down. And so we brought together all of like those sort of like Real old school, like OG, local-first people and sort of like the people who just got attracted by the essay and beyond that. So, yeah, I'm curious, maybe you can recap, what was the goal for how we laid out the conference and what did happen over the conference days?
Yeah, so we wanted to make it big enough to feel, well, I guess like a conference, like an event, like something serious. This is a community with some gravitas to it, but small enough to still be intimate. We want to be able to talk to everyone. And honestly, we really didn't know the level of interest there would be. As you pointed out, we, we sold out way too quickly. We had to turn lots of. Wonderful people away and speaker plus ones and everything like that.
So, so maybe we, we underestimated the interest, which is, I guess, a good problem to have, but yeah, we had a venue for about 200 people. Uh, we ended up with 18 speakers, which was a lot to fit into to one day. Um, although I think the, the rapid fire nature of it also helped create a lot of energy and keep the signal, the noise or the, density, I guess, of information high, which I liked quite a bit.
So that was sort of the main day event in a beautiful venue that, you and, and our other, co conspirator Emma had, had used in the past. and then we did a second event that was kind of, or a second day that we sort of added on a little later when we saw the interest, which we call an Expo Day.
This was run by, our friend Peter Van Hardenburg, where basically bringing all the people who are building infrastructure, that is, say, libraries or, um, services that provides some kind of framework or, or way to, to do local-first versus, you know, just sitting down to write your own CRDT from scratch, and get them to get up, give a demo, help everyone walk through it on their laptops, get started, and then provide hands on support.
So hopefully going from the speaker day, or the intention anyway is to go from the speaker day with the talks to get everyone inspired. and then go into a day that was more about building and making things. And I think, indeed, that is, that is how it worked out. And then, the other, I think, awesome thing that happened, in addition to, the main event is we actually had satellite events. We had folks who, uh, did things before and after.
One of the more notable ones, I think, was that there was a Future of Coding meetup that someone organized for the day. After, I got word, uh, later that a bunch of the folks working on the identity problem, which is, remains kind of one of the big unsolved problems of local-first, got together and did like a 12 hour marathon session. and there's a, uh, a blog post we can maybe link to in the show notes, which was kind of the output of, what the state of the art is there.
And then I think there was just a ton of follow on, uh, work. Kind of energy or something like that on, on Twitter. So there's various threads around people reflecting on the conference, of course. Paul Butler had a really excellent write up. Again, maybe we can link that as well. But also just a lot of people discussing and debating, and I think therefore surfacing the term for new people. A lot of folks coming in and being like, wait, what is, what are we talking about here?
What is this local-first thing? But people also having good genuine arguments about, like, is this, you know, is this trend something that is worth paying attention to, what are the real benefits here, why do you want to do things this way, and so the, just the sense that, I think, again, part of our goal for the event was help give this community a center point and put it on the map and further expand the community beyond this core set of people who've been interested in it for a long time.
And I, at least I feel like it really, accomplished that. What's your, what's your read on the, uh, you know, looking back post talk a little bit yeah, absolutely. So I found it so fascinating how we tried to create a bit of a structure of like a conference day, as opposed to an unconference. It's like certainly a more structured, a more curated experience where people like need to come to the same place.
It was very important for us that we wanted to make it a, like, more put the focus on the in person experience, throughout COVID, etc. I've attended many online only events, etc. And it's just not the same, like , You can't compare meeting someone, like going really deep, very quickly on a certain topic, grabbing a coffee with them, going even deeper and exchanging ideas in a very like organic way. You can't do that over text chat or over Zoom.
So doing that in person where other people can chime in, this was certainly the bread and butter. and so combining that with inviting like people who have deep expertise so they can give talks, et cetera. This was the foundation, but where this then led to that it wasn't just the conference day. And then we did the, the, the expo day after, but that like kind of organically and spontaneously, other people contributed whole satellite events around it.
It really felt like a whole, not just a Local-First Conference day, but a whole local-first week where we had amazing people coming from, from all over the world. And so for me, basically started, even though the conference day was on Thursday, For me, it started on Monday night when, Steve Ruiz and other people came in and when we went to a beer garden until midnight every day, and we're just going deep on, on syncing and CRTs and trade offs, et cetera. And that, that was amazing.
Um, and so just to see. The, the energy and like the different sort of paths that people have, where some of them are building apps, some of them are building tools. Some of them combine both or tackle it from an entirely different perspective. this was just a wonderful, uh, coming together of different people. So this was the core of it for me. The different people aspect of things was both a goal, a top level goal for me. Uh, and also my biggest concern about whether it would work.
So basically I saw it as a chance to, you know, we talked about expanding that core community. I saw it as something where you had people, especially around the academic world or connected to Ink and Switch in the research world, or have been working on this realm of things for a long time, or often come at it, and I put myself in this category from an ideological perspective, this way of building represents a way that I think computers can be better for humanity on net.
It's not just about, of course, I love the better developer experience and the lower operational cost and some of these benefits, but I think that there is a philosophical aspect to it that is, for me, is the heart of it. But also, I think, to grow and to be, to go into the real world and to be relevant in the real world, you need to, in some cases, be more pragmatic than that.
The way the one person put it in a, in a conversation with me is they're like, I came to this cause it's like a way to save money on my cloud bill. And it's just like. Clouds, you know, my cloud bill keeps killing my startups because it run up a too, too big a cost. And this is a way to cut that down. And that sounds so reductive and, almost even offensive. Maybe if you do come at it from the ideological perspective, but also that, that makes sense that there are a variety of benefits.
There's a variety of paths of why you would come here. And so to, you know, I think the big tent approach of there's room for, for everyone, if we can find common ground. So we really were trying to bring in that core community, of course, but also people who are more pragmatic, you know, they're building a company, they're an engineer, they're a designer, something they want to get some specific immediate benefit for their business, or they see a commercial opportunity.
For example, we've had a few investors here, you know, I think it's still pretty early for that, but a few folks who, you know, see that there's, uh, there's commercial opportunity there.
and the 3rd demographic, if you, if you want to think of the, you know, the longtime core community, idealism driven folks, and then the builders or commercial opportunity, pragmatic folks as, as another demographic, a 3rd one, Actually, it would just be the local-first curious and some of the best conversations I had, I think, were, uh, with a lot of those folks, many of whom, you know, basically just said, I'd never heard of this term up until when this conference
was announced, but I, I see there's something going on here and I I wanted to find out about it and it was great to get all those people together and our goal was to get all those people together. But there was also a chance that those people could very much clash.
the, uh, folks who see pragmatic benefits in it, and the folks who come from a status quo perspective on building applications, and the folks who are long time members of the community might just not like each other, get along, or share enough values. so that was a concern for me, but I think 100% The way it bore out was we have way more in common than differences. Yeah, most certainly.
I think we struck a really nice balance there where, it was very approachable for experienced engineers who've like experienced different kind of problems building cloud apps and building on different platforms where they might not be yet all familiar with the ideas of local-first, but I think they could throughout the stay.
Uh, it really clicked for them how local-first provides an interesting alternative that addresses a lot of the problems that they have, as well as for people who are already very deep in local-first of the last couple of years, where you could learn a lot about different sort of trade offs and different experience paths of people who went already very deep on certain things. So I think we struck a really nice balance there.
So the meat of the conference day on Thursday were most notably the talks. So I'm curious, given that you and I were both responsible in the organizing team to put together those talks. I'm super excited how everything, shaped out there.
And, I think we managed to strike a really nice balance on like a spectrum of, of speakers, some who already, Go super deep on like local-first technological parts for many years, some are more on the pragmatic end, might not meet all the ideals of local-first, but reach millions of users. And I think that's all kind of like nicely converging. so I'm curious which talks, which speakers stood out most for you and, what are you still thinking about there?
¶ Conference highlights
Yeah, well, I suppose it's not surprising that you and I both, since we directly made the speaker lineup and got to pick all of our favorite people and put them in an order that we liked, uh, that we would both be probably pretty, pretty pleased with the outcome. I guess it's, I guess it's a good sign, that if anyone should enjoy it, it should be us. But yeah, I, this is the only time I have ever listened to every single minute of a talk in the entire day of a conference.
usually there's some point I get a little bored or restless or, yeah, I just want to stretch my legs or just get, you know, caught up in a conversation and I, and, and I want to stick with that, but I really, all of these speakers had such an interesting thing to add to, like you said, that bigger stew of different perspectives.
We also took the approach of making the time slots really tight, which had Sometimes I felt bad, I've seen some of the speakers have a little bit of anxiety about, you know, squeezing their, their content down, but I think it, it part of was what kept stuff moving and again, the density of the, the information just meant that like, there wasn't, there wasn't a moment to get bored, which I, which I really enjoyed.
Yeah, it'd be hard to pick favorites, you know, but if you were going to look at some of the, you know, the temp polls, of course, we have, you know, our opening, um, kind of closest thing to a local-first celebrity, which was Martin Kleppmann, and he dug in on, you know, five years on from writing the initial paper, how would he You know, what would he add to that? Or how would he change? Um, you know, what have we learned in that time?
And he touched on the kind of the definition of local-first, which I think is a, is an ongoing question for the community. Uh, we followed that up pretty directly with Tuomas Aertmann from Linear, and I think this is one of the bigger success. I mean, Linear is obviously a huge success story in the startup world, um, but the fact that they, I think he probably kind of built this way from the get go because he believes this is just the only way to build software.
He jokes about like, when he sits down to ever start a new thing, the first thing he always does is write a sync engine. That's what he did here. Hopefully in the future, we have enough off the shelf stuff that's not necessary anymore, but you can very directly point to Linear is known for being so high performance and, uh, that makes it really stand apart from all the other SaaS alternatives in the industry.
And, yeah, again, you can, you can debate the degree to which of those local-first principles they fulfill, but in terms of like a very high profile successful example where we're using local-first in how they built their product is directly connected to why they are so successful in their business and how they are differentiated.
So I think that was a powerful one too, to take the, you know, the sort of community elder combined with, um, you know, a pragmatic example of how a product can be successful. And then, yeah, maybe some, you know, two other notable ones to me would be Aaron Goodman's talk, where he basically announced on stage his next iteration of the, I guess it's the RepliCache Reflect, and now what he's calling Zero. He's really been grappling with this space, I think.
I think he was your first guest, if I'm not mistaken, on the podcast here, or one of the first? The second one. Peter was the first one. Yeah. Yeah. He's been grappling with this in the real world, I think. In the sense of building infrastructure for others, probably, almost as long as anyone. And he's been through these iterations and he talked about the partial sync and gave an amazing demo.
And then the, the, the closing, closing talk was, uh, Maggie Appleton, who's always amazing, but she gave a talk on barefoot developers, kind of this concept, bringing together end user programming, which of course is very near and dear to my heart. If you know anything about my, my writing and, and, uh, interests. Putting that together with language models and AI and local-first, and that all of these things fit together in a, uh, in a way that's very significant.
many, many folks talked about her, her talk as being a highlight of the day. So those were just a few that, um, seemed quite notable, let's say. What were some of your favorites? Yeah, I, I certainly agree with your picks here.
Um, I'm actually the, the ones that you mentioned, I, I'm going to also have some of those on the, the podcast since there's so many interesting points in there that I want to, I want to Dive deeper in whether it's like how, Tomas had the foresight to bet on a sync engine when building a new product and, how that, like, I think he mentioned it on stage, it's like they, they can basically all focus on the front end engineering team, and kind of cut their engineering team in half,
keep the company small and thus ship much more quickly and how that's just turning into a massive competitive advantage. So I think that's. You know, underexplored and underappreciated outside of the local-first bubble. So, that's something I want to explore more. And, I think, he also made an interesting point , he has written a great blog post about how like a typical MVP of a product is no longer enough to really make it in today's competitive landscape of products.
And how you need to just, the bar is really high for building products and Linear has now shown where the bar is at and kind of the only way to get there, I think, is by following the local-first architecture for productivity and personal apps like that. So I think it was really inspiring to hear his talk there.
And then, we also heard from, from a bunch of builders who've been building local-first and local-first technologies already for, at some point, more than a decade and who at some point learned like, oh, the way how I always build things is called local-first. And that's really interesting. And, then also, uh, from a tool builder's perspective, hearing about the interesting challenges and design trade offs. So what Aaron has announced with Ciro on stage was certainly very interesting.
I think it kind of takes a step away from some of the local-first ideals, but on the other hand, makes it even more approachable. for people who are more coming from the cloud world and might be a bit of a gateway drug. Also bringing more people into the local-first ecosystem. And, Maggie's talk was like on a whole different level , and this is something I was really excited about, that this worked out since, she's been, on my radar for a long, long, long time.
Like when she started out creating those amazing visuals for like Egghead videos, for Egghead courses, et cetera. This is where I like always appreciated how thoughtful shegoes about communicating difficult concepts and how, how much she thinks about those concepts that she can communicate those to others.
And I think here, she's really taking it to the next level by immersing herself in the local-first ecosystem that she has not really been directly part of before but I think she has picked up all the right ideas. In preparation and connected the dots for herself with other topics that are really top of mind for her, end user programming, and coining a whole new term in the, in the process, uh, as Sparefit Developers, which is a topic I want to explore with her on a, on a future episode.
So certainly, um, some, some brilliant highlights and I think Martin, also in a very nice way, reframed the state of the local-first ecosystem, like redefine the goal. What is local-first software? what is maybe not local-first software, I think was a brilliant way to start today. So now that we've covered the different talk highlights from, from our perspectives, I'm curious, what are some of the core themes, core learnings that are top of mind for you?
¶ Conference core themes/learnings
Well, certainly we touched on already that bringing together these different people who came to this, world with different motivations and different backgrounds do click and gel and share values together. So I think that was, a happy, a happy learning. Getting a little more kind of nuts and bolts. Uh, one of the things that really struck me was just the element of UI performance. And obviously we're just talking about Linear there, but, we had some demos specifically.
You showed your app, Overtone, sort of flipping between playlists and comparing that to Spotify. then, Aaron showed, yeah, the demo was Zero. And we also saw there was a third one. Maybe it was jazz. In any case. Yeah. The thing that struck me seeing these different demos, so completely different people building in many cases, pretty different products, but all of them had this feel that was fundamentally different from most of the software that we use in our daily lives. And we've talked about.
UIs should be fast or, you know, no spinners or whatever. And I think the way we wrote that in the original essay, I was thinking like, okay, I log into Google drive and it spins for five seconds, like literally 5, 000 milliseconds before I get a paint on the screen. Okay, we can do better than that. Maybe we could, you know, get things back in under a thousand milliseconds or under 500 milliseconds, but all of these demos show Next frame performance.
That's something where it's, there's literally just no delay for in terms of like human perception and it feels fundamentally different. And to me, uh, when I think of how much human kind of energy and just like soul is lost on waiting for software all the time, the idea of a new generation software that is kind of next frame by default is, Very exciting.
And seeing them side by side, again, that several other, um, many people building towards this have ended on a thing that has this fundamentally same feel that is the same as each other, but different from everything else we know outside of, I don't know, maybe like video games or something. That was That would, for me, was very powerful.
And I think it's like, was not necessarily a new idea, but just reconfirming that, seeing that in different contexts, uh, reestablished for me, like, Hey, this is worthwhile doing. and it's just every time I, for example, do a search in Notion, particularly, uh, when you're in this weird middle ground between having perfect connectivity and offline, this is where like more traditional, kind Cache driven, web driven, software is like trapped in this middle ground.
like I was just riding on a train two days ago and I was dreading the moment where I knew I needed to like change my Notion page and I need to navigate there. And the, uh, I knew this, I had this page open yesterday and I wanted to navigate it and like, it literally took me 30 seconds until enough packets kind of flew in and I could navigate there. And, uh, this can be so different. And I think it's, uh, the, the different demos in the conference showed that to us.
So UI performance, and also the, the different perspectives from, tool builders and app builders and people outside of the local-first ecosystem all connecting. Anything else that, stood out for you as a, as a theme or a new learning? Well, obviously sync engines were, a frequent topic, that touched on in many ways.
One thing I was quite struck by is how much similarity in, I guess, architecture, if that's a word for it, between all of these different presentations, which included, you obviously have the infrastructure creators like Jazz and DXOS and ElectricSQL and so forth, where they are very explicitly and intentionally trying to design a good general purpose sync engine infrastructure, architecture, API thing. For lots of apps to use, but also we heard a version of that from many of the app developers.
So for example, GoodNotes, and they're a really interesting case where a very successful existing business. They have like 30 million active users. They're basically on every iPad in the world, effectively. and they, you know, they came to local-first because they needed a solution for essentially merging together rich text changes.
And they're describing how they're, they're using Automerge to do that, but their core, Architecture, again, is this kind of event log model that then is fed in and, you know, turned in, reactively rendered, and there's, um, that kind of event or transaction based system is something you hear repeated again and again, and indeed that, uh, there are many other kind of concepts in the, call them the architecture diagrams, whether they actually put a diagram on screen
or not, or just talking about it, you saw that, again, all these builders, some coming from the app side, some coming from the tool side, basically arrived at kind of the same solution. And again, that to me is surprising, but also heartening in the sense that you give a lot of, different smart and capable people the same set of starting conditions and problem statements.
And if they arrive at a similar solution, that means that solution is something General purpose of wide utility, kind of a right solution if that's, if that's the word for it. So that was, that was very notable to me. Indeed, one of the points that Martin made in his opening talk was, in a few years, he'd like to see about going and getting an internet standard made for a sync protocol. And, uh, When he gave that, he's mentioned that to me privately.
And when he mentioned in his talk, I'm kind of like, yeah, I don't know. Are we really like three years away from that? Like kind of seems like it's still too early for that. But then as I saw these architectural similarities across all these kind of sync engine solutions, I was left with the feeling of like, Oh, actually I do think we're a lot, I think he's right. I think we are a lot closer than, than I thought we were.
Yeah, and I, I think this is a, this is the topic that I can't wait to, to see materialize more into reality. And I think there's like a longer timeframe there. Maybe in three years from now, we do the first early drafts of like a standardization. Yeah, it's probably start the process in three years, not finish. Exactly but until, until there's like a 1. 0 of something.
There's like a reference implementation, etc. That's going to take a longer time and until maybe there are some pieces that need to actually trickle into browsers or operating systems, that's, uh, even further down the road, but I think we're certainly reaching a point where we've explored a bunch of different approaches in the ecosystem where we can now try to converge on some of those.
And, what you've mentioned before, the kind of impromptu working group around authentication problems, et cetera, that is a major aspect and there are other major aspects that need to still be figured out, but it's really amazing to see how collaborative the entire ecosystem is where, yeah, different vendors and different individual tool builders, app builders, all come together, share their experience, and, trying to, to help create like some sort of, convergent technology
into existence, that's really cool to see. Another way to frame that same, same direction you're going is kind of solve problems versus unsolved problems. And so increasingly, I think. A lot of the stuff in the sync engine side of things, can and should have many sort of competing solutions out of the marketplace, um, that fit different styles and, you know, maybe different language ecosystems and things like that. But in some senses, how to do a sync engine in this way, is mostly figured out.
And actually one of my goals for the, the conference content was that the term CRDT should not appear too often. Um, because typically, again, you go to, some of the past events, that have, have existed with this or attend. You know, a conference or a meetup or just have a conversation with someone or anytime the topic comes up on Hacker News and people tend to be focused around the, yeah, but how do you merge changes together?
And there is still plenty of interesting research being done on the CRDT side of things, and there will always be need for new data types as we. expand the different applications that people are applying this to, but ultimately how to build a basic CRDT and put that into a sync engine and make that work reliably across different devices and multi user, basically have that figured out.
It's just now, it's a small matter of engineering now, which is still a huge challenge, but in the sense of like being a figured out thing. I think we're, we're basically there. Whereas there are other things here, and, uh, this was, uh, you know, a topic for the day, to some extent, is what are the unsolved problems?
Um, that includes things like, uh, schema and, uh, schema migrations, uh, over time, identity, as I previously mentioned, kind of authentication, um, and, and permissions generally. And there's other stuff as well.
but yeah, I think that as a community, a way to kind of collaborate loosely, even though we're all working on our own projects, is to think in terms of like, what are the relatively solved problems that we can codify with, I don't know, writing or, you know, open source libraries or things like that. We say this, this we basically have settled on the right way to do it. and there's many implementations of that.
and then other areas where we still need a wide and diverse set of active experiments to try to figure out how are we going to, how are we going to solve this problem in a local-first, uh, compatible way. This is also what stood out to me and talking to speakers, talking to, to other attendees, is how have they. who ship products, who shipped apps, how have they navigated the trade off space?
some have like used off the shelf, technologies such as like AutoMerge, Yjs, etc. But then you're sort of at the mercy of how far those technologies are along and, the inherent or current insufficiencies of those technologies are also, hard to, advance for, for you yourself. And, uh, I think there's a notable other approach for, for app builders, which is that they don't yet use one of those off the shelf technologies, but they've rolled their own.
And, whether that's Good Notes or whether that's Linear, et cetera, they've all started so early that They were convinced this is the right idea, this is the right approach, but we don't want to wait five years for the technologies to be there or to be mature enough, so they built it themselves.
And I think this is something that so many of those local-first apps have that in common, which is very encouraging for me because, at the core of it, Those you can make really drastic trade offs, um, that fit your app use case and your app requirements that might not need all the guarantees something like AutoMerge can provide. And this can help you going kind of almost counter intuitively where, only very few would build their own Ruby on Rails to ship.
A Rails app, but it, in a way you can get away with way stricter trade offs for your specific apps. So building your own syncing stack is actually not as much work. If you, have sort of like a, Like two months from Linear, if you have that sort of experience and, if you're daring enough that you feel like this is something that you want to do, but I think that's a, that's a similarity.
And what is most interesting to me about that as well is that the trade off space is traversed in a very heterogeneous way. So, depending on how someone has struck some trade offs, they might be way further along to solve certain problems. So, if you, for example, follow more of like a event sourced architecture, then you might have entirely different ways to deal with the schema migration problem. Uh, for example, if you, implement your own CRDT stack or you have other benefits.
So, and I think this now gives us a pool of experiences where one technology can learn from the entirely different architectural approach and, uh, sort of cross pollinate, the ideas. And so this was really interesting to exchange those ideas and that was kind of my main takeaway. Absolutely.
I think, you know, maybe the last takeaway I would probably mention was just, um, probably some of my favorite conversations there were talking to the People I put in the local-first curious demographic, sometimes they were, you know, colleagues with someone who was deeper in that world and this was a chance for them to better understand this, this weird thing their colleague was into. In some cases, they just had seen the buzz online and wanted to, to find out about it.
Yeah, for, for example, the, you know, schema migrations being something that is, at least the many in the community feel is, is, is largely an unsolved problem. And then that caused one person I was talking to be like, whoa, whoa, whoa, I don't want to have anything to do with the technology that, that hasn't solved this. because you know, this is so, that's such a fundamental thing to, you know, building an app in the long term and with a data stack you can trust.
Which I thought was a, which I thought was an interesting perspective. And I was kind of like, don't worry, we'll solve it. And that didn't necessarily, you know, put their, put them at ease, but it is a, you know, it was a good illustration of the fact that we are trying to go across the cusp of the threshold from, you know, academic, big idea, ivory tower into real world thing you can use, but you know, it's, it's, it is still an intermediary, intermediary state very much.
Very much bleeding edge. Another person I talked to said basically that, you know, they were new to it, but they, the energy that they felt, was really, um, unique and interesting.
And they, made a comparison I, I found very positive, which was to say they basically hadn't felt the same thing since being part of, or being around in the React world circa 2013, where kind of, and obviously there, there was a, a main library that everything centered around, but I think in general, the idea of reactive. UIs and reactive rendering as kind of the right solution for, for building applications of all kinds was, you know, was kind of this fresh, um, but, but clearly correct idea.
But similarly there, I guess, coming back to the, you know, still a work in progress, bleeding edge Stuff to figure out if you were part of the React community back then, things like state management, you would, you know, you would pick up a library that was supposed to be the, uh, you know, this is the way the community does it. This is the state of the art and you use it. And six months later, that library is deprecated.
And another one is, is now considered the, and you're like, wait a minute, I'm trying to build an application here and I'm not just sort of on shifting sands. And that is, you know, that of course is the trade off being, being part of a community that's still so so young and, and in the process of figuring it out. But to me, it's what makes it so exciting.
Cause there are so many problems to solve and not only engineering and technology wise, but design wise, we need whole new UX and UI patterns in many cases to describe things like. Sync state, pick a very simple one. So that being on the frontier in that way is to me, uh, uh, is quite a lot of fun. Yeah, it was certainly my happy place.
I consider myself to be like a technical pioneer and the conference had an incredible density of other technical pioneers where it could just exchange sort of weird battle stories of how you deal with, taming the browser to, to do what you want and, to make things work cross platform or certain performance tricks, et cetera. So it was certainly my, my happy place.
I want to slightly shift gears and talk about another theme that stood out for me across the different conversations I had, and also across the different talks that we heard, which was more around centered around the definition of local-first itself. And Martin kicked off the day by reiterating, the, the initial ideals for, for local-first. And I invite everyone to watch Martin's amazing, keynote talk there as well to, to hear those, those words for yourself, but I think the ideas were.
Kind of reflecting on the initial essay, how the initial essay laid out, the, the seven ideals for local-first software, but that was never really like a strict definition of what is local-first software actually. And also importantly, what is not local-first software.
So Martin provided, some new ideas about that, which maybe you want to recap them here, but this also then led to an interesting follow up conversation of like many of the products that were showed throughout the conference would not fully qualify as local-first software. And I think this is, some people feel more passionate about, like, very strictly, defining, oh, this is local-first software, whereas this is not local-first software.
And I think there's this interesting trade off and interesting tension for, for us as a, as a community, as an ecosystem That I would like to see is that we see, um, that see like an app sort of like on a progression, on a spectrum of like growing up to become local-first and as a powering technologies such as Automerge, et cetera. As they mature, it's gonna make it much easier to build fully compliant local-first software. But kinda.
grappling with that definition of local, pure local-first software, I'd be curious whether you have some thoughts on that and want to reflect on it. Yeah, this is an important question as the community grows up and especially again, comparing to a community built around a particular open source library or something like that, you don't have that same definitional thing.
Although even there, you can sometimes have something where a major new version, it takes the library in a different direction and then people say, this isn't what I was here for. This isn't the core of what we're all about. local-first is unique in that it is, yeah, philosophy and a set of ideals, that we think. imagines a better world or a better type of software, but not a specific implementation or single library.
and we always, you know, that initial definition of the, the goal is data ownership for people who use computers for creative and productive purposes. If I'm writing a book, The book belongs to me, and the software should reflect that. and then the seven ideals are sort of like the, also, in some sense, you could also describe them as user benefits.
These are things that you get as a result of kind of building in this way, and that therefore you can, as we conceptualize it then, essentially create a scorecard, and that implies a spectrum. If you score a zero out of seven, I think it's fair to say you don't really count as local-first software. Uh, you know, try again. If you score two out of seven, well, you know, it's a start. That's, that's pretty good. If you score five or six out of seven, then you're doing great.
I mean, I think to some extent it's almost not even fully achievable in the real world to, to have truly seven out of seven and also have a, you know, a product that's widely used.
I think that will change, I think, as we continue to, if we push the, push the boundaries on this, there is a day when you can imagine that all software, again, you referenced that earlier, like things built into the operating system, fundamentally, I think that the, the ultimate utopia for local-first or the ultimate, again, idealized world that I picture with it is our computers are fundamentally built in this way and things are built into the operating system or
into a platform like web technologies that is specifically designed to support, um, this way of software existing. But until then, you know, we'll take, you know, I think Muse, for example, we called that local-first software, but we probably scored a three or a four out of the seven.
And that was because we identified, coming back to that trade offs point you were making earlier, we identified Here are the things that we think are really ready for primetime now, where now was a couple of years ago, and, that we can implement on our team and that sort of benefits our business and our users. Here's some other ones that we're just going to leave out of scope for now.
That's aspirational for the future, but right at this moment, it's not pragmatic for us to, for us to pursue that. So I think this is sort of the, this very interesting striking a fine balance between being pragmatic and being idealistic, and where being pragmatic might help you shipping sooner, whereas being idealistic, might take you longer. But, uh, enables your users with, providing more of the benefits and ultimately full data ownership.
And I think the, the hardest, ideal to kind of reach right now, which Martin spelled out, uh, very explicitly is like, if the, the app builders go out of business, the app still. can work and, so that the app is not, degraded in functionality. And I think that takes a lot from a company like Linear, et cetera. That's probably takes most of the backseat and accomplishing the ideals, very understandably so, because you building an app, et cetera.
got to, for most people got to pay the bills and this is the hardest to achieve and, probably also helps the least in the short term in terms of getting new users, et cetera. So I hope that we'll reach at some point, from a technological advancement that this is just so easy, that self hosting becomes so easy, that data ownership, the operating system all supports that, that we have a generic sync server.
that we get this ideal almost for free by using the right technologies, but I think right now you need to fight the hardest to achieve that ideal. Yes, that's right. And again, that comes into built into the platforms and the operating systems and the foundational layer, right? Like you can try to talk users into using, I don't know, end to end encryption in their email by like generating PGP keys or whatever, but ultimately, things like the mobile.
Operating system platforms with their secure enclaves and key management built in and biometrics and secure messaging apps that kind of make all that easy and make it just, again, part of the foundations where a regular person can, an app developer can build this reasonably and a regular person using it can access it. It requires more than what any individual. builder or any individual app creator can, can do. So, so you do your best, uh, with what you have. Yeah. So to, yeah, exactly.
So Martin's description, which you should definitely watch the video of his talk, but is the thing that makes something local-first is that no one can kind of take your data away from you.
And I think in these, it's hard to separate the data and the app to some extent, because While there are standard file formats and things like that, the reality is just that, like, if Notion stops working, but I have an export of a zip file of a bunch of HTML or however it exports, it's like, well, I kind of have my data, but not really, I don't, without the functionality of the application and the way to navigate links and search and add new things, whatever, I kind of have,
I really have lost something, like My corpus of whatever I had in Notion to, in this example, would be lost to me. and his description is basically, yeah, the company going out of business and being acquired and the owner deciding to, you know, do a hard pivot in some direction that, you know, you know, kicks out a bunch of the former users and customers, uh, or just simply, yeah, servers going offline, right, is the short, is the, is the near term version of that.
And that, you know, the classic thing of like, oh, Slack's down, GitHub's down, or whatever means now I can't work, that, that would not be the case. So, I really like that as like a much, A really boiled down litmus test that if you have that, all the other stuff is probably going to tend to come with it. so I like it as a, again, an aspirational thing. I think it's a longer term thing. I think it's a thing where we're all trying to move towards.
You can build in that way today, but again, there are, there are trade offs to make, especially if you're a commercial business. Depending on what exact domain you're in and what platform you're on and so forth. For example, it's probably a lot easier to do that if you're in a, uh, kind of like a building a native app and then if you're building a web app. , but I, I think that is a really nice, definition.
Now he also said in his talk, you know, while he is a, a cornerstone person in this, community, it is a community, right? No one has, you know, there, there's no, uh, there's no benevolent dictators here. Or dictators of any kind, I guess, and he, he has a lot of moral authority, but he can't just say this is, this is what it is. We all have to decide that for ourselves. And so, to some extent, I think also this could kick off a discussion about that for the community have sort of with itself.
And again, I have my opinions. You have yours. Martin has his, um, but I think Again, we, we may play key roles in the community and helping get things started. But what makes it as a community is we're all defining it together.
So I think to me, it's very healthy to have those discussions and hopefully it doesn't turn into a purity or a holier than thou discussion, but it does turn into a practically speaking, what unites us, what are we doing here and how do we agree on, you know, what the kind of what our goals are and our values together.
¶ Post-conference perspectives
Exactly, and I think the conference, is a great result and a great milestone in that spirit, where it attracted people who've been doing local-first software development for way longer than the essay has been around, brought in people who found out about the ideas of local-first because of the essay. And now this community is like growing in a very organic way to propagate those ideas and kind of figure out the right trade offs.
And ultimately it is still about the benefits for the users and the benefits for developers. This is what brings people to the table. So I'm very excited how all of that is like very organically evolving. So I'm curious whether.
The conference has somehow changed your own perspective on local-first, since in a way, when you wrote that essay, I'm, I'm sure there was sort of like an interesting balance between seeing, Oh, this is achievable and theoretically possible, but probably also a bit of like a kick in the butt for the developer community is like, Hey, we can do this differently. But, I'm not sure whether you would have put down money on that day when you published it to say like, uh, everything's going to be.
in the future like that. So I'm curious whether the conference as a very, very concrete point in time has changed your perspective and outlook on the future of local-first? It has. I mean, the, mainly just the energy and it hasn't changed my sense on like, what the direction should be or, or, Again, coming back to this is, this is how I would like the world to be. How I would like the world of technology or software to be.
That has been the same since probably I saw the first experiments, uh, that Peter was leading back at Ink and Switch circa 2017, and I saw what software could be like, how fast the data ownership piece, the developer experience, the simplicity of not needing to run servers were very few, when I saw those, those first demos, they weren't, they were working software, but they weren't. You know, production ready. And I knew that at the time.
And, and when we wrote the essay, we felt we had learned enough that we could write down these, these ideas in a way that we hope would be compelling. But absolutely at the time, someone came to me and said, Oh, great. Should I build my app in this way? I would be like, probably not.
Uh, and indeed, even today, if someone was asking for pragmatic advice, I would say, okay, well tell me exactly what domain you're in, exactly what stage you're in, what kind of users you have, because it remains, you know, there's a lot of trade offs being so.
so on the bleeding edge, but I think the conference mainly convinced me that certainly there's more people doing this, actually doing it directly, like doing it as a day job or a very serious side project, than I thought there's more interest from the wider world of application developers than I thought. and that, yeah, maybe, maybe the time is now in the sense of, I'm not sure what the action is there, I guess.
Um, but if, if, if a person does want to do something in the space and again, the action we've chosen to take is put on a conference, cause that's what felt right. And indeed we can, um, you know, discuss the, is there a next year, piece of it. But, certainly there's something really here. You can see that it's taking shape. and if this is something I think you're interested in getting involved in now is absolutely the perfect time. That's my, that's my takeaway.
And for me, you know, I was obviously, I've obviously been involved a long time, but it's basically reignited my interest, you know, in some ways I drifted away from it in the last few years because I was working on other things and because, yeah, essentially it hadn't reached this level of maturity either in the technology or in the kind of the ideas finding their way in the community. But now I see, uh, the incredible resonance it has. I say, okay, there's, there's something here.
Yeah, and I want to share one anecdote or memory that's still in my mind from, I think, a lunch that you and I had in Berlin sometime last summer, where I think you've asked it even sometimes before then, it's like, hey, why is no one building a Ruby on Rails for, for local-first? And so this was at that point, I think was like one and a half years into building Overtone.
And I've been, working on Riffle together with Jeoffrey, et cetera, but it was so tailor made for Overtone that, at least from my perspective, I didn't really see a path how Rffle could turn into a Ruby on Rails that can empower local-first and also the other technologies in the local-first ecosystem weren't quite ready and on that trajectory yet.
But I think within the last year, I can really see, A bunch of technologies, really nicely being on the trajectory of being that Ruby on Rails or pick any other analogies that like facilitates this, like new way of building. I can see this much more clearly now than, than ever before. And so I think finally I get to give you a different answer than what we had at that lunch.
And I think this is just going to be such a multiplier and there's different trade offs, different flavors and shapes of Ruby on Rail is. But I think this will be another inflection point that allows those local-first curious people, maybe not the pioneers, but the local-first curious to flip their default to building a new app local-first without paying the pioneer's tax. And, maybe we've reached or gotten a lot closer to that point in a year from now. So I'm very much looking forward to that.
Absolutely. Yeah. If you put it in the frame of the crossing the chasm adoption curve.
Which I think a lot of folks have seen, and if not, you can do a web search for it, but there's the early adopters who are there often because it is novel, because it's exciting, because there's interesting new stuff that you can't get, but They're not really there for, yeah, pragmatism is not the The thing they're there for that literally the novelty and that there's a little bit of a chasm you have to jump over but then the next big block of people who might
adopt are what they label pragmatists and those are people for whom they have a pain to solve that is so strong that they are willing to step outside of the status quo of known good solutions a little bit to find that solution. That comes back to the, you know, someone asked me to advise them on, should I build my, my new app local-first today?
And I would want to know a lot of the details because you would, if there's a very specific problem to solve, this is exactly the case for you with Overtone and the kind of music ownership, piece of it for the, for the audio files. That's something that's really. Good fit.
other things maybe are You know, in the end, I kind of hope all software will be local-first, but there's varying degrees to which paying that, being early tax, the pioneer taxes, as you described it, may be worth it depending on the domain that you're building for. But of course, over time, that pioneer tax gets less and less. It's already gotten way less than last year, and probably in the last six months, it will get less. It's going to continue going down, and so that makes the trade off.
to think about less and less. And eventually it just becomes the pragmatic solution to just say like, Oh, obviously you're going to do things that way. That's just kind of the best way.
¶ What's next for Adam?
That's awesome. Adam, what is next for you? You've been a true pioneer for the entire local-first ecosystem. You've been working on Muse over the last couple of months. I've seen you involved in a couple of other interesting projects. So for, for those of you who follow you closely, what can we expect? Yeah, well, I'm taking some time this year to just kind of wander a bit, try some weird projects, work with new people.
Indeed, that's how I ended up, uh, being open to the idea of helping put on a conference, which is something I'd never done before. Uh, so when you approached me for that, I, I said, yeah, this, this fits into my, fits into my theme. I've always wanted the chance to work. Directly with you. And, uh, it's obviously the right time for the community. And yeah, just an interesting learning experience for me.
Um, yeah, relatedly, got to work with Jeoffrey Litt and Ink and Switch on the Patchwork project doing universal version control, which to me is a, is an idea that is built on local-first quite a bit. I see local-first in some ways as like the first layer, when you have that foundation of a new kind of computing down, you can build a lot of cool things on top of that and the, the universal version control steps us in that direction.
and then I'm also at the moment wrapping a project with Elicit, which is an AI powered kind of literature search tool, so it basically helps scientists, particularly doing systematic reviews, so that for me has been a chance to get a real crash course in the language model. And AI, world of things, working with some really world class machine learning people. So, and, and see what that's like to apply to a, to a real world problem. Uh, and after this, we'll, uh, we'll see.
But I'm, I'm continuing to kind of wander around, do, do interesting small projects. in terms of, yeah, obviously my interests around everything. That Ink & Switch ever works on like end user programming and, and, uh, infinite canvases and local-first, will continue to be the center point for my, for my career. So I'm always looking for opportunities to push those, those ideas, uh, forward.
And again, coming out of this conference, it's just this feeling that there's something really happening in local-first and, you know, I want to try to help push that forward in, in whatever way I can. What, what exact way that will be, uh, haven't, haven't quite figured that out yet.
¶ Outro
Well, thank you so much for your wandering for over the past couple of decades. I think this has always served as an incredible well of inspiration to me and many others, whether it's how you showed how simple software deployment can be with Heroku, and what has led you to, together with Peter and the others, frame the ideas and the ideals of local-first and then also ship beautiful software with Muse and the projects that you've been involved with since.
I can't wait to see where your mind takes you in the future. So thank you so much for that. And thank you so much for coming on the show. Thank you for, for all the, all the lovely words. And, uh, yeah, thanks for having me. It's a lot of fun and all looking forward to continuing listening. Thank you for listening to the local-first FM podcast. If you've enjoyed this episode and haven't done so already, please subscribe and leave a review wherever you're listening.
Please also share this episode with others. Spreading the word about the podcast is a great way to support it and to keep it going. A special thanks again to Rocicorp and Expo for supporting this podcast. See you next time.
