If you've ever held an office them, then you've seen them. And you probably hate them. I know I do. I've used everything from Drupal to Wordpress to Ektron and back and all I can say is, it's the reason that I quit programming for companies and decided to go solo. Using a CMS is fun and exciting at first, from a management perspective. But from a programmer's perspective, there are very few things that are less rewarding.
So today I'll be going over some of those pitfalls and going into detail, along with some personal work horror stories.
For one, they're everywhere
I'm sure that most websites online today use a CMS. Wordpress more than likely. It's free and easy to setup, so why wouldn't you want to use it.
Nowadays it's pretty simple and quick to get a website up and running with minimal effort, and more importantly without the least bit of technical knowledge. There are dozens of products out there that will do the heavy lifting for you and most are free. A CMS (Content Management System) is an application that allows for, you guessed it, the management of content. For those unfamiliar, a few of the most popular CMS's are WordPress, Joomla, and Drupal and they're used by millions of websites all over the world. For the most part they're pretty complex templating engines that allow for wide customization and can be extended with thousands upon thousands of modules. So I'm not bashing them in any way. If you need a website, and you need one quickly, then this is probably the best route.
Having said that, this 100% depends on the type of website that you're going to be building. CMS's are great for blogs and admin pages, and pretty much anything that has to do with content. Many sites nowadays however, are anything but that. Take Facebook for example. Facebook needs to be able to handle over 1 billion people per day. It supports videos, images, text and chat communications, plus dozens of other things that I've never gotten around to looking into. It is a 100% custom built project with thousands of moving parts. It has complex and advanced algorithms and many many people working hard making sure that it stays up and running. You can't do that with a CMS. At least not for any that are being built now. If you're project is a 100% custom from the ground up idea that you drew on a napkin, then a CMS is not for you.
First, The Good
One of the main drawing points for using any CMS, is that pretty much anybody can use one to manage and maintain content. Many startups begin by using CMS's because it's cheap and comes out of the gate with many of the features that they might need. You have many to choose from nowadays, each with their own pros and cons. Wordpress, Joomla, Drupal, Ektron, etc etc. You select New page... and write your content and hit publish and boom, new webpage is out. They make perfect sense for some use cases. Say you have a blog and a pretty nifty theme that you installed. You can have that website up and running in 15 minutes. There's tons of plugins to browse through and install, and best of all, for the most part, it's pretty much free. You don't have to hire anyone to work on it as you can just drag and edit and click your way around. Here's a screenshot of a sample Drupal site and its page entry screen.
If I had to build this page, it would of taken me a bit of time to implement. There's lots going on here and this is out of the box functionality.
Changing the look and feel of your sites is just an install button away. I'm just using Drupal as an example for now, but for the most part every CMS has these same features.
If you're not very technical, then CMS's are very very cool. You can pay 20$ for a template and you are good to go. And if you're an up and coming business person than you may think that this is the perfect solution.
And Now Sadly, The Bad
They're ease of use to the end user is what makes a CMS such a disaster in the bigger scheme of things.
It's mainly because, from a programmers standpoint, they're hard to maintain and add features to. Sometimes, it's even impossible. Any successful website nowadays, will require some really custom software in order to run. The problem with a CMS, is that it's already in itself a really complicated piece of software. If you're a PHP developer you are NOT a Drupal developer, I'll just say that right now.
They're bulky and sometimes slow
Because a CMS needs to accommodate any number of scenarios and users, they're usually packed to the brim with out of the box functionality. Whether you use it or not doesn't really matter as it will be included anyway. As an example, I've recently worked on the Ektron CMS and it's latest version offered many many changes from the previous. Those changes included bundling a version of jQuery and requireJS into the page. Needless to say, this caused many many issues. And after hours of looking for a way to prevent that, I gave up and realized that I'd just have to hack around it to get other code to work. And at the end of the day, this relatively simple webpage that was comprised of some text and an image ended up taking 2-3 times longer to load because it needed to run a list full of checks in order to render.
They're easier to spam and hack
The main reason for this, is that anyone can download these frameworks and take a look at the code. If you find one vulnerability hidden somewhere, than it is safe to assume that the same vulnerability exists on other websites running that same framework. This is the same for spam in comments. On my own personal websites with custom code I never get spam. A week after working on a WordPress site however, in rolled the random messages about foreign kings and free money. Bots know how to spam WordPress, they just do.
They're too complex
Making it simple for users to add content and widgets on a webpage, is surprisingly very complex. When adding a new feature, you normally can't do it in the traditional programming sense. You have to do it in the way that the CMS expects you to do it. Which equals more developer time and in the grand scheme of things, more money. Making a small change to a page can end up costing hundreds of dollars in developer time, as they wade through the thousands of lines of code that humans aren't meant to understand. In my line of work I get to work on dozens of websites and they're all built in entirely different ways. And the one thing that's always prevalent is that maintaining a CMS that has been hacked for years is the most painful thing ever. A simple change, like updating the title on a page, will lead through a long and arduous journey that will end up in some dynamically generated page. Or even worse, sometimes it ends up in the database in some inconspicuous table named "_page-control-template".
Let's say for example that I needed to add some text to the right of the title:
My main issue here would be that I have no idea where to look for this page. I have no idea if it's generated dynamically, or if it's in the database, or if there is an actual page that I can reference. And I can vouch for this. After 20 minutes spent looking for it, I've given up. I can probably use Google to find the answer, but in the end, I'd end up Googling every single little change that I needed to make.
As I've said before, a PHP developer is not a Drupal developer. In the end you'll need to hire someone who is an expert in that particular framework, and believe me, that's not cheap. And mainly because nobody wants to sit there and learn a CMS as their career. I've seen job listings looking for "WordPress gurus" and "Joomla Kings" and I can personally say that I've never met anyone fitting of that description. A CMS is something that you pass through in your programming journeys, and something that you end up warning people against later on down the road. The more complex your business model becomes, the more you will notice the drawbacks of using a CMS.