neighbourhoodie-nnh-logo

Local-First Conf Recap posted Wednesday, June 4, 2025 by The Neighbourhoodie Team newsoffline-firsteventstutorial

The Neighbourhoodie team attended the 2025 edition of the local-first conference and community day in Berlin and we are very happy we did.

We met a ton of nice people, got inspired by new ideas and learned a lot about the local-first community. Alex ran a well-reviewed PouchDB Workshop at the community event & Jan gave a well-received talk at the conference.

Jan Lehnardt stands in front of the Local First podium on stage at the conference. Behind him we two red sofas are projected, representing two CouchDB instances in sync. The conference is well attended: a large and engaged audience are taking notes.

offline-first đŸ€ local-first

First and foremost, we were not sure if this was an event for us. Our work has been focussed on offline-capable applications since our founding in 2014. We even coined the term Offline First, adjectivised as offline-first. Local-first started its life as a manifesto in 2019 and we just were not sure if we would be perceived as out-of-date or wrong-headed in our approach.

It turned out, very quickly, that the 450 people at the conference are (mostly) enthusiastic about the same topics we are, that we share values, and we share technical goals. Even the writers of the manifesto credit us as an inspiration. When we started Offline First, it was sometimes hard to find folks who would share our vision for computer programs that just worked better in the real world. At local-first conf, we found our people.

Workshop Day

The first day was a workshop day with ~200 people strewn across an atrium and various breakout rooms for impromptu sessions formed in an unconference format at the TODO campus in Neukölln. Topics ranged from the UX of local-first to discussing options for identity in distributed systems. We got to meet some old and many new friends by just hanging around and talking about various topics.

UX of local-first

This session absolutely packed the small room we were in, and started off with a survey of personal experiences the attendees had with the collaborative + local-first combo. We quickly reached the conclusion that solving both collaboration and offline capability with any degree of universality, even within a single app, is both extremely difficult to build and to use. This is mainly due to the fact that conflicts accumulate over time and become unmanageable, and that most users don’t have a learned mental model for conflict resolution. Our most potent takeaways of the ensuing discussion were:

  • From a UI perspective, collaboration and offline capability exist on a spectrum, and trade-offs need to be made.
  • If possible, lean on existing mental models your users have when dealing with sync and conflicts. This could mean:
    • Don’t force instant resolution of conflicts as they occur. Users are generally accustomed to things occasionally being in an unexpected state (decades of experiencing “last-write-wins” systems), but they can use help 1. Highlighting these occurrences and 2. Then being provided the other conflicts as options.
    • Re-using known UI elements: instead of providing a new conflict resolution UI, systems that already have a suggestion mode, like Google Docs for example, can re-use that. In the end, a conflicting edit is very much like an edit suggestion by another user, and can be resolved in the same way.
  • In some extreme cases, a button with “Start a video call with your colleagues to sort out this mess” might be the most appropriate option.
  • In some work environments, collaborative modes are effectively surveillance tools to see who is actually working. This angle was quite unexpected for us, but it does make a lot of sense: higher-ups might misunderstand collaborative tools as opportunities for over-the-shoulder hovering and scanning for signs of busyness, employees might fear exactly that sort of behaviour and fret over every minute they spend thinking instead of doing.

The notes taken by the session leader are available online.

Partial Data Fetching on Initial Load

This session was less of a discussion of the abstract problem and more of a “here’s how we do this” overview of techniques from a bunch of different people, which was very illuminating. Most notable to our minds was that some attendees seemed to be on the quest to find a generalistic approach that would work on the level of the sync library, where our experience has been that deciding on what to load onto the client when is very much custom, and determined by the individual use-cases: what problem does the app solve, what expectations to users of various roles have in various contexts, what can the connection and the client device actually handle?

For example, we’d generally opt for directly loading whatever data is necessary to render the user’s current view, and then, once they have something to look at, sync whatever else we want in the background. This would generally be what is most relevant to the user depending on a variety of factors: usually freshness of data, but also where they are in the app, or what their role is. From there, we’d sync data of decreasing importance.

Our Workshop

Our workshop came last. Alex showed off how easy it is to get going with PouchDB by writing a sync demo entirely in the browser console of pouchdb.com. He ran into some technical difficulties, but handled them gracefully and captivated the audience who later joined in with a lively discussion. A video that covers the workshop content is available on our YouTube channel: Getting started with PouchDB: basics, replication, offline data, conflicts and queries.

Alex Feyerke presents a PouchDB workshop via a monitor, a live stream of his screen is also available. Photo by Susanne ElsÀsser.

Our PouchDB workshop took place in a large open lecture room with industrial styling. In this image we’re peeking through the large glass windows into the workshop from the communal area, and see people gathered with laptops, following Alex’ demo. Photo by Susanne ElsĂ€sser.

The Conference

The conference proper was at the pleasant nHow hotel right by the river Spree in Berlin which acted as a nice and relaxing backdrop to a busy two days. Day one was peppered with implementation deep-dives into various pieces of local-first technology. For us, it was great to see alternative approaches to the work we’ve been doing for a long time. We also were happy to see that we have already solved a great number of problems that this new generation of solutions is yet to encounter 😎.

Most interesting was the panel discussion about who is or is not part of the local-first community. Is it only strict adherents to the manifesto or is anyone who uses local-first technology welcome? We were very happy to see the consensus settle on a large tent definition that welcomes more people.

Day two was focussed more on the why than the how of local-first and Jan was lucky to kick-off the day with a brief overview of our three most impactful projects:

  1. Ebola Epidemic Contact Tracing & Clinical Vaccine Trial
    • the case study is due to release in a few weeks
  2. COVID Vaccine Logistics for Bavaria
  3. Humanitarian Convoy Planning App

We were very happy to see that the talk was very well received. A full recording will be published along with all talks from this conference edition in the coming days.

In this close up of Jan on stage, we can see him engaging directly with the audience, gesturing to convey meaning and wearing a CouchDB and PouchDB t-shirt. Photo by Susanne ElsÀsser.

Jan Lehnardt was the first speak of day 2, and we see him presenting alongside a large projection with the CouchDB and PouchDB logos

Directly after, Seph introduced a mind-boggling concept for a local-first desktop operating system that we’ll definitely have a closer look at in the future. And right after that Eileen shared her research into local-first user-experience design. Some of the problems we were facing in 2014 are still under active discussion, but it was fantastic to see that the computing landscape has since moved considerably and that there are new methodologies and best-practices that folks building real apps can rely on that were just not available back then.

All in all this was a very inspiring couple of days and we’re looking forward to being part of this new-to-us community. Thanks all for welcoming us so wholeheartedly.

« Back to the blog post overview
og-image-preview