When do CMSs make sense?

github logo ・1 min read

I'm having a hard time figuring out the right use case for Content Management Systems. At first glance, everything is about content, so why don't we build everything in Drupal/WordPress/Joomla, etc., and bolt more things on top? But then, there are specialized tasks that some applications perform (chatting, file storage, etc.) that are best done the custom way and then optimized.

When do CMSs make sense? When do they not? Will it be a good idea to build a Basecamp clone in a CMS?

I'm looking forward to a fruitful discussion on this.

twitter logo DISCUSS (12)
markdown guide
 

Trying to understand a "CMS" by using Wordpress as an example won't get you very far. Wordpress is a blogging engine, not a CMS. The core product only understands blog posts and things related to blog posts. People call it a CMS because it has a huge library of plugins which attempt to bring in other ways of modeling content, but they do not extend the Wordpress concept of content, they simply patch in their own. Wordpress itself only models blogs. Wordpress is not a CMS.

</soapbox>

What is a CMS for?

Also, a CMS is a "content management system". The theming capabilities available in Drupal, Wordpress, Joomla, or any other "CMS" really aren't as important to a real CMS as the admin interface is, at least in today's web landscape. In fact, most of these systems have adopted an API-first approach to their content management, with a lot of newer CMS completely ditching the theming support altogether. A headless CMS does exactly one thing: provides a UI for someone to structure or manage content, but doesn't care at all about the theme.

Not long ago, CMS was synonymous with the website. Nowadays, it is common for the content in a CMS to be published across many different channels: websites, mobile apps, advertising, targeted email campaigns, etc. Today's CMSs are designed to make it possible to host all that content in one place, and let various systems consume that data however they need to in order to get their job done.

Why would a business use a CMS?

The answer is pretty straightforward: business people, marketing folks, SEO experts, and the like either don't want to or don't know how to build a website without one. They aren't programmers, their job is to make and publish the content. A CMS is designed to let these non-technical users just create and manage their content without thinking about the techy stuff underneath.

Why would a developer set up a CMS for a client?

Developers are lazy[citation needed]. They have other things they would rather be doing than taking a client's word doc and converting it to Markdown so that an SSG can publish it. They don't want to waste time with data entry or fixing typos. Those are the jobs of the business folk I mentioned above. By giving the business a nice, pretty CMS, he can continue to be lazy and focus on the fun stuff around web development.

Why would a developer use a CMS for himself?

Again, because developers are lazy. While some developers are more comfortable writing blog posts in Markdown, one may simply prefer to write in a WYSIWYG editor.

In addition, a good CMS will put constraints around the data you are entering. Front Matter won't tell you that you spelled "title" with two "i"s and you'll be scratching your head for a while wondering why the title of the post isn't displaying correctly. A CMS gives you strict guidelines so you can only enter valid data, and you have greater assurance that your content is set up properly before you go publish it.

And did I mention that developers are lazy? Yeah, sometimes it's just easier to set up a single CMS that manages both content and themes and not have to worry about setting up triggers and deployment pipelines. In this case, I would recommend October CMS as the CMS-of-choice for developers. It was tailored to the developer (unlike most CMSs), which allows the developer to turn it into the perfect product for the client. If you are the client, then you just get to have a ton of fun tinkering around with a really easy and powerful batteries-included web framework.

 

Fully transparency, I'm the Co-founder of TakeShape, a headless GraphQl CMS.

TLDR: It's not a good idea to build a Basecamp clone on a CMS. CMS should be used when you're managing content, but probably not user generated content. Consider JAMstack over tradtional tech stacks like LAMP. Use a headless CMS instead of a monolithic CMS.

Casey did a thorough job talking about CMS, so I'm going to come at this from a different angle. Also, hat tip to the use of the soapbox element. I'm going to use it here :)

<soapbox>

The Big Question
I'd like to start by addressing this question - "why don't we build everything in Drupal/WordPress/Joomla, etc., and bolt more things on top". I think this question is one of the biggest reasons why we are where we are with CMS today and why there's a real opportunity for changing how we build things by adopting the JAMstack, JavaScript, APIs and Markup. More on the JAMstack later. The WordPress / Drupal / Jooma approach is the monolithic approach to building.

You're exactly right in your description, you're bolting on more and more services and functionality until you have the application you wanted and you're doing all of this on the server. This results in worse and worse performance and more and more opportunity for security vulnerabilities for your application. The trouble is that you're adding on to platforms that were designed for a specific purpose, to manage content, and in the case of WordPress to manage blog content. WordPress is not an application platform, no matter how many times you see people using it in this way. You can bend these systems to your will, but they're more likely to break your spirit while you're doing it.

Compose Your Application Close To Your Users
Enter the JAMstack. When you're building with the JAMstack you're shifting where the functionality of your app comes together, from the server to the client. You're composing best-in-class services together on the client to make your application, rather than using whatever is available to you in your monolithic server app. You might actually already be part way there, think about a commenting system. If you used server side commenting and had a popular blog you'd be in some serious trouble unless you had a beefy backend, not to mention the expense of running a beefy backend during slower times.
Almost no one uses WordPress built in commenting, everyone uses a third-party commenting engine loaded from a user's web browser and rendered on the page with JavaScript.

Getting on the JAMstack

  • Prerender you HTML using a static site generator (don't discount this even if you're building ugc app)
  • Make your front-end dynamic with React or Vue.
  • When you're tempted to use a server, look to using Functions-as-a-Service.
  • Use best-in-class services for things like, commenting, forms, e-commerce, auth, and yes even CMS, that can be delivered directly to your users' web browsers.

</soapbox>

 

Thank you so much for the detailed reply. I checked out TakeShape and was completely blown away! Still, I have old scars and am not going to quickly jump on to the hype train. I used to think JAMstack was another buzzword, but this has really opened my eyes to new possibilities. I will definitely explore TakeShape (and JAMstack) more.

 

There's a great conference for JAMstack that just occurred last week. I wrote up a bit about the happenings there takeshape.io/articles/two-days-at-.... If you start to get into the JAMstack more definitely check out the conference! Lot's of friendly people in that community. It was a blast!

 

When a CMS makes sense to me is when non-technical people need to be able to update a website. But the CMS is only for the local version of the website to test new content. When they are ready to push the site into production, a script crawls the CMS site and downloads it into static files, and deploys those to a CDN. That way your actual deployed website is static, not dynamic. So it loads fast and does not inherit the attack vectors from the CMS code. I haven't actually done this yet, but I read about it.

I definitely would not use a CMS as a framework for developing a custom application. It will fight you every step of the way, because it is trying to solve different, specific problems.

 

I've had a trend at work these past few years where I'm not using a CMS for the front-end at all, anymore.

Usually it has been, of late, just a way to manage content that then gets used as a datasource for another application (web or otherwise).

 

So a quick-and-dirty data collection front-end of sorts? Makes a lot of sense, actually! 🙂

 

So, I'm someone who's worked in both custom application stacks and what functionally amounts to applications being built on top of CMSes. A lot of it comes down to the life cycle of the application and who'll be maintaining it.

For complex custom build projects, a lot of those have been in-house applications that had a full engineering team to maintain them. Meanwhile, working in consulting, where we're often transferring control of sites to a client team, we often build websites on top of a flexible CMS like Wordpress, or do a custom build with a CMS plugin (e.g. OctoberCMS for Laravel) such that it's easy for a client content team to maintain.

Some of it also depends on where you want to allot your time. For a while I had a custom database API setup for my personal portfolio website, but it was getting to the point where entering content was just a lot easier with an actual CMS (Craft, in that case), and the point was to have an up-to-date website of my work. CMSes make a lot of sense when a lot of the maintenance work of a website is adding and editing content (hence the name, I guess?), rather than changing functionality.

 

A CMS is good for professional companies with no (time for or clue of) actual IT. Most people who use a CMS were perfectly happy with a simple (or less simple :-)) blogging tool instead. I still count WordPress as a blogging tool, even with its sophisticated pages system.

 

A CMS is good for professional companies with no (time for or clue of) actual IT.

So if someone wants a typical news website, it'll be better to code everything again instead of just using what exists in good CMSs (Craft and Drupal come to mind)?

Most people who use a CMS were perfectly happy with a simple (or less simple :-)) blogging tool instead.

Agree. I've been regretting using WordPress for my personal website+blog, but I feel too lazy to move now. But, then, blogging is not the only legit use for a CMS.

 

"If someone wants a typical news website", a CMS is a good choice (unless there is a lot of IT knowledge and free time available). I wouldn't call Drupal a "good CMS", but that's on you.

 

If the model of what you are going to be build is anything bigger or more complex than a "post", then a CMS doesn't work.

A newspaper, the news are the posts, the posts has likes.
An band site, tours are a type of post, albums are another and so on.
A football league SaaS, a team has players, players have scores, numbers, roles, etc. A team is on a bracket, a team play against other teams. Team and Player can't fit in the post scope.
Your are doing an HR system. A worker has workhours, vacations, payments, social security... again is not a post.

Classic DEV Post from Feb 6

What's your goto motivational quote?

What's your goto motivational quote?

Ankush Thakur profile image
Whimsical INTP programmer. Code PHP and JS for a living. On friendly terms with many other languages. Easily angered; easily consoled. 😛