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?
Comments on: "Soliciting Stack Suggestions" (8)
The only thing I’d consider switching would be ColdBox instead of Model-Glue.
http://objectivebias.com/entry/navigating-within-a-coldbox-application-integrated-into-mura-cms
https://github.com/bendalton/mura-coldbox-plugin
LikeLike
I’ve been using Mura for the past few weeks only as a replacement to FarCry, and I really like it.
Have you considered adding SlatWall or Meld MiniCommerce for the selling of products part? There is an existing plugin for FW/1 applications, and Grant Shepert has several examples on how to write something like that. SlatWall is, I think, a FW/1 app, so that should have some examples as well.
LikeLike
@Adrian – I know a lot of people are using ColdBox. I’ve not really given it a chance yet. I think I’m just comfortable with MG. It’s interesting to see the approach on objectivebias.com – it’s quite similar to the approach I took with the Mura Model-Glue plugin I wrote.
LikeLike
@Rob – Well, to complicate matters, we’re not really selling products in a traditional manner. This thing we’re selling is being sold in a very particular way and I’m pretty sure that no off-the-shelf tool will support what we need. That said, I WILL look into the suggested products. Thanks!
LikeLike
Mura uses FW/1 underneath the hood, not sure why you wouldn’t just use it.
LikeLike
At first reading the article it sounded like you were thinking about a almost complete rewrite but by the end I got the impression you just wanted to perhaps re-architect the components. If you are thinking about a re-write and don’t have a CF requirement I would check out Grails. There is a CMS plugin that might work for you and then you could quickly write the rest of the app in Grails/Groovy.
If you are looking to stick with CF which does sounds like a good choice I would just recommend keeping a really clean separation between the CMS parts of the site and “app” part of the site which sells the products. In my experience with CMS system is dangerous to try to use them like frameworks to build apps on top of them. Maybe it is just me but I find it really doesn’t work well in Mura or FarCry. On the other hand I have found Mura does a great job of integrating in applications but you have to be careful how you implement that in Mura. It is hard to say based on the limited info in the post but you might already be doing that in which case maybe you just have to moderize the app part of the site to use CF 9’s ORM and a modern version of MG, Mach II, or FW/1.
LikeLike
@Todd – I’m not sure what I’d gain from FW/1. Yes, mura uses FW/1, but only for the admin, as far as I’m aware.
@Kurt – Thanks for the suggestion. I think I will look into the Grails CMS suggestion before I go too much further. This will be a complete rewrite. There are some changes in business process that simply can’t be shoehorned into the existing code. So Grails isn’t entirely out of the question. Thanks!
LikeLike
doug, i’d be curious to know what you settled on here and how things have worked out. a folllow up post basically…i am doing a similar tech stack evaluation right now.
also, can you point me to any examples of that mura plugin to run MG events you mentioned?
LikeLike