I’ve just seen the MIX11 keynote, and followed my first session at MIX (HTML5 for Silverlight Devs :-)). Everyone who’s here or who’s following online will already have noticed there’s a heavy focus on HTML5 this year – you can feel it in the Day 1 keynote (in tomorrow’s keynote, we’ll get some Silverlight 5 / Windows Phone 7 stuff), you can grasp it from the amount of sessions about HTML5. We’re getting demo’s showing off some CSS features, graphic features, video features, animations, …
Hold on. Let me rephrase that: we’re getting demo’s of how these features work great in IE9 & IE10 (get the preview now), and don’t run all that great in, say, Chrome.
The problem? I build business apps, and for these apps, I’m not buying it. It’s too early. It’s immature. There’s not enough browser support.
Interestingly enough, Dean started his keynote by stating that what people want are native apps on their devices. I tend to agree with him on this one – but that means that, for your mobile devices, you will want to write a native app in whatever tech it is that’s supported on that device – you’ll have to write iPhone apps, WP7 apps, Android apps , … in their native development languages. I agree, but that makes me wonder: why all that talk about "write your app in HTML (5) so it works on each device," when in essence it will offer you a sub-par experience, a fallback experience really?
If you want to offer the best experience to your consumers, you will have to write a native app for each device. But this post isn’t about that – I’ll write another one with my thoughts on building apps for multiple devices & multiple form factors in the near future.
I’ve seen some pretty cool stuff today. Jumplists from Facebook (needs IE9 & Windows 7). A FourSquare playground built in HTML5 (needs IE9 & Windows 7). CSS gradients. Auto resizing grids (runs great in… IE10). Are you catching my drift here?
We’ve got Canvas. We’ve got SVG. We’ve got native sound. We’ve got the video tag. But it won’t work across browsers. It won’t work in older browsers. It won’t work natively at all for most of the people & devices out there.
As said, I’ve seen pretty cool stuff, but I’ve mainly seen UI features – UI features that are already available in plugin-based technologies. What’s more: I’ve seen that native cross-browser support for these features is nothing more but a distant dream; and even if the features are supported, they seem to run fast in a certain browser, but run like crap in any other one.
Do you really want this for your apps?
Now, of course you can write your sites to gradually decrease as far as UI capabilities are concerned, or you can use something like Modernizr to "fake" HTML5 features using JavaScript / ECMA Script 5 (input elements are a nice example of why you’d want to use this), or at least to check if a certain feature is supported by the users’ browser.
But again, I’m not building sites, I’m building business apps.
So let’s step away from the great, pretty, flashy, gradient-y HTML5 features. The real power of HTML5 are, in my opinion, its state/dev-related features; and these are either available or not: you can’t use something like Modernizr to magically enable them on older browsers. ‘m talking Local Storage, Session Storage, File API, WebSQL API, WebSockets, Offline Apps, … the stuff we’ve got in plugin-based approaches but are missing from HTML. This is the stuff that makes HTML5 great.
Problem is: I can’t use these features. Not all of them are implemented at the moment, not even in the latest preview builds of most browsers. There’s not enough browser support for this, my users probably won’t have the correct version of the correct browsers, and there’s no way to gradually adapt my app for older browsers when using these features: they either fully support them natively, or they don’t.
So what are we left with, from a business app point of view? Flashy semi-supported, semi-fast or slow (depending on your browser) features, poor cross-browser support & not enough market penetration to start using the interesting features. And I’m not even talking about tooling support for these features. I need support for these features across browsers, and I need a substantial amount of users having a modern browser which supports them.
Are you really going to build a business application today, using HTML5? I won’t.
Don’t get me wrong: I like where the new HTML spec is going. You’ll probably see me blogging about the latest cool HTML5-based business application we’re building at my job… in about three years or so. But not now.
So, what should you use to build your business apps today? In my opinion: use a plugin-based approach (Silverlight, for example) if you need it to run on the web (or on the desktop, cross-platform even).
What if that’s not an option? Use ASP .NET MVC + jQuery if you need your app to be HTML-based, pairing it with something like Modernizr to enable you to use some of the UI-related HTML5 features.
Need it to run on mobile devices or devices with another form factor? Build them natively in the technology the device supports (but as said, more on that in another post).
But don’t get caught up in the HTML5 hype. There’s cool stuff underway. It will get there, but it’s not there yet. Not now. Not today. Not in the near future.