Thursday, February 16, 2006

Some thoughts on Frameworks

Frameworks is the big question of our decade, which to use, what's the best for what kind of development environment I am in. I find these are all valid and important questions.

I find that I have some reasonable concerns on frameworks, and although I have them, I am not trying to say that frameworks are bad or evil. I just don't think we're at the highest level of quality yet.

Here are a few of my needs for a framework:

1. Works well in individual or team environments
2. Is not visible to the end user, end users see each web page as a seperate page and application.
3. Eliminate any and all processing that is needed for a framework to run, so that each application is just loading it's own functional needs.
4. Each application can be stand-alone or part of a whole application farm, and if different frameworks are used for different applications, that they can seamlessly work together.
5. Clean and Easy to read so that non-framework users can just as easily read,add or modify that application.

Now, I know as we keep upgrading and adding new frameworks, we are going to eventually be at this point, I can feel it in my blood. (I hope) But let's discuss, the where's and why's of each need, so even if you disagree with me, at least you can understand what i say, and perhaps why I say.

Need 1: Works well in individual or team environments

Face it, not all of us work in big shops, and sometimes whole websites, applications are written by 1-2 people, not necesarily working together.

So we need to find a framework with ways that works well with both. And of course it is nicer and more learning involved in a team environment, but reality is not always on our side.

Need 2: Framework invisible to End User

I totaly admit that I am a Jacob Nielsen, usability fan. And honestly as great as the framework applications may be in maintainability and stability, it bites in terms of usability to the end user. Frameworks are very important to us as coders, but let us not forget that it's our end users that need to be able use these applications, whether they be for Intranets or Ecommerce Portals.

People do enjoy bookmarking sites, and to help them we need to have readable bookmarks. And I admit that non-framework sites don't always have this well done either. But there are ways to make it seamless.

For example which is easier to read?

1. http://www.mysite.com?index.cfm?fuse=shopping.cart

2. http://www.mysite.com/shopping_cart.cfm

I know some claim that most people don't read the web page links or don't really bookmark them. But how many of are willing to take that chance? Read more about this here at Useit.com.

And btw, there are ways to make this streamlined, for example creating shopping_cart.cfm that just has the correct includes to your x-framework specific code. But then it's all invisible to the end user, which is a good thing.

Need 3: Eliminating Unecessary Processing

As part of setting up each aspect of the framework, it takes some processing per page, to help it both setup, and recall which applications to load. I think this an honest balancing act, that needs further tweaking. Perhaps the big question is what processing should be done for the framework on every page, and what processing should let the application code itself do. I think this is something for open discussion on the blogs.

Need 4: Stand-Alone Applications - Frameworks and Non-frameworks have to be able to work together.

One of my personal pet peeves, is that working for X Company and they outsourced some code, and this one application was done in fusebox, while 100% of our other code was all done in normal cfml code.

Simply there has to be a way so that your framework can easily be worked along side with other frameworks, or easily translated if necessary.

Maybe this is just a fantasy, like having Randy Moss on my fantasy football team. But honestly sometimes we are forced to take in applications made in different frameworks, and yet they're all for the same website. So we have to somehow find a way to integrate them, so they can work well together, and not make it too difficult for anyone following us, and seeing code for a website, done in many different methods/frameworks.

Need 5: Easy to read and modify

You created this beautiful application, in the most hotly used framework, everyone you chat with loves this application especially in the framework you did it in.

However when you turn it in for your client, they look at you, and say something like...

"What framework is that? We don't use that framework, so it's going to be hard in the future to be able to read/modify that application, especially since we didn't ask you to create it in X Framework......"

They're not saying the framework is bad, or evil, just if we do things in frameworks, they have to be easy to read and modify by other people who are completely unfamiliar with that framework.

Is this realistic perhaps not, is it needed, heck yeah.

Maybe I am just sharing some of my pet peeves from my years as an ColdFusion Developer, but I feel these are real needs and hopefully set some goals for future framework development and upgrades.

Thank you very much...

P.S. A Happy and Belated Valentines Day....