DEV Community

Cover image for You don’t always need a CMS
Chris Bongers
Chris Bongers

Posted on • Originally published at daily-dev-tips.com

You don’t always need a CMS

When it comes to websites, blogs, and whatnot, we often expect to find a CMS power these systems.

I get a lot of questions about what CMS powers my blog.
And I'll explain that while telling you why you don't always need a CMS.

What is a CMS

Let's first take a look at what a CMS is. It stands for "Content Management System", and as the name implies, it can be used to manage the content for a website.

Some famous CMSs are WordPress, Contentful, Wix, Shopify, etc.

There is a big rise of "headless" CMS, which means a CMS that serves as an API.
You have this system in place, and your website calls this API to retrieve the content.

CMSs are great for people who want to edit content and don't particularly know what to do with markdown, uploading files to a server, etc.

So when building websites for clients, it's often an excellent solution to pick a CMS that works for them.

What I run my blog on

I run my blog on a low-tech solution.
It has no CMS, but plain markdown files are parsed to plain HTML and uploaded to a server.

However, this is automated, so I don't have to do that physically, but there is still no content management system to alter the content.

So how does this work, you ask?

I open my project in my IDE of choice (Visual Studio Code, or WebStorm) and start changing my markdown files.
Either you edit the existing ones or create new ones for new blog posts.

Once I'm done, I push the changes to my git branch, which automatically triggers a GitHub action.

This GitHub action starts the build command on my Eleventy project (soon to be Astro), which converts all these markdown to HTML output.
Once this process is done, the HTML files get placed in a "static" branch.

Which trigger Cloudflare pages to pull the latest changes from this branch.
Cloudflare will do a git pull on this branch, and voila, the new changes are online!

This all happens in about a minute or so.

Why you don't always need a CMS

And for me, that's the main reason I don't need a CMS. It can be such an over-engineered solution.

I like to write content, markdown is the easiest way to write anyway, so I prefer it.

And once the content is written, I don't want to hassle with logging in to a system, copy-pasting the content and pressing publish.

(Although this is roughly the same amount of time)

Another downside to these systems is that they need upkeep. The CMS gets a new version, and you need to update it.
Something goes wrong, and you won't be able to push new content.
And worse of all, they can get hacked, meaning your website could be at risk.

Not saying it's impossible, but a static website is harder to hack. You would either need to hack my GitHub repo or my Cloudflare account, which are quite complex challenges.

Conclusion

I don't want to hate on CMS. They are a fantastic system that should be used.

But if you are a developer, consider if you need it?
Perhaps you can make your life easier, but going low-tech as well.

Thank you for reading, and let's connect!

Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter

Discussion (47)

Collapse
jpkeisala profile image
Jukka-Pekka Keisala

You don't always need CMS if you are a developer. But if you are building a website for a customer that doesn't know what is markdown or html you need a CMS.

Collapse
luizhap profile image
Luiz Henrique

I agree with you. Netlify CMS works great for this case.I agree with you. Netlify CMS works great for this case, because it generates the markdown file behind the scenes but there is a "self-hosted" CMS for people who are not developers.Is there a tool that does this too?

Collapse
matthewbdaly profile image
Matthew Daly

One common issue I have experienced is that some clients then decide the CMS is too difficult for them to use, and leave it to the developers to update. So you then end up with a solution that the client isn't willing to use, but is also suboptimal for the developers.

Case in point, at work I got asked this week to add some new blog posts to a Drupal site, because it was too complex for the client to manage, but it was a chore for us because the client provided everything in Word documents, meaning we had to spend ages copy pasting content and adjusting formatting for stuff that would be a breeze if we'd been able to set it up to allow Markdown. As someone who suffers from RSI, this got painful for me very quickly.

Collapse
dailydevtips1 profile image
Chris Bongers Author

I definitely been in your position Matthew 🤦‍♂️

Collapse
dailydevtips1 profile image
Chris Bongers Author

Exactly the point "not always" 🙌

Collapse
sheriffderek profile image
sheriffderek

I hear a lot of people saying they don't need a CMS. Most of my old WP clients would email me a year later revealing they'd never even logged in to change anything! haha. I could have saved a lot of time/money - and just hard coded most of them.

But for devs I think it's different. We can write in markdown. Platforms like this get a bit of easy street in that way. We do it here in Dev.to, Slack, Discord. We can jump into Liquid or whatever language. My mom isn't going to do that.

But also, most dev blogs seem to be white single columns of content. See Josh's blog for an example: joshwcomeau.com/blog/how-to-learn-.... It's great. It has text and pull quotes and videos. But - it's also a bit constrained by the markdownness of it. What if you needed a big interactive area - or even just a different color background on the section. (that example is chosen for visuals not the actual code)

But then, I also see that they are using a ton of build tools to take markdown and generate the 'stuff.' There are a lot of static site generating options. But they often involve React and a build pipeline. Nothing wrong with that. But - it jumps up in complexity quickly. You could also totally use WordPress's json-api - and consume it with 11ty or whatever is hot - and get the same static site out of it.

In the course I teach, we chose to use PHP to start and build a JSON driven site server-side version of a site. Then use the same JSON to build the JS version and compare. I wouldn't have expected this - but the PHP site is super fun to build. I'd suggest that anyone who is learning this stuff slowly work through all of the options. There's a very clear point when the CMS becomes a huge win. (if you're project isn't just a bunch of text in a column)

Having the info in public version control is pretty great too, because people can help you updated it.

Digging around in the WP CMS is certainly the bottleneck to my productivity. The interface/chrome is hard to parse and toggle - but - so, is using Prismic - or Contentful or any cloud CMS. Just having a JSON file has been really fun. And that way - I can work with as many custom sections and loop through dynamic page sections without being constrained by markdown. If the site is simple enough (like how these are just chunks of content) - it's pretty fast to build your own limited CMS too.

Thought dump complete. hahaha

Collapse
dailydevtips1 profile image
Chris Bongers Author

Ah yes, it does limit one, although most markdown also includes jsx/components these days, which brings back a lot of flexibility.

Fun thing you mention making CMS's for people that never use it.
Can't even count the number of website i've build on some kind of CMS, just for me to change the content anyway 😂

Collapse
renanfranca profile image
Renan Franca

I totally agree! I'm new to this no CMS world and as a developer I loved It 😍

My blog was build using Jekyll.

I explained how am I update it using my phone and I shared short videos doing that

Collapse
dailydevtips1 profile image
Chris Bongers Author

Wow awesome read Renan 💖

Collapse
renanfranca profile image
Renan Franca

Thank you 😊

Collapse
sectorfive profile image
Christian Knoll

Very good point. Custom CMS systems seem like such a good idea to create and add to a client site, until you start developing it :) You have to create the interface to change the content, add considerations for page style and if there will be an image, image crop and save, interface for the client to change their password, etc etc. Even a headless CMS has the issues you mentioned and aren't a time-saver if you compare to a solution which automates the mundane parts, like you mention above.

Collapse
dailydevtips1 profile image
Chris Bongers Author

Yeah it all depends on your needs, and the needs for the project.

I've build some amazing, simple CMS's that do one particular thing really well, like uploading house information, and nothing more.
But like you said, there is always that "oh just add this as well" factor.

Collapse
sectorfive profile image
Christian Knoll • Edited on

Tell us more about this use case and maybe the stack? I seem to be stuck in "CMS equals Wordpress Blog" definition of CMS. I was trying a way to have a CMS for my client to update their page content - and the first step was making the site take in a JSON object and build the pages. I made a proof-of-concept in Angular (link below) which was fun, but then when I tried to put it into practice with a client's site, I realized it's not a good solution to put each element into one JSON file. I think I will just use Markdown next time.
stackblitz.com/edit/ck-dynamic-con...

Thread Thread
dailydevtips1 profile image
Chris Bongers Author • Edited on

For this particular one I used Kunstmaan (A Symfony based CMS) and customized it for the needs of the project.

It really depends on the stack en needs for what you want to achieve.
There are countless CMS's out there.

You might also be keen on learning about headless CMS or CMS as an API systems like Contenful.

Happy to explain some more if you'd like, or look at your needs.

Thread Thread
sectorfive profile image
Christian Knoll

Oh you said you built the CMS so I thought you made it yourself, like making the funcionality in React or Angular or something.

Collapse
lexlohr profile image
Alex Lohr

The alternative you are using is called SSG, or static site generator. There are a few pre-built generators out there, but you can easily roll your own.

Collapse
dailydevtips1 profile image
Chris Bongers Author

Yep, it's not always a non-cms though.
You can have a SSG and still leverage a CMS

Collapse
lexlohr profile image
Alex Lohr

The CMS part is no longer static, so even if you feed a static page with it, the whole thing would not be an SSG in its entirety.

But yes, you can obviously do that.

Thread Thread
murilocp profile image
Murilo Picinato

CMS can be static if it is a headless CMS ;D

Collapse
audibookning profile image
audi Bookning

Thanks for the read and the view.

But i would suggest that you should have defined better what you call as a CMS. This article can bring some "erroneous" misconceptions to the inattentive reader.

For many people, It is obvious that you are using the word in a very limited way, referring mainly to systems like Wordpress, Drupal, ..., and other more modern alternatives like Contentful. But the truth is that CMS are much more than just that. Even the JAMSTACK that you mention as an alternative can be easily classified as a CMS.

In truth even the simple todo app, which is in practice the modern hello-world example for web devs, is in essence a CMS. Many more things could be said about this, the main thing is that a dev may consider not being restricted by some limited ideas that will only hinder him.

That is why a proposed that the CMS definition used in this article should be more restrictive. This way the article would remain relevant and would not loose its purpose (at least what i think is his purpose).

Collapse
sectorfive profile image
Christian Knoll

You're referring to CRUD (Create, Read, Update, Delete) common database functionality, which I guess you could consider CMS because a Content Management System needs to do those things. I think the spirit of the article is that many sources online say you need a CMS, especially for a client site, but you don't necessarily need one. The client may not use it, and as the author states, "Another downside to these systems is that they need upkeep. The CMS gets a new version, and you need to update it.". I have done CMS sites for clients, on their request, because they said they would use the CMS to update the content themselves. But like many commenters here and on other platforms, most clients wind up just emailing the changes to us and not actually using the CMS. But then we have to keep putting effort every year into updating it to keep it secure and fix any problems that break as a result of the update. I think it's important for developers to have an article like this so they can make an informed decision, for instance, I didn't know those downsides when I started out making CMS sites for clients.

Collapse
audibookning profile image
audi Bookning • Edited on

You may have missed my point. I will try to expand on it.

You're referring to CRUD (Create, Read, Update, Delete) common database functionality...

That is what i consider that the author is talking about when he is referring to CMSs, not what i consider as CMSs.

You mention databases in trying to illustrate my point, so, trying to expose my view, i would underline some basic ideas. Those being that just by using markdown one is already managing content. That Data is not synonym of database. And managing is not synonym of CRUD.
(Although i must say that CRUD do deserve more understanding and respect than what he has commonly gotten.)
At this time it should be "relatively easy" to create a simple worpress that just use files as data container (ex: use next and markdown or sqlite?). Easy? Just thinking about making and maintaining the plugin system makes me loose hair...

My definition of CMS is way broader than the quote. And I argue, right or wrong, that it is a healthy point of view for devs to have a "correct" vocabulary (not forgetting that it is ever changing). Engineers depend heavily on vocabulary for effective communication.

I do not consider myself in any way as a good example of effective communication (more of the lazy types 😎 ), but In this particular case I am not concerned about experienced devs. They have the "luxury" of engineer scars. I more concerned about "junior devs" confusing simple things and misunderstanding their power to do whatever they need and want with the great tools they have.
(And to not forget also about some common "unfortunate" twitter/youtube/facebook trends that end up loosing all credibility for too many good ideas.)

tltr: CMS is just an acronym for an engineering (marketing, etc) problem and should not be tightly coupled to some tech stack. By "easily" talking of CMSs as worpress (drupal, joomla, ...) we can only loose power in this all connected, uncontrolled world.

Thread Thread
sectorfive profile image
Christian Knoll

I love how you said "Easy? Just thinking about making and maintaining the plugin system makes me loose hair" haha :)

As you know, CMSs are good at managing content so someone who is not a developer can update content. If you use one, you have to choose between an existing product (Drupal, Joomla, etc) or make your own. As a junior I thought Wordpress was a good choice but as I learned more and used Wordpress more, I realized how bad it was for me. Making my own has the advantage of being just what it needs to be - if the site you are making needs changes only to heading content and paragraph content, then as a developer you can make that happen yourself. You can use a database of course, or you could even just use Node to edit/save to a local JSON file using the Node's FS (File System) APIs. Either way you can make a hidden or password-protected page with a form that allows you (or your customer) to edit and update that content. Then you can solve that problem and it's easy enough for a client to actually use it (versus having your client learn Joomla or something). It's a good level to reach for, but a beginner might have trouble with that. Or you can use a "headless CMS"

Like the author says, it's good to know your options so you don't feel that CMS is the only option. Sometimes you can just add a little money to your project which will buy a little of your time each month if they have updates. Then you don't need a CMS.

Collapse
mcwolfmm profile image
mcwolfmm

CMSs are great for people who want to edit content and don't particularly know what to do with markdown, uploading files to a server, etc.

this is a precise definition and shows when a CMS is used. the other case in which the CMS is used is when the low cost of the final product is pursued (respectively, high profit for the one who prepares it).

in general, the use of CMS is good to avoid.

Collapse
giulia_chiola profile image
Giulia Chiola

Great article! 🔥 I also use your same method: I write the posts in plain markdown, eleventy thinks about the static HTML build and I just have to push to see the changes online.

For me this process was the best solution, perhaps it is not suitable for everyone because it requires a knowledge of static site generators that not everyone has. 🤷🏻‍♀️

Anyway, thanks for sharing! 😊

Collapse
dailydevtips1 profile image
Chris Bongers Author

I'm a firm believer of use what works for you.
Happy to hear it's 11ty for you, amazing system for sure 💖

Collapse
gklijs profile image
Gerard Klijs • Edited on

Indeed, I do something similar for my bass site. In my case it's Netlify running some rustlang to generate the html, and serve it. It uses vados underneath.

Collapse
dailydevtips1 profile image
Chris Bongers Author

Awesome, lovely to here Gerard 🙌

Collapse
nelcapetown profile image
Nel Prinsloo • Edited on

Hi Chris - so much sense and from a fellow Capetonian. I'm also really impressed with Daily.Dev, but unfortunately I'm so busy with work at the moment that I'm in work-work-work, sleep quickly, eat something, work-work-work mode right now.

I had some exposure to Umbraco which runs on top of ASP.NET MVC, but also didn't quite see what a huge advantage it would give one. I know Multichoice runs their entire customer facing site on Umbraco.

Anyhow - perhaps I'll bump into you at some or other meetup sometime soon. This hectic work schedule won't last forever.

Ugh! I think it's time for a bit of sleep. Just realised that this is not on Medium.

Collapse
dailydevtips1 profile image
Chris Bongers Author

Hey Nel, nice meeting you!
Let's hope there are some cool meetups soon in CPT, else we might have to put one together 👀

Collapse
parasparmar profile image
Paras Parmar • Edited on

Funny you mentioned this. My clients recently had no need of a CMS as they wanted my own firm to handle the changes. We built a very simple application on ASP.Net 6 Razor Pages.
It took half the time and and only 2 part-time Devs than if we had implemented Umbraco. Then we had a requirement to update new projects quicker than our standard TAT.
We only put in the needed forms and customisation for the client's Projects. And he was happy to roll on his own.
He loves the simplicity. All his fields are there. He gets what he wants. As someone wise once said.... Nessescary but sufficient and no more.

I agree that CMSs are fine systems. Just needs a bit of foresight to take the decision not to use them. One just needs to retain the capacity to switch into them quickly for larger projects.

Collapse
dailydevtips1 profile image
Chris Bongers Author

Yep, I had a lot of clients in the past that "wanted" a CMS, yet for every little change the would still email me, if I could not just do it for them.

Really makes you wonder why I used a CMS in the first place.
It does cut down on so much dev time.

Collapse
curiousdev profile image
CuriousDev

As @jpkeisala already has written, I think this depends a lot on the project or customer. I am maybe not an expert for CMS, but I guess it also depends a lot on the possible options regarding CMS. If you know the requirements and know which systems can be a good choice, while there will not be much custom development, it can work quite well.
Maybe if you now compare this to CRM (sorry, if this is not a good comparison), I have experienced, that mixing "built-in" features to make customization (low-code or no-code approaches) with custom development (programming UI or server-side) can add unnecessary complexity. Coming back to this topic, choosing a system should happen with knowledge about planned extensions or custom changes to avoid issues because of a bad choice. Maybe it is better to focus on development without such CMS and keep some flexibility. I know this is more about what CMS to choose and not if it should be chosen, but maybe somebody wants to share some similar experience.

Collapse
epsi profile image
E.R. Nurwijayadi
Collapse
z2lai profile image
z2lai

Great insight! I always wondered what the alternative was for just managing a basic blog. Nice and simple workflow you have!

Collapse
dailydevtips1 profile image
Chris Bongers Author

Glad you enjoyed it.
This workflow works really well for me, it might be too basic for some people.
All comes down to what works for you and your project.

Collapse
shifi profile image
Shifa Ur Rehman

Or! Use excel spreadsheets :p

Collapse
dailydevtips1 profile image
Chris Bongers Author

Indeed!

Got some fun projects running on a google sheet 👀

Collapse
gcosgreaveus profile image
Gavin Cosgreave

Great article and on point with my views. Why over engineer something when you dont have to?

Collapse
dailydevtips1 profile image
Chris Bongers Author

Yep!

You might even say this might be a bit over-engineered.
(The daily cron schedule)

But it server a purpose, this way I don't have to be behind a computer every morning (for instance, when on holiday)

Collapse
t0nyba11 profile image
Tony B

Yes, people with hardly any content to manage, don't need a content-management-system. :)

Collapse
dailydevtips1 profile image
Chris Bongers Author

It happens so often they think they do 👀

Collapse
hegade profile image
s hegade

nice:)

Collapse
dailydevtips1 profile image
Chris Bongers Author

Exactly, whatever works for you is always the best fit

Collapse
jamesbhatta profile image
James Bhatta

Great. How can we handle database related things like comments or likes with this approach?

Collapse
dailydevtips1 profile image
Chris Bongers Author

I had comments on a SSG before, there are several options there.
Either you can use an external service for this.

Or you can roll out your own solution with cached files on build.
There are some amazing write-ups around that.

Also you could still leverage any normal database, the updates would just not be realtime.