Tuesday, August 18, 2009

Adobe ColdFusion: A new beginning, or the beginning of the end?

For my very first blog post I thought I'd start with some big thinking ... very big thinking.

Along with many other ColdFusion coders, I was excited about the recently released Gartner report on Adobe ColdFusion. The overall positive outlook by Gartner on the ColdFusion technology platform provided a welcome relief from naysayers dominating the CF blogosphere during the previous few months. Many of those naysayers seemed to be former CF coders that had left the platform years ago and were unaware of how the platform has evolved under Adobe's stewardship.

However, a closer read of the report reveals that the authors believe the "uptick" that ColdFusion is currently experiencing will be short-lived. While they see the value of the current ColdFusion platform in making it easy to build enterprise Web applications, they also see this value diminish over time as other factors become more important to organizations. Organizations looking to reduce the complexity of their technology landscape will steer towards broader platforms such as Java EE and Microsoft .NET. Organizations looking to reduce the cost of their technology landscape will steer towards Open Source platforms such as PHP and Ruby.

As much as I love coding in ColdFusion, I agree with this general assessment. Adobe has put a lot of work into the enterprise integration features of ColdFusion, and yet these features have not attracted the attention of many CF coders. For instance, XForms is a great open technology for separating a form's function from its presentation, yet ColdFusion XML forms (powered under the hood by XForms) is all but dead. The ColdFusion event gateway interface is an elegant way to perform asynchronous communication with everything from Google Talk to JMS brokers, but CF coders seem to be more interested in the cfthread tag. Many CF coders are interested in Flex for developing richer front-ends, but only a fraction of those seem to know what BlazeDS is or why they should care about it.

It looks to me that even though the ColdFusion platform has evolved a lot over the years, ColdFusion coders haven't changed much at all. The applications they build now may have richer interfaces using Flash and Ajax, but they are the essentially the same kind of applications they built before: Web front-ends to SQL databases. These are the types of applications that ColdFusion coders are most comfortable with; yet they are also the types of applications that any Web development platform can do, and therefore have the biggest risk of getting dumped in the context of larger technology strategies within organizations.

This is a great time to be a ColdFusion developer. It is also a very dangerous time to be comfortable with being a ColdFusion developer.

Fortunately I'm already uncomfortable as a ColdFusion developer. This is not because I am worried about the state of the platform; rather it is because uncomfortable with what I see as the status quo of ColdFusion application development. Some of it has to do with technology, but a lot of it has to do with process.

I see a lot of ideas and tools that have a lot of potential for improving outcomes in the delivery of ColdFusion-based business solutions. Here is a partial list of ideas that have captured my attention of late:
  1. Agile development practices such as Scrum to provide quality and value to clients more quickly and more frequently.
  2. Agile requirement practices such as User Stories to improve collaboration between developers and clients in finding features that offer real business value.
  3. Agile QA practices such as Test-Driven Development and Behavior-Driven Development to spread the cost of QA throughout the development process instead of leaving it to the end (where it almost always gets short-changed at the expense of the client).
  4. Testing frameworks such as MXUnit, Selenium, and Tellurium in conjunction with the above for a streamlined testing process instead of the usual hit-and-miss affair.
  5. Build automation tools such as Ant and Maven for stress-free deployment of Web applications, and Continuous Integration tools such as CruiseControl to manage quality levels during the project.
  6. Using alternate programming languages for back-end functionality in ColdFusion applications, from standard Java to the interesting dynamic language Groovy to the much more exotic language Scala.
  7. Using Progressive Enhancement and Unobtrusive JavaScript with Ajax libraries like jQuery for better collaboration between back-end coders and user experience builders to create rich and robust HTML front-ends.
  8. Techniques for refactoring application code to design patterns and refactoring databases for improving the long-term maintainability of applications.
  9. Designing service interfaces for ColdFusion back-ends that can be simultaneously exposed through traditional HTML front-ends, Ajax front-ends, Flash remoting and Web Services.
  10. Improving the cacheability of Web interfaces by proper use of HTTP features and implementation of REST concepts to improve performance and scalability.
I think 10 items is a good place to end my brain dump for today.

As you can see, I'm not short on ideas for moving beyond "comfortable" ColdFusion development. The real trick is going to be in identifying ideas that I have a real chance at actualizing, and then making it happen. It won't be easy: with the only person asking me to do this being myself, I'll have to be harder on myself than usual to build and maintain momentum.

If and when I start on any of this I'll post it here.

No comments:

Post a Comment