In general, I dislike the cross-platform frameworks. I just find them to always be lacking something. Whether it’s Flutter that uses a “game-engine” and therefore behaves in strange ways on iOS, React Native that has some pretty massive sizes because of the heavy dependencies, or whatever other framework it might be… Nothing beats a completely native app in terms of user experience. Though the developer experience can be trash on native, and better on frameworks, like Flutter which has hot reload while Xcode doesn’t… come on Apple 🙄
Vitor Pamplona's avatar Vitor Pamplona
Desktop Apps should not share the same UI as Web Pages, which should not share the same UI as Mobile Apps. With Kotlin Multiplatform for Web now stable, this is clearer than ever. Your background and some components can be the same between them, but the UI should be vastly different. For instance, Desktop apps are mini window managers by design and tend to use multiple layouts to display lots of information and actions at the same time because monitors are so large and the mouse is so precise. They use a large amount of dialogs and popups, and generally have tabs inside of them for different things loaded at the same time. Memory, CPU, and disk usage are virtually unlimited. Notifications don't really exist, and you need to develop your own update warning system. Users are in the mindset that the app is theirs to own and organize, which leads to long-term thinking. On the web, there are no windows. Dialogs are terrible, and any internal tabs should use the browser's own tabbing system. Routes must be addressable with readable links that the user can see (which is not a thing in the Desktop or mobile). Bottom navigation is in conflict with the browser's own navigation buttons, and everything is just one pull away from a full restart. Somewhat unlimited memory, but CPU, IO, and disk are severely constrained by the browser. Users are in the mindset that they are renting the app while they are there; they are in somebody else's house, which leads to short-term thinking. On mobile, everything is very large. Buttons are big, and space is extremely limited. Some popups work, others don't. Tabs don't exist (even though many phones try to make it happen). Something that is just a click away on the Desktop is 3 clicks down on mobile. Navigation requires links, but the user never sees them. Memory is hard-capped at 512MB per app, background processes generally don't work, and the OS may decide to kill half of your stuff at any moment. Around the globe, phones cannot be trusted and are generally treated as a disposable asset, like your app. Devs that try to optimize for all 3 of them at the same time end up just making the lowest common denominator, and users suffer with massive delays and lack of care.
View quoted note →