A Retrospective. Part 1
I’ve had a lot of things to say about the way both “the web” and native platforms are built. The web, as its name suggests, is an unstructured, fast-moving, often-breaking wild west. Native is a hyper-specialized, peformant, but often an archaic relic. Native is still super compelling for mobile right now, since the flashy UI and smooth user interaction is harder to build in a manner that matches native performance and smoothness. However you want to argue, you and I both know when we’re using a web app on mobile vs. a native app.
At the same time, there is a massive shift towards building anything and everything using web technology. React Native, Electron (formerly Atom Shell), among others, are all allowing people to use a common HTML/CSS/JavaScript stack to build “native” apps, that is, apps that run in a web container that feels and interacts with an OS more like we’re used to with native apps.
My main complaint against the web is that it is so fragmented and disoriented in its goals. In a way, the web is having an identity crisis. Partly this is due to an evolving landscape in the world of web “applications”. The web, and therefore browsers, are being expected to deliver more functionality than ever before and this doesn’t help provide a stable, reliable platform for applications to operate from. Major corperations are now pushing agendas to make the web more friendly towards their goals. And with all this fluctuation, user experience suffers. Application performance and reliablity suffers. Mobile usefulness suffers. So we write more libraries, create more standards, etc. This cartoon illustrates this problem.
But here’s the kicker. If it were me, I’d still rather write an app using an HTML/CSS/JS stack. Why?
Because it’s so easy to do it.
While it may be a mess of fragile hacks, browser compatability quirks, feature detection, screen resolution “responsitivity”, and the list goes on, it’s still takes me far less time to get something that I can see and tweak on the fly than it does with any current native solutions. The problem with building software for the web is one of its greatest strengths. Native platform vendors take note.
While this is entirely opinion, here are a few things I think native vendors should learn from the web:
- Your build/deploy cycle needs to be simple, or at least abstracted enough to make first-time developers comfortable getting from nothing to running app. For the web, this is creating an
.html
file and opening it in a browser. done. Publish that file to a static file server and again, you’ve launched your product to the world.
2.
Notice, I’m not saying anything about cross-platform compatibility. I realize this is a huge draw to things like Electron, but if you’re truly duing native, your app generally has to adopt the look, feel and mannerisms of the ecosystem it is running on, and I think per-platform development is a worthwhile effort. And if the nothing-to-something pipeline were smoothed out for differing platforms, your startup and development costs would be cut down immensely.