I’m a web developer during the daylight hours (and at this time of year, during some of the hours of darkness too). Yet I wonder if I’m not coming towards the end of the part of my career when I can just work on web apps the whole time. Then I read the recent thread about the HIG being “dead”, and thought I’d jot down a few thoughts.
So, web applications: a brief rant. I’m fast losing interest in web applications in general. I had a minor renaissance recently with the Django framework and Python, but it’s still web development. HTML and CSS and fixing rendering issues in IE. Yawn.
But what of Web 2.0? Yes, you can do more and more application-like things on the web, but more often than not you’re doing them the wrong way. People wield the acronym AJAX like it’s some glorious new development paradigm, and not a collection of fairly hackish techniques which tie together heterogeneous technologies.
Sure, we can do <insert fairly primitive web eye-candy effect here> using the wonders of AJAX, but then desktop applications could do that 20 years ago. We shouldn’t have to code and debug in 4 different scripting or markup languages in order to have a button add a row to a table without reloading the entire view. Everything-in-the-browser is most-stuff-done-wrongly.
When did we start hating desktop software so much? Editing my spreadsheets in Firefox must be what insanity feels like. The technology of the web is full of such untidy crapness. I can just about live with the idea of the uber-client, but web browsers aren’t it - at least not when everything happens in HTML. By all means make pretty much everything centralised and client-server, but for gods sakes allow for the fact that you need a richer client experience than web pages.
Which brings me to my point: the experience is the thing. It’s a sore day indeed when I have to concede that stuff like OpenLaszlo (apps in Flash, yuck!) makes more sense than web pages for a lot of purposes. But that’s because it provides a richer experience for the user, and it’s for the same reason that there’s a perception that the sacred HIG has been abandoned recently. What we’re seeing is the emergence of Applications 2.0.
Everyone and their sister, and their sister’s dog, has chimed in on the HIG thread (Gruber, Tsai, Jalkut, Stevenson), and it’s not lost on me that I used to be one of the HIG die-hards. Witness the nostril-flaring indignation of my NSSchizophrenicControls post way back in February 2003! I just don’t feel that way anymore.
As someone noted amidst this recent thread, the single guideline at the moment would seem to be: does this look good? That’s of course a huge oversimplification. The thing to realise is that, whilst we’ve all been distracted by the web and the idea of putting everything online, something has happened in the applications space - on your very desktop. The desktop isn’t going away anytime soon, but I think that perhaps it had a serious case of envy of the web for a while there. No more.
Doing things on the desktop is still usually the right way. We can gain a lot from the abilities that networks give us (centralisation, roaming, sharing and collaboration, redundancy, backup and so on, to name but a few) but those things aren’t the be-all and end-all of software. Apps are about the user experience, and that’s one of the big areas in which the web is truly terrible.
Web apps are backwards in so many ways. You check for the form being submitted before you display it. You recreate the entire page to report errors. You go to extraordinary and flawed lengths to maintain state of any kind. You reinvent basic things constantly. Interoperability must be explicitly and painstakingly developed. Debugging is generally awkward. And so on.
Yet the web, and Web 2.0, has been the focus for quite a while now, and now we supposedly have an abandoning of the HIG on that bastion of quality user experience, the Mac desktop. Are we user-experience afficionados doomed? Not really. I think that the perceived abandoning of the HIG actually reflects the changing software eco-system out there.
We’re all demanding a much richer user experience than we ever have in the past; the baseline has gone way up. The problem is that a “rich” user experience, whilst not quite subjective, doesn’t generalise as easily or as well as we might wish. It’s just not possible to give all the standard controls all the capabilities they now need in order to be truly ultra-usable in all situations.
Hence, there are more and more custom controls, because a rich user experience is specific to each app, and there’s more and more enhancement work to be done in order to meet the user-experience demands of your users. The standard stuff often isn’t even enough anymore. This is just survival of the fittest. You’d better be willing and able to customise and enhance your buttons and controls and windows to provide the experience your users think your app should have, or you run the risk of perceived mediocrity - regardless of your actual functionality.
This is Applications 2.0, and it’s light-years ahead of Web 2.0. Web 2.0 is mostly an exercise in how much of the traditional client software experience we can coax out of the web. This is of course a fundamentally flawed approach, but it’s necessary for now and the foreseeable future, because there’s no time to stop building things and think about how we should be building things on the web.
That’s not true on the desktop, and whilst the ante has definitely been upped for the desktop as well as the web, it’s on the desktop that it’s happening in a more controlled and controllable manner. We at least had the HIG, and we still have it as a foundation. You just can’t expect to compete effectively anymore if the HIG is all you have.
Developers, I think it’s time to stop lamenting some imaginary lost age of innocence where putting the default button at the bottom-right of the dialog was enough to guarantee a place in Heaven. Step up and meet the Applications 2.0 challenge. Your unadorned NSTableViews and aqua pinstripes are no longer welcome here.
This isn’t about going back to the painful days of old where the coolest apps were “skinned”, or had a “real appliances look”, or such hackery-pokery. This is about enhancement; it’s about powering-up the standard stuff and giving the user more than the default instead of just pale imitations for the sake of visual novelty. So what if your metallic pushbutton looks a bit different from mine? I know it’s a pushbutton, and I will know immediately if it violates my expectations or fails to deliver functionality that I intuitively expect to be available.
Apps 2.0 development means that your project is a collection of sub-projects even moreso than before: your enhanced NSTableView for round-ended selection highlighting and badged drags. Your custom NSTabView to reflect the fact that your writing app uses a pencil-and-paper visual style, and you want your documents to really look like documents in a filing folder. Your NSTextView subclass for lined notepaper. Your low-contrast alternate controls for the full-screen, don’t-disturb-me-I’m-writing-here interface mode. Or whatever.
The kid gloves are off on the Mac desktop now. Enhanced controls (a term I prefer to “custom” or “non-standard” or “inconsistent” controls) are everywhere. A glance through my apps folder reveals loads of examples (Awaken, Cha-Ching, Comic Life, Delicious Library, Inbox, Journler, Mindburn, Mugshot, Newsfire, Notebook, Omni*, Rapidweaver, Sandvox… etc). And a whole hell of a lot beginning with “i”.
So, the HIG isn’t dead at all; it’s just been realised as only providing basic competence. The divergence from the HIG, for the right reasons, is where the ever-moving cutting edge of usability lives. That’s exciting and invigorating, and it renews my passion for the Mac desktop as an example of what software can be.
That’s Applications 2.0, and it’s all good.