The amazing adventures of Doug Hughes

Archive for July, 2011

Soliciting Stack Suggestions

I am part owner of another web company, which shall remain unnamed. A few years ago I (and a couple others) wrote their current web application. Initially the application was sufficient, but over time weve run into some limitations of the applications architecture.

For example, this was written before I realized that writing fat controllers was a bad idea. In fact, this is such an early project that it ran on a pre-1.0 version of Model-Glue. There was no concept of ColdSpring at all. It used a stand-alone tool to generate the data access layer (which eventually inspired me to write Reactor, which is now also defunct).

Furthermore, the business requirements have changed over time. The site was initially built to satisfy one specific use case: selling a given product in one specific way.

Overtime the business team has requested new features that are difficult or impractical to implement in the existing architecture. For example, they want to be able to edit and add content on the site without involving me or any other technical staff. They also want to start selling other products in slightly different ways from their original plans.

Long story short, its time for a rewrite. I now need to choose a stack of frameworks, languages, etc, that are appropriate for this project. Im afraid that Im over complicating things and was hoping that the general Internet might have some suggestions.

So heres what I can say I think I need:

  • I need a Content Management system that allows the business and marketing team to add pages to the site, edit content, and generally manage the Information Architecture of the site. They need this because I am not as responsive to their requests as they would like. I do have Alagad to run on a day-to-day basis.
  • I need to write custom code that integrates with the CMS to support the unique business requirements of this application. This would include management of the product being sold, reporting, integration with other third party systems, and more. There really are not any off the shelf tools that I could use to replace this custom work. I really want to write this code to leverage IOC and OO. One of the biggest challenges weve had with the existing site is that it is mostly pseudo-OO, which makes changes and enhancements more difficult to implement. Hence, the rewrite we need to do!

For a content-heavy site Id typically use an off-the-shelf CMS like Mura or Farcry. For a custom-code-heavy site Id typically use Model-Glue and ColdSpring to help me structure clean maintainable code.

The problem comes in when I try to do both: Use a CMS and write clean maintainable code.

My experiences (though dated) with Farcry pretty much suggest that you have to write code Farcrys way if you want to do anything custom. I honestly just dont like Farcrys approach.

Ive also worked with Mura quite a bit over the last year on a different project. For that, we used Mura as the CMS and wrote a Mura plugin to run Model-Glue events based on how a content element is configured in Mura. Its my opinion that this was a reasonably good stack.

Ive even considered writing my own CMS that integrates nicely with Model-Glue, but thats really a non-starter.

For this rewrite I have been planning to use the following stack:

  • Mura for content Management.
  • ColdSpring, Model-Glue and Hibernate for custom code that will be run within Mura via a Mura plugin.
  • JQuery
  • This would be run on Railo, which would run in Tomcat.
  • Eventually this would be deployed as a WAR to Amazon Elastic Beanstalk or another Java Platform-As-A-Service provider.

And while that seems like a reasonable stack to me, I have a few concerns:

  • Overall performance: The Mura + Model-Glue project I mentioned earlier has been suffering general performance woes. Many of these could be attributed to the sheer volume of custom code and the fact that it is not running the latest updates to Mura and Model-Glue. These have mostly been ironed out, but its still an area of concern to me.
  • I might be crazy: To me, the stack above makes sense. However, every other developer who has worked with me on this stack doesnt like it. At all. Some developers dislike Mura. Some developers dislike the Model-Glue integration. Some developers think the stack is too deep. Some dislike using unfamiliar platforms like Tomcat and Amazon EBS. Lastly, very few developers have experience with the complete stack (even when you ignore Tomcat and Amazon).

I know I could build this system using the stack Ive outlined above and Im reasonably sure I can get it to perform well. However, I feel like Im not seeing something that everyone else sees. Ive even had three contract developers quit in the early phases of this project.

Im not sure if my stack should change. Thinking pragmatically, can you think of an alternative approach to this problem? One that lets the business and marketing teams have the flexibility they need and also allows developers to write clean, well structured code, using the latest best practices?

Im open to all suggestions. Ive been considering other languages and platforms. However, I also need to keep in mind my learning curve on any other tools or languages that might be used as well as unique business requirements that may make some choices impractical.

Id greatly appreciate your suggestions. What are your thoughts?

Tag Cloud