How Do You Decide Which Framework to Use?
GPolancic asks: "Software frameworks are increasingly popular software reuse technique, because they provide infrastructure functionalities to an application, or a layer of an application and therefore
reduce the work of a software developer. Numerous complementary (for example: Struts and Hibernate)
and competitive (for example: JSF vs. Struts or JSF vs. ASP.Net) software frameworks are available as both proprietary and open source software. A major precondition for the success of a software framework is their acceptance, which is related to market share or community size. On the other side, application developers need to review and select the best available software framework for their needs. Which factors do you evaluate before you decide to use a specific software framework?"
"Our presumption is that software developers mostly evaluate following software framework characteristics based on:
- perceived ease of use (e.g. easy to learn, easy to adapt)
- perceived usability (e.g. improving developer performances, reducing work, faster development),
- perceived sustainability (e.g. perceived long term support, supporting standards, clear project directions) and
- perceived fit to specific developer requirements (e.g. suited language, suited functions, suited architecture).
You use the one your boss tells you that you are going to use.
Personally, I'd pick Ruby on Rails. Not that I have any technical reason to prefer it, mind you... but man, it's so jam-packed with alliterative goodness and it's all Web 2.0'ed out and shit. And it has some crap called a scaffold. Do you have any idea how many struts it takes to build just one scaffold? No? Well it takes a lot!!
This is almost as bad as asking "What programming language to use for a project" It all depends on the needs and experience of those involved. Sometimes it means rolling your own, other times it is better to get one that has been fully tested in the field for some time. Either way it is a silly question to ask.
I've played with a bunch of frameworks based on Java, Ruby, Python, etc... However for my last few projects I decided to go "old school". Since the target platform was Windows, that meant plain C and Win32 API. No MFC or anything. Staticly linked libpq if I need database access. Extra plus is that without C++ or COM frameworks, I can use mingw gcc on my BSD workstation to cross-compile.
It was a little more work up front, but I've gotten nothing but extremely positive responses about the interface. The application binary usually is under 50k, even the larger ones don't break the 100k barrier. They're extremely quick and responsive on modern machines, and still very usable on older ones. I like to do processing asynchronously (i.e. user types a few characters and a DB query kicks off in the background when they stop typing) and it keeps things snappy. It's pretty easy to literally run circles around all the bloated apps eating up tens of megs of memory or more.
Hmm.... I think you should read this first, in case you didn't. http://discuss.joelonsoftware.com/default.asp?joel .3.219431.12
1) Established - Needs to be stable and in heavy use. New stuff is fun to play with, but not an option for paying customers.
2) Philosophy - I need to agree with the way they do things. Major reason why I ignored EJBs, but jumped on Spring
3) Cost - I hate having to spend unnecessary $$ when team members cycle, or we have to do an install. Free is best
4) Standards Based - Vendorlock is teh suck. I like the options of being able to swap a component if I'm unhappy with it, even if I know I'll never swap it.
5) Familiarity/Ease of Use - Will it ease into what we're doing? Can the team become proficient in it in a reasonable amount of time? Is there decent documentation available?
6) Licensing - I don't like unecessary limitations, or surprising my customers, so I avoid things like the GPL.
Help me take back Slashdot. When did 'News for Nerds' become 'FUD and Conspiracy Theories for Extremist Nutjobs'?
There are so many criteria you have to consider that are so situational specific that it would be near impossible to write down the complete guideline. But I think there are a few solid guidelines to start with or consider.
1. Know what goals you have to meet. The eventual success or failure of a software project has more to do with having a strong vision of what it is you need to accomplish at the beginning regardless of platform or tool choices made before and during its development.
2. Be wary of selecting anything because it's cool. Many engineers, I think, fall into the trap of buying into cool toys rather than selecting mission critical tools.
3. Pick frameworks with a maturity directly proportional to the criticalness of the application you need to develop. If you are building something that is to be the the cornerstone of a company, you should pick well established frameworks that have a proven history and proven credibility to provide effective features. Conversely, feel free to experiment with less proven frameworks for applications that can afford to be less robust. A balance between sticking with tradition and building for the future does have to be taken into consideration.
4. Identify the top 3 features your application has to deliver and ensure your chosen framework excels at those features. Bells and whistles and future expansion are nice but make sure you take care of what's critical first before comparing extra features. This will help focus your evaluation and not get side-tracked by all the cool stuff a given framework might provide.
5. Experiment with possible options. There is no reason to select a framework based on paper analysis. Try as much to get your own hands-on experience.
6. If possible, interview other people who have used the framework in real applications. Get the opinions of people who have actually used your options in the real world. Don't let tech demos be your only guide.
Runesabre
Enspira Online
I'm really starting to sour on frameworks. Libraries, love 'em to pieces. You want to take care of all the bit-bashing in the video card and present me an OpenGL interface, thank you very much. You want to give me a proper 21-st century file abstract like the KDE io-slaves, you have my gratitude. But you start bundling together five or six different technologies, each themselves fairly simple, and give me this unified framework or something, and in short order I'm likely to be cranky. This is especially true for things that are themselves fairly easy, like emitting HTML.
The problem is two-fold:
Especially in this age of using more dynamic languages, I'm finding I'm a lot happier taking smaller libraries and tying them together with my own frameworks, which I understand and can make sing and dance in exactly the ways I need them to with only the minimal complexity.
One important point here is the scale of development. If I'm going to do a three-week project, I'm going to probably go ahead and use a framework. But the larger the project, the larger the team, the more time that geometric price has to come up and bite you in the ass, where you Absolutely, Positively Need this thing the framework can't do, and it has to be done by tomorrow.
Also depends on your skill level, of course. And one of the cardinal Laws of Programming is that there are no Laws of Programming, only tradeoffs. I don't expect everyone to agree, I'm not pitching this so much as throwing it out as food for thought. Caveat, caveat, caveat.
I don't do Java, but my guess is that Hibernate, to the extent that it is a framework, is probably a win because it's so mature. But then again, you can also look at it as a really big library, because it sure does seem to play well with a lot of things. I think one of the distinguishing charateristics of a "framework" as I mean it in this post is that it is well-nigh impossible to glue two "frameworks" together, and sometimes even adding the capabilities of an additional library is an exercise in frustration. But the upshot is, I'm finding in practice that I'm a lot happier and more effective in the medium and long term, even on my own projects, with libraries that I tie together myself and not "frameworks".
While I'm not dogmatic about any particular one of them, the Agile-style development really help with this, and I might not feel this way without their influence. Automated Test (unit tests, usu