The Framework is dead. Long live the CMS.

If you don't know already, the framework is dead. That is to say, unless you have money to burn, frameworks like Zend, CakePHP, Django, Struts, .NET, and even Rails should not be considered as a foundation for building anything but the most unique and game changing websites*. The age of the framework for building websites is gone and it has been replaced by the open-source CMS or Content Management System.

In this declaration I am not promoting any particular CMS (although I'm partial to Drupal myself), simply letting anybody who hasn't heard the news that just about every website needs more than CRUD (Create Read Update Delete), a shared database connection and other simple tools frameworks provide.

What's so great about a CMS?
Almost every website on the planet needs these key features:

  • Content management (obviously!)
  • Users/roles
  • Built-in session handling
  • Advanced theming
  • Categorization/taxonomies
  • Site search
  • Widely available modules (add-ons, plugins, etc)
  • More formalized code development rules
  • Search engine friendly code/urls

While not every CMS has all of these features, many do. Nor does this mean a faster start on new projects but faster evolution of old projects. Open-source Content Management Systems outpace the competition in terms of development time, available features, and fewer bugs every day of the week. That means lower development costs and faster release cycles - and it means outperforming the competition.

Give me some examples
For people looking for specific platforms that fit the CMS profile, here's a short list:

  • Drupal
  • Joomla
  • WordPress
  • Plone
  • ModX
  • Hippo
  • Concrete5
  • Radiant

There are literally dozens of others to choose from, built in everything from Java to Ruby.

So if you are developer and you are still programming using a framework or (god forbid) a totally custom app, take a few weeks and take a content management system or two for a test drive. You will likely be shocked by how much excellent code is out there for the taking.


I think a strong framework is still a good basis and a CMS/other product can be built on top of it. My major gripe with Drupal is it is too CMS-ey. If you want to do some things that don't need CMS functionality or how Drupal's main modules/core -tries- to do it, you wind up working harder to extend it to basically make it more structured and less formatted.

I'd rather see Drupal core, Views, etc. spit out raw information, and then additional modules that you would stack on top of Views for example to render it out how Views does right now.

I don't like that Views loads a million includes by default; I'd rather only have it load the ones that I want. However, the Views module was designed as both a query builder, executor, AND formatter. I'd like to split that piece into a separate module, ideally.

Drupal is a much more extensible solution than WordPress or other CMSes because it does provide more of a generic framework than just a "CMS" - I actually dislike when people call Drupal a CMS as I consider it still a framework packaged with CMS functionality by default.

All the features you list above I consider to be part of a framework. Some of the "frameworks" out there are more "libraries" where it's a bunch of stuff to enable you to make more things, but out of the box doesn't do much.

IMHO, Drupal's power is it's framework+features out of the box. However, there's a little bit too much CMS functionality in there. Reducing it slightly would provide the power of user management/authentication/etc., utility functions, theming, session handling, modularity/extensibility, without the CMS or extra overhead for CMS-specific functionality. If you want the CMS functionality, turn it on. The hook concepts and such are extremely powerful and allows nearly infinite extensibility, not just for "Content Management" :)


Hi Mike,

I agree that Drupal is in a special class, in that it is extremely modular. And I agree that frameworks do have a place, but I think they are widely overused.

The main thrust of this post is to point out the tremendous value sitting in more advanced open-source systems that are out there, rather then the more disparate collection of libraries that most frameworks are. Some of them (like Symfony) is literally a collection of different technologies very loosely coupled together. A modern system should do something out of the box, have a system that allows contributed code (modules, plugin, etc.) and enable a community to contribute encapsulated functionality.

That said, at a certain point any starting point can be a relatively small contribution. If you build a million dollar app, the foundation you choose to build on doesn't matter a whole lot. That said, not many companies or people have that kind of money/time to invest.

Joaquin


I think you may be a bit biased towards Drupal. I was as well when I first used it for a tool in a past position.

When I got to my new position, I tried to force Drupal (a CMS) to build simple business apps that would have worked fine with ASP.NET MVC.

Some business apps dont care about fancy things like sliding views and panels, etc. They just want their app to work as intended.

Drupal meant I had to force IT to install a Linux server - then came the single sign on/LDAP problems as they are a windows house. So i attemtpted to run Drupal on IIS - had problems with running updates.php...

All this because I was in love with Drupal.

So I re-looked at the project and realised a simple ASP.NET application would suffice...and it did...

I think my error was that I wasnt building a website and I was trying to force a website tool to do the job...(overkill).


I did exactly the same thing.
Drupal is good when you first learn PHP and try do many things yourself only to find that a CMS can do it. You then get reliant on it (as your skills grow) then realise that you are actually not using most of the functionality of Drupal yet the site is loading 100% of it on each page request.

I still think CMSs are good for websites though. When your site becomes an application. Move to a framework.

I choose ASP.NET MVC because the tools (Visual Studio) are first class.


Without doubt Drupal is one of the best CMS' currently out there, but as with all Content Management Systems there's a lot of code bloat, 95% of which is redundant for most uses.

If you are creating your own ("god forbid") app then this isn't a problem

There are two possible reasons for concern regarding code bloat:

1. It interferes with an ability for programmers to understand the code.
2. It affects performance.

In the first case, you actually have a wider understanding of the code by more people when you are using a CMS. Custom code makes a lot of sense to the people who wrote it, but not so much to everyone else. A good CMS should have widely agreed to code standards as well as code that is being reused in a large number of sites.

In regards to the second argument, a good CMS has likely been through the wringer many more times than a custom app. There should be documentation on what other people went through which means solutions rather than the need for trailblazing and trial by fire.

You may not know the reason for a line of code to be there, but if the community is a good one, there's probably a reason.


Frameworks give you more control in web applications (not web sites). Yes Drupal is difficult to understand initially and it puts people off but is it worth going through the steep learning curve of Drupal for an application that can be handled in 2 hours using a framework?

Remember Drupal itself is based on a framework (its not MVC but its similar - think its called PAC or something).


I agree that a CMS get you far in "just a click". However, for the past few years I've been working with one of the aforementioned CMS's and it's been a frustrating experience. The system is getting in the way rather than helping me. So for my next project I'm basing on a framework instead. If you go with a CMS, be prepared on having to do things the way the CMS wants you too. If the CMS hasn't thought of your use case, you're out on deep water.

Regards,
Per Thulin


Hm... definitely an interesting article. I've some thoughts about this topic myself, as I quite recently was involved in creating two web sites/web applications, one using a CMS (Drupal), one using a Framework (Rails).

A bit of background: I started tinkering with Drupal some time ago, when 6.x came out, and also created some (if somewhat minor) code contributions. I started using Rails just a few weeks ago when I started the second project - and I have to say that I prefer it over Drupal.

Why? Well, there are some things that have always annoyed me when using Drupal, and I have found that most of them are gone when using Rails.

The one that I maybe found most annoying is that Drupal is really UI-centered. You install Drupal and some modules, and then you use the admin interface to customize your site.
At first, I liked that. But it's quite a tedious process - which would be no problem if you only have to do it once. But, say, you want to add a new feature, tested out some module on your local dev system, decided that it's good, and want to use it on your production site.
So... you can check in the module code into source control, but you cannot check in the configuration! I really don't want to repeat all the steps I did locally on the production server. The Features module is a great step forward here, but it only solves this problem for some modules.

When you use a framework, everything is in code. There is no setup process you have to go through first (Drush could help here - but only when using Drupal 7), so setting up a development server is really easy! People can just check out the source code and start developing a new feature, tweak the design or whatever. And in the case of Rails, you can deploy code, install additional modules ("gems") and run database migrations by typing in just one single command (using Capistrano).

I believe that Rails actually saved me time and increased my productivity in this project, and I really wish I had used it for the other project, too.

I hope that didn't sound like a Drupal bashing or something - after all, I still like Drupal! So maybe you can help me there: if you want to add a new feature to a drupal site, how do you do it? I've always wondered how "Drupal professionals" handle such problems, so I'd love to hear from you.


A CMS like Drupal can seemingly present challenges in deploying features from a staging server to live. After all, the database contains not only content, but configuration information as well. As a company that does a LOT of Drupal development, we've found if the change is small enough it's actually better to create a "recipe" - or checklist - of things to repeat on live, once it has been vetted and testing on your staging environment. While this kind of manual work may seem cludgey or a hassle, it's often quite a bit faster and safer than writing code to deploy something to live. That said, we also use Features, Drush and Capistrano for many of our deployments.


I've felt that way for a while, to me using a framework for a website is wasting time reinventing the wheel and you also end up leaving out alot of features you'd otherwise have in a framework.

This is an interesting point and I say it's more valid for frameworks with a better language as a foundation. Radient (Ruby+Rails) and Plone (Python+Zope) I think would be two other examples.

However that said, I think the true value of a CMS is in the community and the ubiquity of the technologies. PHP is far from being an ideal language, but it is everywhere and its Apache integration is second-to-none. Many, many more people are comfortable with php because of it's similarity to C - which is probably why you see such a huge number of open-source CMSs built in that language.


I think Drupal8 could be a step in the right direction towards making Drupal more frameworky which might please some critics who work on real custom stuff that don't need a CMS.

A good example is that I used to do applications for state government and Drupal wasn't a great fit for that for several reasons. A small-core focused Drupal would have been lovely. Drupal underneath is really nice so if you can decouple things like the user system then that might give you 1 CMS/framework to rule them all and wouldn't that be lovely?!


i think i couldn't agree with you.
many CMS easy for general purpose and general user. But base framework more flexible for developer, so framework will be still exist side by side


Using CMS as a base for your work is not secure, hard and not considered a good scenario.

And to people who think that Drupal is the best, I have never worked so hard to make some basic functionality out of Drupal.


I know that yours is a common gripe of developers, however there is another side to the coin. I can't tell you how many times I've been able to make something really complex work with minimal effort, and no coding. For me, that's an incredible savings and allows me to get to work.


For me, the idea that a framework is not the better choice when creating a "website" is not new. Frameworks are especially useful for create web applications, CMS are more useful for creating websites. This reasoning follows a simple principle: There is always a right tool for the right job. Frameworks were never made to create "websites".


CMS and Frameworks like CakePHP are very very two different things.
Drupal it's the best choice for CMS, but can't be for all the things.
Like Aziz already say, "There is always a right tool for the right job."
You can't be so radical.


It's a radical statement, but we've done development using a variety of different frameworks and CMS'. For 95% percent of projects that come in the door, using a framework vs. using a CMS (Drupal specifically) is a waste of time/money. Using a CMS is hard, but once you've overcome the learning curve the benefits are tremendous.

That said, there a very few projects that may not be the best fit for a CMS - something like GMail or Quickbooks comes to mind. No matter what you start those projects in, you're looking at investing millions of dollars and that means your starting point matters less.


Well, obviously, if your looking to manage content, a CMS is perfect, but if your doing anything more complicated, like building a backend in php and a front end in flex, well, drupal is just wrong.

Your doing web developpement, most probably your right about your job and your projects, but the tree is hiding the forest.


Excellent point. If your interface is completely unique, the benefits of a CMS is limited - although it may be a win for administrators. We don't do any Flex work, but there are a few articles I found about using Drupal+ Flex:

http://devzone.zend.com/article/2660
http://buytaert.net/drupal-and-flex
http://groups.drupal.org/node/7989

I can't speak to it personally, but it might be worth some investigation.


CMS sucks!!..)) RAD frameworks like ror, django, symfony are future CMS it's a past. CMS it's a whole bunch of s**t. Code from different devs .. ha-ha. None respected company ecpecially IT company don't be using CMS. CMS security is sucks to...


I agree that unless you're creating business logic, then a CMS is definitely the way to go (in the language of your choice). However there is, as always, a middle way. Depending on the project, I tend to prefer taking the CMS and injecting new business logic into it with a combination of JavaScript and a framework, with the CMS acting as a candy shell to keep everything tidy. My personal combination for this is Wordpress with CodeIgniter and jQuery, but to each their own.

The real exception that I would take to your post is your choice of CMSs. Drupal (unless it's changed radically since I last looked at it) is complex and requires you learn a whole new quasi-language. Joomla is bloated beyond belief. Concrete5 and ModX are both horribly documented, etc.

At least with a framework, I know how to take it apart, as opposed to a badly-written CMS, which might require just as much time to decode as it would take me to code it straight up.


Beauty is in the eye of the beholder, but if I can build something with more functionality, a better interface and fewer bugs, in a shorter period of time, that's pretty definitive. I've found when working with a CMS, it's about up front investment of time, that pays off in spades on the back-end. There's a (smaller) learning curve for frameworks, than there is in writing things from scratch - modern open-source CMSes are just the next step in that evolution.

PS. Drupal has probably radically changed since you last looked at it, but I doubt it's any simpler - just better.


I don't know much about frameworks but I know php very well and I have been using it without oo. I learned Drupal and It is complex, unstable and restrictive. However it is the best CMS. For example creating a theme requires knowledge of how the various ways you could theme system. Modules have their own themes. The sites has its own, themes can be function or template based. On top of that if you are to use hook_user, $account etc you will encounter with a lots of security issues such as access, roles and permission. If you are to add functionality via contributed modules then you are risking the live site. Example I installed profile2 module which damaged the view module. Basically after more than a year of learning drupal I came to think, it is much easier to just hard code the website using the traditional php scripting. Now creating websites is getting more complex and websites today are more or less are applications software in their own rights.

CMSs are UI oriented and very restrictive to developers and learning it is harder than learning a totally new programming language. It is great for quick marketing sites or a site that will only be customized "only the look" and will depend totally on contributed modules. If I am going to build a commerce site then I will either choose a specialist commerce CMS cart such as zen cart, or go for a framework.

I have used ubercart, it is great if you are going to use the conditional argument but this in itself is not good idea from a code management point of view.

Is it worth learning a Web Framework? if yes which one is recommended? using php scripting now is not an option because web applications are becoming demanding.

Technically I don't need most of tools with drupal, up until now I don't understand Views and I find it easier to use sql.

One another point to make what the difference the module forum offer in terms of class of content. Nothing new it is the same as creating a basic page with a different look. Basically you can achieve the condition of forum using no more than the basic page.

What I hate the most about drupal is the field module formally known as cck. Imagine a field is created by creating a totally new table. so for each field you add to the node a table is created. Not practical, just open the database and see the 100s of tables for no good reasons. In terms of design, cms are badly designed and too much if you are after performance.

I tried Joomla, wordpress and others however, if I am going to choose a CMS then it has to be drupal because it is flexible in comparison to other CMSs and it has a rich user interface that aid the development time. However the more complex the site is, the more that there is a need of custom design. I think it is time to learn a framework.

Can you tell me what is the best framework?
Please excuse the spelling and grammar mistakes as English is not my mother tongue.


If you're using a CMS for more than content management, than you ARE using a framework - even if it doesn't have a name.


Many CMS systems are becoming frameworks in their own right now. What about CMS systems built on frameworks?

Not everything is about content. I've done a lot of work for companies who originally had their "bespoke" systems made in Drupal/Joomla but the development costs to change basic things were overwhelming for them so they turn to a bespoke system made in a framework.

A framework makes sense and they're all maturing to a point where the area of CMS/Framework is becoming even more blurred. There are many plugins/modules you can throw into a framework to support a CMS system now without much fiddling.. Then you can do all your bespoke development as you normally would.

Square peg in a round hole doesn't always work.

If you're on a tight budget and limited time then I guess a CMS is a good solution. Personally as a web developer I want to code. I don't want to be just stitching random modules together to make them work and do a half-assed solution to my clients problem.


I think the point of a CMS as a framework is an important distinction. The term CMS is used to describe stand-alone closed source apps, which are more dead-ends than anything else. To meet my definition a modern, open-source CMS should include:

  1. Functionality out-of-the-box
  2. Access to source (open-source)
  3. An extensible framework
  4. A community

I would argue that wanting to write code, is a really bad reason to reject a CMS, in the same way that four to five years ago it was a really bad reason to reject a framework. If you care about value for your customers, you really owe it to them to use a tool that will reduce development time and increase the quality (fewer bugs).


Anyone recommending to people that they stop coding either doesn't know how to code themselves or is blundering idiot.

I'm sorry to take it out on you but I'm tired of people telling others how they should operate especially when it comes to learning new things. We should all strive to make our own code and then share what we learn with others. telling people not to code is like telling an artist not to use paint.

Give it a rest already and learn how to code.


You can't make a statistical point based on the number of projects that you see. You are simply in a market which is generally served well by using a CMS versus building one from scratch. There are also shops out there which see the opposite numbers because they are in a different market (especially prominent Rails developers considering there are no Drupal equivalents in Ruby that I know of.) I suppose this mostly depends on how you market yourself.

As others have mentioned, you need to use the right tool for the job. A CMS will never be the right tool for all jobs (or at a great enough percentage that it no longer makes sense to continue building frameworks.)

Generally I see the dividing line sitting between web applications and business portals which often seem to be not too far removed from the days of brochure sites. As an example, Facebook probably could have been originally built on Drupal. Eventually that application would have evolved itself out of Drupal due to scalability issues and feature changes. A great example is the story of how The Onion moved from Drupal to Django.

In some cases, an application has requirements that so little of a CMS could serve that it just makes sense to start out from scratch. However, I certainly wouldn't want to have to build a CMS for every client site which comes through the door. Generally the demands I see for timeline, budget and features call for a CMS, but again, that's just my market.


Don't get me wrong - Ruby is way cooler than PHP. However, PHP is ubiquitous and very accessible. This means you have a lot more people writing in PHP than Ruby, thus you're going to see more CMS and larger communities in PHP. You could check out Radiant:

http://radiantcms.org/

...but it's not quite at the 1.0 release.

Regarding what you are seeing in the market demands for CMS - this is not an isolated phenomenon, it is a sea change. The bar for what consumers and businesses are expecting to be part of a website has gone up dramatically in just the past few years. And not coincidentally, the things that people are demanding (CMS, blog, search) are baked into these opensource platforms. In short, I don't think it's just your market.


If you think about very home office solutions where the client is not interested in extensibility, maintainability, security and much more from the field of enterprise requirements than you are right.

, you are totally right.
I


From what I've seen, you have this backwards. The great era of the CMS was 2000 - 2006. The CMSs were overly rigid, so frameworks came along to replace them.

Back in 2000 there were CMSs like MoveableType and PHPNuke and, on the high end, stuff like Radio Userland, and then on the very high end there was Vignette (which cost over $100,000). Around the year 2000 the big criticism of CMSs is that they were too expensive. Then there came a flood of open source CMSs. An important turning point is when MoveableType raised their prices in 2003. This lead to a lot of development of open source CMSs such as TextPattern and Blossom. Out of all of this activity, there eventually emerged WordPress and Drupal.These eventually got to the point where they were able to offer features that were comparable to what Vignette had been charging $100,000 for, but WordPress and Drupal were both open source.

Nevertheless, the old criticisms of CMSs remained: too rigid. Thus, in 2005 Ruby On Rails ignited intense interest as a framework, and lead to a lot of work on frameworks in almost all languages. And that continues to this day.

In so far was when to use a CMS, versus a framework, and how much each tends to cost, more information is here:

http://www.teamlalala.com/blog/2008/11/12/how-much-do-websites-cost/

Hi Lawrence,

I absolutely agree with you about the bygone age of the closed source CMS. Some people are still sinking money into them, but it's a losing proposition. As far as it being the age of the framework, I think it is very telling that the article you posted is from 2008. About two years ago is where I really saw a turning point in building on an open-source CMS vs. a framework. And we've used our share of frameworks: Rails, Django, Zend, CakePHP, Symfony - and we've even had our own home brew.

The CMS-Framework (as I probably should be calling it) is really a different beast and is well-worth investigating if you're still using a more roll-your-own framework. Drupal specifically has saved us a TON of time in development and QA and is well worth a week or so of investigation/experimentation.

I took a look at Apostrophe and it looked pretty cool! Very intuitive for an admin, which may be the most important factor in adoption. It seems young, but it looks promising.

That said, I like a CMS that has its own community and framework. It really shouldn't matter what their built in, just like it shouldn't matter that PHP is built on C.


So for an update... The framework isn't dead. It's just sitting behind the CMS systems ready to break out some smooth moves when you want to put some plugins/modules/changes together.

I'm guessing this is the 'year' of the CMS-Framework.


I have been custom Apps for a while now, usually using WEB TCL and perl, so what is the actually learning curve for a CMS I have poked around at Rails but always found Frameworks Restrictive, I have tried few other frameworks, again it comes down to usability I can normally find TCL and Perl on almost ever *nix box out there that runs Apache web servers so what is the learning Curve for CMS comming from my background?

Hi James,

Excellent question! I'd say it takes at least a few days to even tell which way is up (in Drupal especially). In a few weeks, you can see work sped up, but you're likely going to do things less then optimally for at least a few months - but you'll still be much faster. Once you've got a few years under your belt, you'll be a wizard.

Joaquin


I've heard and agree with the idea that Drupal is a framework, functioning as CMS. And when building a website, why not start with something like Drupal, and contribute to making it better if it doesn't 100% fit your needs. It won't work for everything under the sun, but it can do quite a lot.


I've used Drupal for 2 years now and I enjoyed it as a web designer because of CCK, Views, and Image Cache. You can really architect information in Drupal.

However, Drupal has a few nuances that just won't float for all designs. I would say Drupal brings you about 80% of the way. It's that last 20% that makes your website better than others though.

Creating a custom website with a customized Admin UI definitely adds value for a customer because THEY will love using their new web application instead of hating how Drupals admin UI is laid out.

Drupal 7 admin UI improved, especially in listing content. How Drupal 6 didnt have that simple functionality is rather ridiculous.

Drupal is also slow for people logging in because it stops caching. Wow that sucks, now people who were enjoying a relatively fast website are now downloading huge pages with 50+ http requests. Awesome....

Drupal is the best open source CMS if you need to architect information and do not have a PHP/SQL developer to assist. But if you got the time to learn how to reinvent the wheel, you'll be driving your designs further than you ever have and your clients probably won't hate you for giving them something they don't like to use.

So sorry to say but I disagree with you. As a former Drupal user I'm aspiring to use Frameworks more. You're going in the wrong direction in my opinion.


Totally agree with the previous comment..
If you know how to code then you should go for a framework.

Drupal 7 is waaay too slow.
Big bloated beast...if you put d7 in shared hoting without apc and your site starts getting traffic you are doomed:/


Agreed: Drupal does not do well in a shared environment.

So, if you're goal is a small website that does well in a shared environment, Drupal isn't for you. Drupal does require a certain amount of configuration and hardening to perform well, but I see this as a very worthwhile trade of when compared to the cost of developing a CMS from scratch or even from a framework.


i disagree for this framework is better then cms...


It really depends on what you want to accomplish. I see it as a trade off with the framework being a better solution for problems that have been encountered by other people. If you are really doing something that no one has ever seen before, more power to you.


Thanks for this excellent article with all comments, it opened my eyes on Frameworks as an alternative to CMS. I am struggling since a few days searching for a moderately easy solution to implement a CMS for a quite simple and rather static site, but with a very specific Backend for a client and it looks like no existing CMS can do the job. I'd like to find a CMS that has no Backend UI at all - only a well documented CMS API, with all necesary CMS functionality that I could easily use to create my own Backend UI, and add to the UI some client-specific behaviour and functionality. Perhaps it will be better to use some Framework than hack into existing CMS and rewrite their UI.

About the Author

Joaquin Lippincott, President & Founder

Joaquin is a modern technology veteran. Throughout his career he has built successful digital strategies with a wide assortment of transformative technologies and platforms, helping clients identify a clear path for success.

Over the years he has worked with industry leaders such as DC Comics, the Emmys, Intel, Technicolor, Verizon Wireless, Habitat for Humanity, Limewire, the Linux Foundation, Sony Pictures Television, Mercy Corps, and Cisco as well as numerous small businesses, advertising agencies and internet start ups. With over 14 years of experience in his field he is still as passionate about technology as ever.

Joaquin is a graduate from UCLA with a degree in design and has also served on the AIGA Portland chapter board as President.

Twitter: @joaquinlippinco

Interested? Let's talk.