Alex Russell wrote another great piece on the decay of the web at the expensive of over-use of JavaScript frameworks and it's definitely worth a read. A core concept of this piece (and his other writing) is about native apps vs web apps, but I don't think anyone actually cares—or understand—the difference.
At a past job, one of the team members would frequently want us to make "an app". I was the entire engineering team. We had very little funding. There was just no way to build and maintain an iOS app in the iOS App Store with the time and budget that we had. There was also, in my mind anyway, no reason to do this. But he was insistent.
I started asking more probing questions about what he meant. He had even done user research that he interpreted meant that existing and potential customers preferred "an app". But what did that mean to him, or to the survey participants?
Here is what I believe most people think of as an app, and anyone that "wants an app" in a general sense, actually wants the following:
And here's the thing: A website in a mobile web browser is pretty close and a progressive web app (PWA) is even closer. But not close enough.
I created a browser-based game/art project called Starlight Dawn. It can be "installed" as a home screen app and "played" like an app on your phone. To make that work, I learned a lot of about PWAs, which you can read about on my blog if you like.
The installation process sucks and this is the core reason you cannot make "an app" by just building a website. Sure, there are other papercuts, but this is the core reason. To explain how to install a web app to a regular person is just a non-starter. On both iOS and Android you just have to know how to do it. Or, your "website that is almost an app" has to explain it to them.
A lot of Alex' writing is based on the notion that web apps are slow because developers don't prioritize performance. I'm not sure why native app developers would prioritize performance, but clearly there is some practical logic here. The primitives that Apple and Google provide developers are clearly enough to make a decently fast app that feels better and faster than a web app.
But this isn't an inherent flaw in the web…just that the teams making tools for web app development haven't focused on performance the way Apple or Google's engineers have. And a web site is expected to have a novel look and feel, whereas a native app should have some platform fidelity. That means the platform owner can provide UI components and libraries that everyone can use. A web browser has no such thing.
Web apps can be great. The tools are there. The are just really low level and have been for a long time. I hope they can be made easier to use and I hope at least some community can galvanize around a higher level set of tools to build UIs that mirrors the stuff we see on mobile phone platforms: decent looking UI controls and libraries that are fast.
It would also be nice to see a standard set of custom elements that handle the logic of common tasks. Even stuff as simple as a
select
element auto-submitting the form it's in:
<auto-submit>
<select>
<option>...option>
select>
<auto-submit>
It's not hard, but how many times has this code been written?
class Autosubmit extends HTMLElement {
#submitForm = (event) => {
const form = this.closest("form")
if (event.target.form != form) {
return
}
form.requestSubmit()
}
connectedCallback() {
const form = this.closest("form")
Array.from(
this.querySelectorAll("input, textarea, select")
).
filter( (element) => element.form == form ).
forEach( (input) => {
input.addEventListener(
"change",
this.#submitForm
)
})
}
}
customElements.define("auto-submit",Autosubmit)
I'm not sure what it will take, but Alex makes a great point that the Web might not be around forever.
We made the best mobile experience we could, made sure people didn't have to log in, made sure any links from emails sent them to the right place without logging in, and that ended up being fine.
Unless otherwise noted, my emails were written entirely by me without any assistance from a generative AI.