Our team is about to start a SAAS web application geared toward small businesses. This is a completely new experience for us; we are a system/linux/php development organization and no experience whatsoever developing client side software except for simple html/php based CRUD support applications.
We are evaluating both Adobe Flex and JQuery. We can't seem to choose between the two. Our priorities are:
- Productivity - We have to launch the soonest possible time.
- Overall User Experience - Resulting apps have to look professional and user must have pleasant experience using our product. I think this not a problem with both platform, though we will probably automatically lose 10% of potential users who don't have flash installed.
- Skill Reuse - We will all have to learn new language(s) and RIA platform on this project and hope we can use it again on more projects. BTW, we are a software contracting organization and this is our first foray to consumer apps. We are hoping though that we can leverage the skills we gain here for our clients.
Application Characteristics:
- Data-centric - Lots and lots of CRUD operations.
- 3-tier - Business logic will reside on PHP server and data will be on the MySQL. The RIA will only present the data to the user.
- User accessible data will be large - This is why we decided to use RIA. We can't refresh the page when user just made few alterations/additions.
- Security is paramount - I don't see any security implication on choosing one platform over the other but perhaps the community has some ideas?
We are carefully studying this. We frequently hold competition among developers who can implement a test app faster by using a flex or jquery. We would love to hear what the community have to say though.
Thanks in advance!
UI : U need rapid turn around, and html somehow make it possible. meaning with html tech u can easily change your ui. however having the whole ui running on flex, slight changes require an sdk/flex compilation. we have some similar project like yours, but we combined both world, some widgets are using flex, the ui still in html, and jquery to do the magic stuff.
on the back end side this slides can give u some ideas:
I have used both. I don't have a strong recommendation, but have some considerations.
- Mobile support. Flex requires Flash runtime, which is not present in many mobile platforms. For best results, you will in any case need a separate mobile interface, not just reuse the desktop interface, although the latter works up to some level.
- Browser support. You will spend more time with jQuery on this. They abstract away many things, but once you get to the layout specifics of your app, you will still need to do a lot of work testing across browsers and platforms that is not needed with Flex.
- UI layout and architecture. How complex is the app? How modular? Flex has very good patterns for componentizing your app, producing reusable components etc, jQuery as such does not help you with that, it is more barebones. With Javascript/jQuery you will need to do your own research to find the best architecture setup.
- Development tools. If you like designing your app with a GUI, Flex has a very nice integrated design/coding IDE. You're on your own with Javascript. There are tools, but you will need to do your own selection.
- Vendor lockin and cost. Flex costs money (well, the IDE anyway, you can get a free compiler but I haven't tried how usable it is.) Javascript/jQuery is "free" but need to spend time researching all of the above.
User-experience-wise, both are equivalent, you can produce both good and bad experiences with them. Both have decent out-of-box UI widget sets, jQuery with ThemeRoller is somewhat more easily customizable, but Flex also bends itself nicely to skinning with a system very similar to W3C CSS.
I'd use Flex. Compliment with jQuery as you see fit, but Flex is a fully-fledged framework and environment, and it generally prevents IE6 (You mentioned small business) from biting you in the ass later. Also, since you're working with small/medium businesses, they will be more WOWed with Flex UIs over jQuery/ExtJS/whatever UIs. I've found the former to be more responsive and prettier out of the box, which would lower setup and turnaround time.
TimeFrame: Jquery easier to start but without good foundation skill and design pattern, it can easily go messy when the app grows.
IDE: Flex wins over Jquery, with jquery i see browser and firebug as the IDE
SkilL reuse: personally i would say javascript (adobe air is a prove)
Flash player is still quite cpu intensive on the client side when it has to render a lot of text and vector content, that's one of the main reason I will go for javascript solution.
I will recommand use flash/flex selectively (video/drawing/charting if needed) and with jquery+html as the main framework of the application.
Take a look on ExtJS which is more completed than jquery for the purpose of web app dev. Although it's less easy than jquery to get a kick start.
With jQuery (or YUI/ExtJS/...) you will be able to produce sweet looking applications, with effects similar/comparable to Flex.
However, IMHO, with jQuery-UI I've found it flickers when components change state. This is not just a cross-browser issue; it happens on FF sometimes and doesn't other time. (likely to get some memory issues), and your choice is 1. wait for the community to release the fix and/or 2. do it yourself
Flex components on the other hand are tested for this and have better support (though Adobe can be arrogant to deal with).
HTML/JS/CSS apps do not always give a pleasurable and consistent effect (depending on how many tabs your running, how much avail. mem. for your browser session).
With JS,HTML,CSS your development will be easier, while Flex you need good people with architectural sense (read as expensive); otherwise you can mess up your application really bad.
JS, CSS and HTML (even 5) will always have cross-browser issues that may never get abstracted away fully.
With Flex, if your backend is Java or CF, you can get remote objects (AMF binary) which makes data transfer typed, native and faster. (Even php-amf, sabre-amf or WebOrb can be used for this depending on your backend.)
With JS, you are left with json or XML.
You can optimize deployment with Runtime Shared Libs. and employ many strategies like modular development, lazy loading, perceived and actual performance gains, etc. Harder to do with JS/HTML/CSS, where general temptation is to create widget placeholders at design-time.
JS apps are harder to maintain when a new person comes along, there are no good debugging tools (IMHO, Aptana is so-so).
In the end, I agree with someone here who said that hybrid solution maybe on order. Develop an application in widgets;
You can employ some cool drag-drop support with Flex widgets (same with JS but easier with Flex).
Your flex widgets will be decoupled and thus will require incremental compilations in case of changes, and different teams can work with different items if you APIs well designed for each other.
You can communicate with HTML wrapper using external-interface and send data back and forth.
Best of Luck!
"Penny wise pound foolish"
You may find jQuery programmers very easily (and reasonable) however whether they will be structured or not in their methodology is another matter. You could be left with a mess in 3 years time rather than a workable scalable application.
If you can get a lead developer with excellent skills in Java, Ajax/jQuery and Flex skills and let that person set the development standards and guidelines then that would be money well spent.