As I left my last job, I am also departing from ColdFusion. It was quite interesting to learn and use that language everyday, but I do not think I will be using it anytime soon. Here are my thoughts on it.
I find that ColdFusion is to web application development what the old version of Visual Basic, version 6 and before, was to desktop application development: an easy to get started application framework. In that sense, it shares many of the qualities and weaknesses that Visual Basic had.
On the plus side
ColdFusion was first developed to do some simple database operations. In that regard, it has kept all the simplicity and the ease of use that you need for a 3-tier application which is what most web application are these days. It seems too simple. Here is an example that list pages.
<cfquery name="pages" datasource="mydatasource">
select title from pages
</cfquery>
<ul>
<cfouput query="pages">
<li>#pages.title#</li>
</cfoutput>
</ul>
Most built in programming tags and function are simple to use and are self-explaining. If you want to send an email, you use cfmail. If you want to read a file, you use cffile. If you want to create a pop-up window, you use cfwindow. If you want to manipulate a pdf, you use cfpdf. If you want to manipulate an image, you use cfimage. I guess you get the point.
ColdFusion has a great community behind it. It is quite easy to find help even for advanced problems. Even ColdFusion book authors hang out in help channels to answer and help you out.
It can be extended in various ways with Java and .NET. Since it is based on Java, it is quite easy to use other Java classes or component with it. In the latest versions, it comes with a .NET “bridge” which let you call .NET code as if it was an other simple object in your application.
ColdFusion comes bundled with many interesting and useful components that you would not normally see elsewhere. You have a file indexing and search server, a PDF manipulation module, Flash/Flex integration services, a HTML to PDF conversion module and a component to connect to Microsoft Exchange (you got it, it is cfexchange) for free.
On the minus side
ColdFusion is proprietary software. You cannot change it the way you want. You have to accept all its features and components the way they are or leave it aside. If there is a bug in a component, you have to live with it until Adobe decides to correct it in a new version. There are a few alternative open source engines that can execute the same code as ColdFusion but they are not feature wise equivalent.
An enterprise license for ColdFusion is quite expensive. It starts at US$7,499. At that price, it makes you think twice before using it.
Th ease of use of the application framework comes at the expense of a loss in flexibility. For instance, the tag cfexecute can be used to execute a program on the server and retrieve the output in a variable. It will return the stdout but not the stderr. You have to resort to some gymnastic in order to retrieve it. That same goes if you want to send values in the stdin.
ColdFusion was not meant to perform any extensive numerical operations. The way it stores numerical values and floating-point values combined with the way it process operations on them can lead to a catastrophe. That is what I discovered when I was trying to implement the polyline encoding for Google Maps.
The online documentation for ColdFusion is lacking many important details that you can only find in expensive books or by trying it.
The main extension point for ColdFusion is Java. You can create your own programming tags or function in ColdFusion but since you will limited to use the built in functions, you will probably have to resort on using Java for anything out of the simple scenario. Since you might have to use a mix of ColdFusion and Java in your web application, it quickly brings the question of why not using Java and J2EE all the way for your web application.
It was still a pleasant experience to use ColdFusion. However, I would not recommend anyone to use it for a new project. I think there are many better options for new projects. As for maintaining an application currently built using it, it is probably wise to stick to it for a while.

