The Cross Platform Myth
Recently Bloomberg reported that Apple would enable developers with a cross platform framework by 2021. We got a hint of what this looks like in the latest release of macOS. The Stocks, News, Voice Memos, and Home apps are key examples of these sorts of apps. Just one look at them should tell you all there is to know: these are not Mac apps. They fall into an uncanny valley: not quite a Mac app, no longer an iOS app.
Web developers have been straddling this problem for years now. Remember responsive web design? The dream of one interface designed to work on multiple devices with varying screen sizes. This was rarely as achievable as we hoped. Many websites still don’t provide a fully responsive experience for their users. Those who do make the least common denominator (mobile) their primary target and neuter their desktop design.
It’s difficult to for one interface to gracefully adapt to different devices. People use different devices in different ways. Thus, those devices require thoughtful design to work well for its users. This same issue is bound to plague Apple’s Marzipan project. Without thoughtful consideration for the differences between platforms, you’ll have less-than-ideal software on at least some of them.
So what’s the upside? Some people have had success with these tools. They exist for a reason. They help indie devs get their software on more platforms, more quickly. React Native lets web developers build native iOS and Android apps. Electron enables web developers to build Mac, Windows, and Linux apps. Soon, Apple’s framework will allow developing across iPhone, iPad, and Mac. But can developers serve all those extra users well? How many cross platform apps are better than apps built for a single platform? How many of these UIs are intuitive to iOS and Android users alike? Windows and Mac? Linux? This is a lot for one developer to consider and, truthfully, is mostly a design problem.
Well-designed software accounts for the user’s mental model, which is influenced by their device and operating system. They’ll expect the platform’s aesthetic and interaction patterns to be applied consistently. When they aren’t, they’ll get confused and switch to software that solves their problem in a way that’s intuitive to their platform. To make matters worse, cross platform frameworks tend to sacrifice performance to enable ease of development. Poor performance comes at the expense of users, particularly those who prefer to keep multiple programs running.
Cross platform frameworks attract a particular kind of developer. This developer values efficiency of code above all else. They want to write once and deploy everywhere. They’re a jack of all trades and master of none.
I don’t mean this to be insulting. Generalist developers are assets but they’ll be underutilized if they’re working cross platform. They’re better off working up and down the stack instead of between them, focusing on a single product experience instead of patching inconsistencies across platforms.