I have this love/hate thing going with Flex off late (if you know me personally, this would be no surprise to you). While I do love the Flex IDE with code completion and language intelligence, the Flex apps that I see on the web are a far cry from the kind of experiences that got me into Flash. So when I heard Keith Peters, aka Bit-101, gave a talk on “Bringing the Flash back into Flash” at Flash Forward ’08, I pinged him over Twitter asking him if he could share what he presented (as I am sure others did as well). So he did and it was a good read, I strongly recommend reading it here.
Having worked a lot with both technologies, I kind of feel let down by both of them just about as much. Unlike Keith, the experience I would like to see isn’t the ostentatious experiences that made 2advanced and such studios famous. While they definitely caught the eye, the crazy zap zoom effects wear thin on the second or third visit. The experience I would like to see Flash/Flex enable is closer to the experiences that Apple seems to enable (disclaimer: I am no Apple fanboy, and find a lot of things they do completely wrong). They are simpler effects but dont make you stop doing what you are doing and wait till the animation ends. I love my IPhone and just compare the experience there to any other Flash experience on a RIA. Both Flash and Flex fail pretty bad on that front. Here is why:
- Poor user experience by default
- Really hard to extend core components
- Tightly coupled framework
- Transitions/Effects an afterthought
- File Size
I dont get it how the core Flex 3 experience is acceptable by Flex developers. Non scrolling lists ? C’mon ! No control over itemRenderers in List controls (can you grow one’s width and height without having it clipped off by its neighbour ? ). Hacks to get any kind of custom Tooltips ? These are few in a long list of gripes I have with the framework
Its really amazing how hard it is to extend any Flex component, so much so that entire frameworks have been built just to do that (read about OpenFlux here). Flex 4 promises to ease this but thats still a year away.
It really kills me how tightly coupled the Flex framework is. There is no way to use, for example, just the collections framework without pulling in the UI framework. Why cant dataBinding be used in pure AS3 projects ?
Out of the box, Flex has no effects or transitions built in. So you have to explicitly create transitions but I wish out of the box some effects were enabled.
The huge swf size of a Flex app makes it unusable for any kind of widgets or smaller dimension swfs, and Flex 4 will not change this (their roadmap states that Flex 4 files will be around the same file size as Flex 3). The size of the swf goes beyond the load time. Heavy core objects mean they are more taxing on your CPU, which explains why complex animations with more than a few UIComponent objects stutter.
- Really poor code editor
- Version control nightmare
- Write everything from scratch
The quality of the code editor is really poor in Flash, enough for me to never use it.
Any code within the timeline is a nightmare for version control so you have no idea when your project is a few months old what the changes were. Same thing with any changes to a graphical element.
I am not a fan of the Flash components architecture, which offers less capabilities than the Flex component set. So I end up writing components from scratch.
So what I am really looking for is a framework I can use in Flex Builder that is lighter than Flex and is more expressive by default. I have been working on a project that may enable those features that I am hoping to release soon, so do stay tuned.
9 thoughts on “Re: Bit-101 on putting the Flash back in Flash”
Nice write-up. I totally share your feelings for up- & downsided of Flash & Flex. The Gumbo architecture is a step in the right direction, although I am keeping my expectations on the low side due to the tight coupling with Halo architecture that was done because of backwards compatability.
Looking forward to seeing your attempts to address some of these issues.
I agree with you on both counts, however I recommend a different solution: Download FlashDevelop for FREE (or you’ll have to buy FDT if you’re on a mac), use it in combination with the Flash IDE, and never, ever use timeline code. As for coding UI elements from scratch, isn’t that half the fun?
I think coding UI elements is fun but for one thing its a time sink if you are just implementing a core functionality again. For another, that means every developer’s basic controls are just slightly different. Consider a scrollbar: some developers may implement a clickable track but some other may not have, which means I have to relearn different interface elements again and again.
Filesize should be taken care of by the new framework caching mechanism. Basically it means the flash player only ever downloads the flex framework once, and then shares it between all other flex-based swfs (so the framework is not compiled into the swf)
I have seen some Flex Apps that certainly come close to the quality of Apple UI design, which is not a fair comparison considering you are dealing with an API that is much more vast than the Flash Platform.
I agree with your comment about Flash being “build everything from scratch” (not sure why you don’t like the AS3 components … work well for me). Flash was just not made for building applications. I have built many applications in Flash and I find building applications in Flex to be a dream come true in comparison. Sometimes I just don’t want to work around the difficulties of extending components, so I make them in Flash and bring them into Flex.
Databinding comes with a price: the Flex framework … file size. And there is a performance price so you may be better off without it in a pure AS3 project.
I struggle with this issue too sometimes. I never use the Flash ID for code, I use Flex Builder AS 3 projects. Sometimes I do use the Flash CS3 components (pull them into flex builder via SWC) I’ve also been considering using yahoo’s “Astra” flash components which build on top of the CS3 components. Can’t wait to hear more about your upcoming project.
Adobe definitely neglected Flash components and the Flash component architecture for Flex. Whats even more puzzling is that there are packages (like services) that would function independent of the framework that are not made available in Flash. You could probably blame Adobe sales and Marketing for that one.
Quick note on Flash and revisioning. So long as your keeping your packages/classes on the filesystem and defining a classpath you should be set. There isn’t really a case where time line code is ever good practice (outside the quick and dirty) when you can extract frame numbers and labels. And if for whatever reason you need timeline code you can use #include to separate it from the .fla.