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
Top comments (45)
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.
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?
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.
I definitely been in your position Matthew 🤦♂️
Exactly the point "not always" 🙌
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
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 😂
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.
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.
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...
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.
Oh you said you built the CMS so I thought you made it yourself, like making the funcionality in React or Angular or something.
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).
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.
You may have missed my point. I will try to expand on it.
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.
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.
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
VSCode on Android (you don't need to install anything)
Renan Franca ・ Mar 2 ・ 1 min read
Wow awesome read Renan 💖
Thank you 😊
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.
Yep, it's not always a non-cms though.
You can have a SSG and still leverage a CMS
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.
CMS can be static if it is a headless CMS ;D
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.
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! 😊
I'm a firm believer of use what works for you.
Happy to hear it's 11ty for you, amazing system for sure 💖
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.
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.
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.