… no server (or language, or platform, or all of the above!) has gone before?
Much fuss has been made over CF not being an enterprise platform. All too often, it would seem, we’re the poor kids who get the ‘lite’ projects. Why is this?
I will concede that some of the fault lies with the product. There are long standing requests such as CFC serialization that have yet to be addressed. There are performance issues that have been found with CFSWITCH, string concatenation and other areas of the server.
So I’d like to ask all of you - what’s your number 1 problem that stops you from being able to sell CF up to your management/customers as an “enterprise” grade solution? Leave your comments here, and I promise they’ll be looked into.
At the same time, I think we as a community have some work to do as well. How do we change the impression that CF is not an enterprise platform? There is a problem to CF being such an easy language to learn, with so much power packed into individual tags; it’s just as easy to abuse that power as it is to use it. Could CF provide more checks and balances to ensure that this does not happen? Perhaps, but definitely not in every case.
So do start applying those best practices and numerous frameworks (and un-frameworks!) in your projects. Read the presentations Sean’s put up, Ben’s resources page, and the numerous CF blogs dealing with this stuff. I’m the last person to claim that the application of these best practices and patterns are easy to understand the first time round; but as you get into them, I think you’ll find that they become a habit, an integral part of the way you design and code.
On an (un)related note, the crew of the good Starship Enterprise celebrated their 40th anniversary this weekend past - happy birthday, Star Trek!

Fred B | 21-Aug-06 at 2:44 pm | Permalink
CFML is often seen as light-weight because it is so easy to use. I keep having to explain why “easy to use” is a GOOD thing.
Ian Sheridan | 21-Aug-06 at 2:53 pm | Permalink
Still the only real obstacle that I still get is the misperception that CF is no good for projects that are larger then a simple form handling. Even when presented with the hardcore work that I have already done with it. They do not even get as far as performance issues.
I have been forced to explain it as follows, “It is a RAD platform for Java”. I then go on to talk up the rest of it abilities but that instantly give the person that I am talking to a wider array of “things” that a language like CF can do. I might even thow in “JSP”.
What I’d like to see is more support from Adobe in helping us convince the executive that we are talking to to invest in CF development.
ashwin | 21-Aug-06 at 2:55 pm | Permalink
Yep, we hear that one all too often… See if Tim Buntel’s Top 5 Reasons can help.
Steve H. | 21-Aug-06 at 6:18 pm | Permalink
The CFC serialization problem has really burned me and definitely needs to be fixed ASAP. CF 8 is not soon enough.
As for your question, I have posted this idea to another blog, but I really think that CF could win over some executives if it was sold as a Best Practice and RAD extension to Java. Allow me to explain… as a rather newbie Java guy, I know some of my Java code is probably hard for a veteran to understand or even look at, but hey I am teaching myself from a book here and the Java community is so wide-spread (from desktop apps, to web apps, to mobile apps) that it is really hard to find concrete and consistent best practice examples. I’m sure a seasoned Java web app developer would laugh at how I make HTTP requests, work with complex objects, send email or many other areas that come natural to them now. So what if ColdFusion was sold as the quick way to write best-practice, solid Java. You could hire a team of CF developers and get the best of Java underneath without worrying about making sure everyone on the team is an expert Java coder. Of course that would mean Adobe fixing the cfswitch problem, the string vs. string buffer issue and ohhh yeah making sure all the rest of the CF tags were optimized as well. Honestly though, when I write my CF now I am really hoping that behind the scenes it is performing somewhat optimized Java anyway. It’s pretty clear that if it is not optimized then that will eventually get exposed as someone pushes it to the limit (like cfswitch).
Just a thought!
Steve
Fernando Trevisan | 22-Aug-06 at 1:47 am | Permalink
I’ve used Tim Buntel’s Top 5 Reasons slightly modified and translated to Portuguese just today, to sell CF to one big Brazilian client. I’m waiting for the results…
But I agree with Ian Sheridan: more support from Adobe would be great!!!
Fernando Trevisan | 22-Aug-06 at 1:49 am | Permalink
Don’t you hate when someone comments page auto”magically” changes your : ) faces to yellow-not-funny-faces?
:D 
Christopher Dawes | 22-Aug-06 at 3:57 am | Permalink
Hmmm lightweight… never found that to be the case here in Sydney. Most IT managers I know understand the power and versatility of Coldfusion. And come to think of it, none of my client websites that I’ve built for clients are ‘light-weight’.
One of the largest telco’s in Australia runs mostly on Coldfusion Enterprise Server.
There’s lots of examples. Maybe you’re just aiming your company at the wrong customers/market??
ashwin | 22-Aug-06 at 5:22 am | Permalink
Thanks, everyone, for the feedback. Frankly, when I wrote the post I was thinking that I’d get lots of specific technical problems folks have with CF, but this is good too - I’ll definitely pass it around the team.
Fernando, good luck with that deal! Oh, and Wordpress has smileys on by default; just put them off. Gotta keep my readers happy…
Christopher, it’s great to know that you don’t have problems selling the use of CF. In fact, a recent poll in Japan turned up CF as the #1 development platform! But there still seem to be a lot of places where people have trouble selling the use of CF. We’ll have to see what can be done about that - Tim’s beavering away at that, I’m sure!
Steve, we do out very best to make sure that it is optimized Java under the hood. All the same, things like the CFSWITCH problem do fall through the cracks. In general, I would say that you should just trust us, closed source capitalist devils that we are…
Justice | 22-Aug-06 at 12:10 pm | Permalink
One thing that has always bothered me is the lack of a built-in way to determine why CF is hanging or crashing. I know you can dive through the logs in some cases, but something like SeeFusion should really be an included feature, and not a bolt-on extra cost.
Fernando Trevisan | 23-Aug-06 at 4:26 pm | Permalink
Ashwin, thanks twice. We made the deal and I’m happy without that weird yellow faces in my comment
And I think Justice got a good point: sometimes is hard to know what is hapenning with CF that makes it crash or run slowly. I haven’t used SeeFusion but more debugging and logging tools would be great - or more documentation on “how to” find why your CF box is hanging.
Tks again!
ashwin | 24-Aug-06 at 7:00 am | Permalink
Great to know Tim’s preso could help, Fernando!
As for figuring what’s going on under the hood, if anyone’s making it out to MAX, come catch my session Unlocking the ColdFusion Server Black Box.
Ronan | 24-Aug-06 at 2:56 pm | Permalink
Ashwin,
Two things I´d like to see:
1) A better way for troubleshooting
It would be nice if you could known what is running, on the fly
Coldfusion has a great debbuging output when you known what template should be debbuged, but sometimes you need to know what pages (and resources: queries, tags, functions being processed) are consuming the server in a specific moment.
2) A better support for OOP, and can apply it without worry about too many instances loaded or too many components.
Some times have to concentrate different codes in few components (or just a uber cfc) isn´t the better choice for the application´s logic.
I know that too many objects can be a problem in any platform, but think the CF limitations should be better
ashwin | 24-Aug-06 at 4:19 pm | Permalink
Ronan - I’m not clear on what you mean by “better support for OOP”. What aspects of OOP which are missing from CF would you like to see implemented? How would they help you?
Sudhaman Srinivasan | 25-Aug-06 at 8:02 pm | Permalink
This is a whole different perspective. Adobe should engage with and promote CF within the Indian software giants like Infosys, TCS, Cognizant, Wipro and Satyam. In turn, this will resonate in the US corporate world and globally.
Ronan | 25-Aug-06 at 9:19 pm | Permalink
Ashwin,
1) CFMX-6.1 I can´t call a method directly, for example:
would gives an error.
2) Sometimes I think a syntax like some other languages looks better, for example:
new Cars car;
would be better than
car = CreateObject(”component”, “mapping.classes.Cars”);
OK, no problem, it´s a personal thought
3) For all I have read (and tested) about performance in Coldfusion, it seems to have some limitations instantiating so many objects.
So I usually be afraid of creating as much methods as I´d like for the application logic and code reusability, to get away from performance problems.
Besides, I usually get away from pass several instances of the classes as a parameter.
Once more, it may be just personal thoughts and I may be wrong about it (I hope so), but, once so many peoples claim about it, I don´t feel security enough to use many components, classes, instances and so on in Coldfusion
Ronan | 25-Aug-06 at 9:21 pm | Permalink
Ashwin,
The item 1 (above) is:
carName = CreateObject(”component”, “Cars”).init().name
ashwin | 27-Aug-06 at 4:54 am | Permalink
Ronan - what kinds of scalability problems have you faced? Do note that practically all of adobe.com runs on CF. See Sean’s piece on the web services architecture he’s rolling out to get an idea of the size and complexity of the production apps that are being built with CF.
I see that the kind of createObject() + function call + attribute reference expression that you’ve pointed out is still an issue with CFMX 7. Thanks for pointing it out - I’ll be sure to put it into our bug tracking system. On a related note, please do file any other issues and enhancement requests you have at http://www.adobe.com/go/wish.
Sudhaman, thanks for the suggestion; definitely sounds like that could be a good idea. I’ll be sure to pass it on to Tim.
Brandon Harper | 27-Aug-06 at 8:52 am | Permalink
Ashwin:
Here are some problems I have with scalibility/stability/selling the CF platform (I work for a large public company with lots and lots of servers, etc). Some of these are off of the top of my head, so I don’t have the exact data sitting in front of me. Anyhow… here are some constructive criticisms based on my own experiences:
1. No built in mechanism to automagically kill threads which have been running past the execution time requested. This is a big problem particularly when dealing with unstable 3rd party resources, such as legacy database servers. Eventually all threads become hung over time, and the server stops serving requests.
2. ColdFusion (running under J2EE mode on JRun) seems to occupy around 2x as many threads as a normal Java application, thereby reducing the number of requests it can handle at one time. When doing thread dumps it seems like there are tons of threads occupying resources which don’t need to be. I’d personally rather take the extra time to write an application in Java if it can handle twice as many requests given the same resources. My boss (uber Java guy back in the day.. contributed code to the JVM, architect for the most popular phone system in the world, etc) harps on this pretty frequently…
3. ColdFusion is a bit of a management and deployment nightmare when you start getting into a large amount of servers. I covered this more in depth a few weeks ago on my “ColdFusion 8 Wishlist”
4. It’s way too easy to write code with concurrency issues because you must var local variables. This is the opposite of every other language I’ve worked with… you should have to explictly define variables in a function which /aren’t/ function local, rather than the inverse being true. I feel like I spend way too much time at work troubleshooting other people’s code to find that a concurrency issue to be the problem.
5. Simple component instantiation is way too expensive.
6. Component instantiation in CFScript is MUCH faster than doing it using CFML.
7. I think it’s hard to sell to management for many reasons.. among them:
a) People who are only familliar with the ColdFusion of the 90’s
b) Much easier to find quality .NET and Java programmers.
c) ColdFusion is a “black box” beyond those who are intimiately familliar with it.. should be more transparent to both novice developers and sysadmins.
d) Doesn’t integrate as well with other existing Java applications and frameworks as touted because of old libraries and other case-by-case issues.
e) Lack of serious developer tools from Adobe.. ie.. editors, testing, monitoring, etc
f) No industry buzz about CF. You hear stuff about Flash and Flex sometimes, but nothing seems to gain much attention from CTO’s and the like as far as CF is concerned. You also never hear about people moving TO ColdFusion from another platform, only away from it… While we talk amongst ourselves a lot, most developers and higher roll their eyes if you mention you work with ColdFusion.
ashwin | 27-Aug-06 at 10:49 am | Permalink
Thanks very much for your considered comments, Brandon. This is exactly the kind of feedback we need. We do hope to be able to address many of these issues, and more, with Scorpio.
Brandon Harper | 27-Aug-06 at 9:43 pm | Permalink
No problem Ashwin, hopefully my comments are of some help! I forgot to revise #6 so there is a slight typo there. I meant to say that I’ve noticed that the creation of Java objects in CFScript is much faster than in regular CFML (it seems to avoid all of the auto-scalarizing magic and casts Java correctly without introspecting it, IIRC).
I’m not sure if that’s actually true for regular components or not, but I am curious about that now.
ashwin | 29-Aug-06 at 1:27 pm | Permalink
Your comments are indeed of help, Brandon! Our QA-to-Engineering ratio is 1:1 on the team, and there are periods at the end of ever development cycle when everyone pitches in to do QA, but even with all that testing, there will always be a variety of real world scenarios we may miss out on.
Stacy Young | 04-Sep-06 at 2:50 pm | Permalink
I am baffled by the apparent lack of discussion on CFs scheduling capabilites. Along with CFC serialization, it’s one area of the product that has yet to graduate to the Enterprise level.
What’s missing?
- Scheduler needs to be cluster-aware. Define a task anywhere and have each instance updated. This can help load balance the scheduling load as well as provide fail-over for when one of more servers need to be taken down in a cluster.
- Extensible. We need to be able to store scheduler information in a JDBC datasource rather than local xml file. Many times I’ve wanted to either add some additional information to a scheduled item or simply relate to another database table.
- Local invocation. Why HTTP request only? If the scheduler were cluster-aware then local cfc invocation would be possible …and most likley preferred in most instances. How many scheduled items are simply posted back to the same box?
We use CF as a reporting platform. Scheduler enhancements would close the door on competitors for a good long while!
ashwin | 08-Sep-06 at 3:26 am | Permalink
Thanks for the suggestions, Stacy. Damon’s in Bangalore this week; I’ll be sure to bring this up to see if we can do anything in this space for Scorpio.
Mike P | 16-Jan-07 at 10:34 pm | Permalink
ColdFusion needs the following:
- Real-time monitoring - what’s running, what’s hung, what’s going on. Thread-dumps and stack traces are a pain. Plus they say nothing about what happended.
- Good logging functionality. Why is my server hanging? CF logs are barely useful since they don’t tell me what happened.
- Better memory configuration, i.e. JVM and Garbage Collection.
- CF is horribly weak at protecting itself. Far too many outages. Even CF 7 is like Windows NT 3.5x. Anything can kill a CF server. Seen it happen far too often.
- What’s the point of “Timeout Requests after x seconds” when this doesn’t work?
Adobe needs to do a far better job of making CF robust and stable before people trust it to run heavy-duty enterprise sites. They should have been doing this with CF 6. Now we have to wait for CF 8 to at least give us decent monitoring???
ashwin | 17-Jan-07 at 4:19 am | Permalink
Mike - I’m sorry that CF seems to frustrate you as much as it does. CF 8 should ease some of these concerns. As for running enterprise sites, I would suggest that you check out Ben Forta’s list of enterprise sites running CF - there are lots of them. You may find the “Business and Commerce” section of particular interest, since many of these are high volume public sites. And lest we forget, let me point out that we eat our own dogfood - Adobe.com is pretty high volume, and runs on CF.