Just enough CMS

Here’s a ques­tion I ask my­self all the time: Does this web­site I’m about to build need a CMS?.

If the an­swer is yes, I’m cre­at­ing a lot of work for my­self now: I’ll have to spin up some lo­cal de­vel­op­ment en­vi­ron­ment, think up a data struc­ture, and write a bunch of tem­plates. But later the CMS will make it re­ally easy to up­date the site, so hope­fully I’ll make up the time I spent set­ting it up.

If the an­swer is no, I’m mak­ing the op­po­site bar­gain. I’m mak­ing my life easy now by writ­ing straight-up HTML files, but if I ever need to up­date the site later it’ll be a bunch of ef­fort.

Something that’s been help­ing me re­cently is to think about this not as a yes/​no ques­tion, but as one of de­grees. Your web­site might need a lit­tle bit of CMS, or a whole bunch. Your needs might change over time, too. Thankfully there’s all kinds of tech­nolo­gies that give you those gra­da­tions.

Data files

Your data is still in your git repos­i­tory, but you’ve moved it from your HTML into some­thing like a .yaml file that’s eas­ier to write. Then you have some build process that com­bines the in­for­ma­tion from that file with a tem­plate and pro­duced the fi­nal HTML. This is ex­actly how I’m writ­ing this blog post: A mark­down file that’s com­piled to HTML by Eleventy.


There’s a bunch of dif­fer­ent lev­els of in­volve­ment here. At the low end is some­thing like a shared Google spread­sheet that you ex­port to CSV and throw your build process (totally valid thing to do).

Then there’s things like Contentful and Sanity that fol­low a bring your own schema” model, ie. they only deal with the data you spec­ify.

Even higher up the scale are things like Ghost, or even Wordpress (through the REST API) that start to make some as­sump­tions about how you might want to struc­ture your con­tent. They prob­a­bly have some built-in schemas for things like ar­ti­cles and com­ments.

Either way, these tools give you some use­ful pow­ers:

Full-on CMS

To me, these are prod­ucts like Wordpress, Shopify, or Tumblr. Big, soh­pis­ti­cated pro­grams that run on your server and han­dle both the au­thor­ing and the de­liv­ery of your web­site.

You get all the fea­tures of the head­less CMS, plus some se­lec­tion of other stuff. A big one for me is e-com­merce, but there’s also things like com­ment­ing, sched­ul­ing, shar­ing, a plu­gin sys­tem, and some­times in-built dis­tri­b­u­tion sys­tems.

Lately I’ve been en­joy­ing work­ing on the lower end of this scale. There’s been a few cases where I’ve had to move up the scale mid-pro­ject, but that turned out to be eas­ier than I had thought. I imag­ine go­ing the other way would be much harder.