Flash is Dead. Long live Flash.
August 27, 2009
Developing dynamic user experiences in the here and now.
The HTML 5 spec is great. In the future, it will allow interactivity and animation that is only today possible via Adobe Flash, at least for some.
The biggest question with HTML 5 is how long will it take Internet Explorer to support it? 5 years? 10 years? Never? Recent comments by some Microsoft high-ups lend credence to the idea that the answer might indeed be never.
Because Microsoft still owns an enormous, 84%, share of the operating system market and because Internet Explorer still owns at least a 50% share of the browser market, any designer worth her salt will continue to develop for Internet Explorer in the foreseeable future.
So that leaves us with a big question, how do we design and develop web sites that are immersive yet intuitive in the here and now, without using HTML5? The best solution, in our opinion, is a cooperative yet compartmentalized approach: JavaScript and Flash. Seems obvious, right? It is. Let's look at some of the strengths and weaknesses of each technology in terms of the immersive yet intuitive requirement.
Immersive yet Intuitive
Some will argue that the most important thing that a site should do is be immersive and provide rich interactivity all while communicating the content a user seeks. Although we don't completely agree with this idea, we do think that immersive interactivity has its place.
There is an age-old a tug-of-war between form and function that pervades nearly all aspects of design: product, architecture, clothing, and many others. The most recent struggle between these principles occurs in web design: how do we create user interfaces and experiences that are creative and beautiful while still allowing easy usability.
Immersion
With the advent of some great JavaScript frameworks, immersive interactivity is often easily and quickly implemented via JavaScript. For example, motion and alpha tweens can be implemented with few compatibility concerns.
So JavaScript can quickly create some elements of an immersive experience, but what about the more advanced shape tweens, sophisticated 3D interaction, blur filters, font embedding, and others? Unfortunately, there isn't a great, widely available JavaScript framework for any of these more advanced functionalities that doesn't have major compatibility issues with the current browser market composition. What about Flash? Well, Flash can do all of those with no major compatibility issues. So, in regard to advanced functionalities often necessary for immersive experiences, Flash seems to have a clear advantage. However, what about intuitiveness?
Intuitiveness
We believe that one of the most important aspects of a well-designed user interface is that elements users must interact with should behave in ways users expect. The major limitation with Flash is that it is a program running within, well not exactly, another program. The cracks in Flash's usability start to show in regard to shortcut keys and scroll-wheels, among others. Specifically, Flash can capture many of a user's keystrokes so that they never propagate up to the user's browser. This is problematic for many users who rely on keyboard shortcuts to accomplish much of what they do. On the other hand, maybe a user's operating system, or the literal ActionScript, won’t permit Flash to capture a user behavior, e.g. scroll-wheel events. If a user is accustomed to using a scroll-wheel and the developer did not include a scroll-wheel event handler in the Flash application, the user may very well be irritated and could stay on the site or leave. This is not to say that these problems don't exist with JavaScript when trying to build something completely customized, because they do. However, the beauty of JavaScript is that often you don't have to build completely customized.
In contrast to Flash, developing JavaScript enabled applications does not require the developer to add event handlers and create user interface elements for every aspect of user interaction as does Flash; JavaScript can piggyback on the handlers of the browser, e.g. scroll bars, without needing explicit even handlers defined. Because JavaScript can offer faster and easier development, but can achieve the similar styling, it has the clear advantage in regard to building intuitive experiences.
So if Flash is so good at creating immersive experiences and JavaScript is good at creating intuitive experiences, why not just relegate them to their separate corners and those things that they do best. We think that this is the solution for the vast majority of sites that are developed today. Clearly, amazing Flash user experiences can be created completely within Flash; however, those experiences may be cost-prohibitive because of the amount of time to develop them.
Our Approach
The advantage of the cooperative yet compartmentalized approach is that we let each technology do those things for which it is best suited. When you let Flash out of its corner and start allowing it do things for which it isn't a good fit, you start to run into to accessibility issues as well as slower responsiveness and a poorer user experience. The same is true for JavaScript.
Our guideline is that Flash is great for sophisticated animations, video visible by nearly everyone not Just Firefox 3.5 users, and font embedding. On the other hand, JavaScript is king when it comes to navigation and simple tweens.
All in all, some people may think that a degenerate beast would be born when the two often-competing technologies are utilized together; however, they actually produce some pretty elegant, proverbial offspring.