on platforms

By mikehearn

I’ve worked for Google for about 4 months now, perhaps a bit less. In that time, my thinking on the future of computing has changed (because I’m sad I think about this a lot).

This thinking is the result of a vague feeling that the existing client platforms have all run out of steam. Windows Vista, OS X and the latest Linux distros are all, give or take a few details, pretty much the same. Most of the new features are not inspiring. Apple are doing some good work in UI design, but it’s mostly just polishing the edges and in some cases, they are just coming up with fancy workarounds for deeper problems (expose, time machine, etc).

Progress seems slow. The Big Problems that we’ve known about for years don’t get solved. There are 3 big problems that interest me:

  • Usability
  • Security
  • Environmental impact

I’ll only talk about usability today.

Usability

Luis Villa articulated one side to this long before I really understood it, which just goes to show that he’s smarter than me and in about 5 years I’ll probably wish I’d gone to law school. Some things are easy to do with web apps, and hard or impossible to do with client side apps. Of course the opposite is also true, but in general, when an app can be implemented as a web app, it usually is. This says to me that most people prefer it if they can get it.

Luis says:

Three big things:

  • Web development/deployment is easy, and desktop is not.
  • Web development makes certain things easy; primarily location independence and collaboration.
  • Desktop development has advantages web devel does not (rich inter-app integration, localized search, etc.) but taking advantage of them is a PITA.

Luis is thinking from a developers perspective so it’s fair enough that he doesn’t mention the user experience in all this. But what I’ve realised in the last 4 months is that a well written web app gives a significantly better user experience than the equivalent client app. This is the opposite of conventional wisdom, which is that web apps are “less rich” and therefore somehow worse.

The way web apps beat client side apps works like this:

  1. Firstly, people love speed. I knew this in a vague sort of way before, but now I can quantify it. Every millisecond you can shave off an operation will increase your userbase. Most good clientside developers know this, but web apps let you actually watch traffic come and go as latency changes. The correlation is remarkable and it really focusses the mind on making things happen NOW.
  2. Secondly, less is more. Web apps make it hard to pull off stuff we take for granted in the desktop world – customisable toolbars, tree views, file dialogs, tab widgets etc. This is a good thing.

    The “richness” that we (programmers) love, is despised by many people. They’ll never tell you that if you ask, because they won’t know how to express it, or even what’s wrong. Instead the people who do understand it and have learned all its quirks and odd little features will tell you how important it is. This is really misleading. Don’t be fooled.

    A classic example of this is tree view controls. Programmers love trees. We think about them all the time, we see them everywhere we go. To us a tree is the most natural thing in the world. Because we love trees so much, it’s an obvious step to represent them in the user interface in some way. Like, say, by using a tree view widget. Some people love tree widgets so much they spent weeks recreating them in DHTML and JavaScript. Big mistake! Usability studies and real world experience indicates time and time again that lots of people have difficulty with trees. Some people will just avoid using them completely. Most will maybe use the top level of the tree, but won’t go in for nesting (ie they’ll have Documents/Foo and Documents/Bar but not Documents/Foo/Bar).

    Because trees are such a PITA to recreate using HTML, most people don’t bother with them in their web apps. They find some other way of doing it. GMail uses labels, Flickr uses tag clouds, the web itself uses search. Most web apps just somehow avoid it entirely. All those users who never really cared much for tree views but couldn’t really identify why are suddenly happier. They can’t explain it but somehow they know this new thing is better than the old thing.

    This follows for quite a few other kinds of client side UI construct that are now avoided because they are known to be bad. MDI, multi-level tab widgets, and incredibly complicated pref panes for instance. Once upon a time, MDI and multi-level tabs was the height of cool. Everybody wanted them. Nowadays they are avoided like the plague. How many other widgets that we take for granted will follow this fate? The humble toolbar, perhaps, which is cursed with ugly and small buttons identified only by an obscure picture? Is the “less is more” web solution of hyperlinks and image buttons sized in proportion to their importance going to replace them? I hope so.

  3. Luis touches on deployment but doesn’t discuss it further. Havoc Pennington also talks about it in the context of well behaved desktop apps. One of the good yet annoying things about the Mac is that many apps now ship with Sparkle and auto-update themselves. It’s a slick little library and works well, but unfortunately it shows release notes before doing the update and generally requires user interaction/thought. Once all your apps use this, you quickly realise that (a) every app has bazillions of small releases and (b) every developer lists every change in excruciating detail.

    Web apps don’t install. They don’t update. They just appear when you need them and magically get better over time. In a world where people don’t even want to wait 2 seconds for something to appear, this is a HUGE deal! Software installation and update is, even in the best cases, slow fragile and annoying. Better to dispense with it entirely (as ZeroInstall tries to do).

  4. Often, web apps have more information, so can do a better job. For instance GMails spam filtering can take advantage of knowing who is in your address book, whether a message is part of an existing thread you took part in, and so on (disclaimer: i am not saying it actually does this, just that it could do theoretically). The traditional server/client split prevents this setup, reducing the quality of the spam filtering for everyone.
  5. Final point. There is no cult of consistency in web app development. You are free to create something as ugly or beautiful as you are able. Users really respond to looks, all companies know the importance of appearance and brand but traditional client side development makes it hard to achieve this. Apple, Microsoft and many other companies therefore waste millions of dollars whilst each app creates their own widget toolkit to get a distinctive look. The web recognises the importance of style from the get-go.

There are many things web apps cannot do, but perhaps to bring about the fundamental improvements I talked about in a previous entry the right solution is to extend the web (as opposed to Luis’ approach of making a client side platform that has the same advantages as the web).

5 Responses to “on platforms”

  1. Luis Says:

    Not to dump on you too bad, Mike, but most of these examples are terrible :) I think in most of them you’re confusing ‘most desktop apps and web apps are this way right now, because of various historical reasons’ with ‘all desktop apps and all web apps are always going to be this way, for technical reasons’.

    1) people love speed: you can certainly write slow desktop apps, but you can also write slow web apps, and web apps will always have round-trip communications latency. So if anything, web apps are always starting at a disadvantage here. You can minimize that disadvantage by using a google/akamai-like server network, and having very fat pipes. (I’ll of course grant that many desktop apps are slow right now, but that is perfectly fixable if people want to do that.)

    2) less is more: your examples of this are, again, often properties of the toolkit. One could easily write a client toolkit that makes trees hard to do, or even impossible; and MS and others are busily trying to make them easy for web developers. Similarly, for every nice clean google mail, there is also an apple mail on the client, and ten yahoo mails on the server. So yes, less is more, but web apps aren’t inherently ‘less’ than desktop apps, and they are getting less ‘less’ all the time.

    3) deployment: here, you’re pretty dead on, in that updates are never going to be as trivial on the client as they are on the server, no matter how hard we try. That said, the examples you give aren’t good- you’re not focusing on the unfixable problems (downloads, fragility); instead you’re focusing on the fixable problem (how much information people give when the update happens.) I might add that I recently discovered that google mail had updated and added a new feature by reading someone’s blog- since google just silently added the feature without notifying me of the upgrade, were I a normal user I never would have found out about it! So clearly the web model isn’t perfect yet either (though again, this is an application design problem and not an inherent issue with the platform.)

    4) None of the examples you give here are good ones- each of them is also information available to Evolution. What gmail can get at easily is *other people’s* address books, other people’s spam scores, etc. Again, I think this is fixable in client apps, but you’re right that this is likely to always be easier to do on the server (and will likely never be doable *purely* on the client- it’ll always require some server-side work.)

    5) I just disagree completely here. I might agree that Google’s web UIs look better than most desktop toolkits, but the wild inconsistency between, say, Google and Flickr doesn’t help the user in either. Sure, it makes things prettier, but it doesn’t help me actually achieve things.

  2. Luis Says:

    All that said, of course, these fixes (on both sides) are hypothetical- there are lots of very good web apps, and I agree that our current client toolkits are completely suboptimal. I just don’t think that categorical saying web apps are better for users’, at least on these grounds, is a fair statement.

    You might have mentioned backup and inter-user sharing as inherent user-experience plusses for web apps- those are huge for google docs, for example. That was my user-side focus in the original posts from this summer.

  3. Mike Says:

    Heya,

    I think for speed of apps I was thinking more of access speed than actual “click the button” type latency, but you are right that there are many slow web apps (and arguably, it takes more effort to make fast web apps than a fast desktop app).

    I suspect there are more people who understand how to write fast web apps than fast desktop apps though. Making a desktop app fast is often pretty tough, because you don’t have any control over the environment. So you might optimise for machines with slow CPUs and lots of memory, when in fact your users have fast CPUs and not much memory. Or worse, it’s half and half. Making a program start as fast as Office does requires advanced tools and a great understanding of hardware design, whereas server-side stuff is to a large extent scale-out and database optimisation – all of which are pretty well understood these days.

    You’re right that’ I’m guilty of over-generalising :)

    I think my post came off wrong …. it’s more a set of observations about what works today rather than what is technically possible. So yes you can make UIs without trees today using GTK+, but the nature of the medium makes it natural to do so, and so many people do. Yes you can make apps that start in a fraction of a second on the desktop in theory, but in practice it turns out to be hard to do due to layers of abstraction.

    Final thing, with (5) I still have to side with the web on this one. Consistency might or might not help people get things done, it certainly doesn’t seem to hurt Apple, Microsoft, the web so I’m not sold on that idea, but from an aesthetic perspective I – as a user – benefit from the fact that both GMail and Flickr have an attractive and unique design. It just makes the world a more interesting and beautiful place to be. As a company I also benefit by building and re-enforcing a brand. So I think overall, lack of visual consistency wins (note that metaphorical or mechanical inconsistency would kinda suck …. but most websites do have links that behave as links)

  4. Mike Says:

    Oh – forgot a couple of things. Spam filtering, yes, Evolution can do this as long as you can make a spam classification algorithm that is fast enough to run entirely client side in real time, which precludes a lot of useful techniques.

    Deployment, GMail usually has a “What’s New?” link in the top right hand corner, maybe it’s not being updated/precisely as often as it should be ….

  5. Max Howell Says:

    I’ve been thinking this sort of thing over the years.

    Web apps can be developed faster, and the important things like collaboration, are easy.

    They also encourage you to write apps that have lots of information, and are well laid out. A website has many document views, not one document view and a million menu items and buttons. “Dialogs” in web apps (ie forms) have lengthy descriptive texts next to every input field, dialogs in rich apps are often totally incomprehensible.

    Webapps are often faster than a desktop equivalent. Sure there is 200 ms ping, but on the other end is a server farm and database cluster.

    I think I’ll start steering myself away from c++ a little.

Leave a Reply

You must be logged in to post a comment.