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!
I have used both. I don't have a strong recommendation, but have some considerations.
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.
"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.
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.
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:
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!