Been working on offline apps (Android) for the past couple of years. Syncing is hard. Some takes:
- There was never a budget for CRDT's
- Conflicts were never our primary focus, instead our focus were business problems
- Event-sourced arch + offline first app was quite a fun. Basically I've recorded all the events in sequence in SQLite, queued them up when there was a connection and had network retry policy in place + reverting an event locally if retry failed n-th amount of times.
I've mocked a lot in my past. Last 2 years I've been using fakes explicitly, although it has an overhead, I like it as there is less maintenance and refactoring with tests.
Event-driven architecture should be implemented across complete system (client-be) or be used in a single feature, i.e. it needs to be all or bare minimum, else it's just an absolute mess.
As an indie AND dev, with close to 100k downloads on the app, I dread of making any changes to my app. It's like looking for trouble really. Last couple of times I made smallest change, there was always something else I needed to address.
As a professional AND dev, this sounds like there might be less devs, which means more work for me.
I've noticed my TikTok feed is full of "Bosnian Serbs want emancipation, war is looming on Western Balkan" type of videos lately. My guess is Russia and China want another war far from Ukraine so western nations focus less on Ukraine.
Always wanted to contribute to open source and expand my knowledge about programming and connect with people, however, I've always had way to much paid work that I was never able to contribute to OS; been working full-time and part-time projects in parallel for last couple of years, majority of my carrier to be more precise.
Most challenging part for me is to read between the lines what the clients wants and to offer them appropriate solution. Refining the idea and finding appropriate solution. Creating it is the easier part.
Chose Svelte for a client project 5 months ago, client loves the speed, I love developing with it. In general it's quite a nice tool, fast development, feels easy to learn. I do dislike server-less functions, which comes in pair with Svelte ability to do SSR, which doesn't have to do anything with Svelte tho.
This is true, if it's basic app I'd certainly recommend web technology. But it's also true that clients many times don't know what they want and where they're heading. So, before we decide on tech, I do analyze with my clients what are their plans for the future with the app. It does pan out many of them would like to have notifications, storage, camera, offline..
Native stack is tailored for native devices, using web for that is just not as reliable/maintainable/cost efficient in my opinion. Sure, you can have less devs to support both platforms, but as soon as you need some hardware functionalities, you're not gonna have much of an options, besides what web tech libs you have in the store.