Jeff Croft on the web

The most important thing I learned about web design and development in 2011 is that more and more, the “web” is APIs and services, rather than sites, apps, and pages rendered in web browsers. Take Instagram: it’s one of the most popular services on the “web” and the entire experience is controlled not by some HTML pages, but rather by an iPhone app.

Apps are the future and web apps are the future

I think we’ll have both with us for a long time.

There’s one simple reason that should suffice: some developers love writing apps and some love writing web apps, and some love writing both.

This means that people will keep making both kinds of apps. One thing we’ve learned about developers is that economics matters, but love matters too, and many developers will make the kind of software they love to make.

Me, I’m the kind who loves writing both. I’m doing some web work at the moment — it’s been about 10 years since I worked on a web app, and I’m totally excited. It’s fun. The technology has changed so much since then and I’m having a blast. (Today I’m doing my first work with Sass and Compass.)

Some questions

How could you make Instagram without a native client? Is it possible to do those image transformations via JavaScript?

Can you link to Instagram-taken pictures?

If I’m running OmniFocus on my iPhone, and it syncs over the web — do I want anybody to link to my OmniFocus to-do items? Or to my WeightBot stats? To my notes that I edit with Elements and keep in a folder on Dropbox? To my direct messages that go over iMessage?

Two layers of web

That’s the web of backend databases and APIs. That web powers both apps and web apps.

The higher level of the web is the web of HTML, CSS, and JavaScript. That’s the web that runs in a browser (and in web-views in apps). That’s the web that will always lag native code in some respects but that has strengths that native code doesn’t have.

In the past, that higher level of the web pushed most of its work to the server side. But today’s advancements (HTML5, CSS3, Bootstrap, Backbone.js, jQuery, and so on) are about pushing that work to the client side — as apps already do — and accessing the server via (usually RESTful JSON) APIs. Those APIs can be used by both web apps and apps.

I like this. A lot. I like the cleanest-possible separation between backend and presentation. I like language-agnostic APIs and APIs that don’t care at all about how the data is presented. That’s just good architecture.

The future is tangled

If I had to choose one or the other — if I had some crazy power but I had to wipe out either native apps or web apps — I’d wipe out native apps. (While somehow excluding browsers, text editors, outliners, web servers, and all those apps we need to make web apps.)

That’s not the case, though. Nothing has to get wiped out.

I think instead that we’ll see a more tangled future. Native apps will use HTML, CSS, and JavaScript more. Web apps will appear more often on smart phones as launchable apps. Native apps will support linking in and out more. Web apps will move more processing to the client — they’ll be written more like native apps. (Is Twitter an app or a web app? It’s already getting tangled.)

There will be times when you won’t know which kind of app you’re looking at or how to categorize it. I think that’s very cool.

There are multiple tracks of evolution, but those tracks are heading to the same city. And there are plenty of hobos like me that love hopping trains — for fun, to satisfy curiosity, to tell stories and hear stories — on the way there.