One of the most puzzling nightmares for non-technical web deciders has to be the choice of the underlying technical solution; i’ve seen many of them sit there in meetings during the early stages of projects, waiting for the geeky talk to be over!

But even if you feel that web tech matters tend to fly a little over your head, you still might have heard the quite common question that often gets asked first (for most internet websites, at least): “Should we use a CMS or a framework on this one?” However, you might not fully understand what a CMS or a framework is technically speaking (which probably makes you fine leaving it to the tech people).
There even might have been that one time, when you heard about CMFs (Content Management Frameworks), and have felt very, very sad about it…

Well, do not panic, for here are my 2 cents to try to put some order into it for you!

Architecture?

Picture by Frits Ahlefeldt-Laurvig, CC BY-ND

A common metaphor used for web technical architectures is actual building architectures, and i’ve had the high point of it during Fabien Basmaison’s conference at Paris Web last year, which was entirely dedicated to that metaphor. I have to say, it does work in a lot of cases, mostly thanks to that clear cut between technical and non-technical skills and responsibilities, but in some cases it just doesn’t (try to explain data replication, or web services, other than with a very unimaginative neighbour who copies everything you own, or a limited double of the keys for your neighbour to come steal stuff!)

So, here’s the starting point: you want to build some building, and you know what you want, but you don’t know how that thing gets done.

Languages and frameworks

The most “low-level” layer of all is probably the programming language itself, or i should rather say the application server running the language, and what that server allows you to do. What gets people to go with Java? PHP? .Net? Ruby? Python? … Truth is, most of the time, the language itself will only matter in the final decision if there are some outside constraints such as: you dev team only handles one of those, your new website has to interact tightly with other tools using one of those technologies, or your platform only runs one of those and your maintenance people won’t be bothered installing anything else. What will matter to you if you don’t have a lot of those contraints, will mostly be the technologies built over them (frameworks, CMSs, DMSs, blog engines, etc.) and what THEY can do for your needs.

Why exactly? Well, let’s say Java, or PHP, or the others, are raw material for your building. In one case, you get everything you need to build a wooden building: planks, nails, some glass for the windows, … In another case, you get everything that will make you a concrete building. In another case, you get everything that will make you a brick building, etc… But all of those technologies can build you a suitable building.

Well, in the web architecture business, everyone is not equal with their own raw material kit, which explains why there are so many. For instance, the Java kit comes with a lot of very useful tools in a big box that is called “JEE”, but those tools take some configuration time for you to start using the kit; on the other hand, the PHP kit comes with not much more than the raw material itself, so you could start building very wrongly, but at least you can start building right out of the box.

Picture by Frits Ahlefeldt-Laurvig, CC BY-ND

Well, language frameworks are exactly here for that: first, they will smoothen the usual well-known weaknesses of every language (Java frameworks are a lot about making the overall configuration easier, and PHP frameworks are a lot about offering solid guidelines for a well-ordered development); and also, they will provide a wide set of extra tools that make the day-to-day tasks easier (a better hammer if the one provided in the original kit wasn’t so good, a screwdriver that turns by itself, a even a pocket-sized bulldozer!)

So now, here you are, ready to start building with the best wooden planks, nails, pieces of glass! But couldn’t you have something a little less “raw” than that?

CMSs (and other software solutions)

Let’s face it, we human beings (or major-sized companies) have rather common needs; in details, we’re all different, but overall, not so much…

Picture by Kristina_5, CC BY

Let’s say what you want is simply a pretty house with a garden so you can live in it with your family of four. You need at least two children’s bedrooms, one parents’ bedroom, a living room, a kitchen, one or two bathrooms, etc, all of this organized in a nice and relevant way.
Or else, let’s say what you want to build is a hospital. You need large, large hallways for several stretchers to fit, a high amount of rooms, resting areas for the nurses and doctors, etc.
In both cases, maybe you can be satisfied with a common house for families of four, or a common hospital building, that you will be able to customize later.

Web software solutions are the same : they’re not raw materials, they’re already fully built, and ready to be used for their respective functional purposes. A CMS, handy to manage internet websites (but not only), are initially supposed to manage text and multimedia contents, with advanced access rights support, a powerful workflow, and a (more or less) easy configuration of all that. A DMS’s task is to allow you to access, upload and manage actual documents (Word documents, PDFs, etc). A wiki will allow groups of people to work collaboratively on plain texts.
All of those are indeed made of raw materials initially, but when you install them, you already get the whole building up, ready to be used.

Of course, some of them are better at some tasks than others (for instance, the Drupal CMS will allow you to install a wide amount of various plug-ins, which handle tasks that are not common for CMSs, while the Jalios CMS is especially relevant when it comes to having an efficient and powerful intranet tool), which explains why there are so many of them on the market, and that they are all relevant in some way.
You understand that need of a diverse offer well, since before living in a house with your family, if you want one that you didn’t build yourself, you’ll first visit a few to pick the one that best matches you needs…

CMF as a part of a CMS, or CMF as an extension of a framework?

Now, when you mix those two, you get Content Management Frameworks; and that’s when things get interesting for you, because as it turns out, you know you do want a house to live in it, but you can afford to spend some time and money on getting one that is made right for you.

There are two ways to see it happen : the first solution makes you get your house (your CMS), and it’s fully ready to be used, but you get one that was especially made to be extended. For instance, you do have walls, but you can easily drill through them to install new power outlets in about 5 minutes; or you do have a bathroom, but you can extend it with a better bathtub in no time, or even a jacuzzi if you feel like your bathroom is a room that requires much of your attention.

A crucial vector of quality of a CMS is in the CMF that ships with it, as it will bring you the tools and the APIs to make it easy for you to extend all it can do. For instance, Jalios CMS developers tend to appreciate a lot the CMF that is included, because most of the CMS runs on this CMF, so there’s nothing the CMS can do that you can’t develop or replace; however, Drupal’s CMF is often considered weak, as it is said it’s better to use Drupal when plug-ins exist to already cover all your needs.

Obviously, what matters most is to get a professional solution! Picture by Steffen, CC BY

A second solution would be to use a framework that already has a lot of content management features coded into it, like dealing with a workflow and preview mode, or dealing with user authentication, etc (most of the time, it will be a common framework, with a content-oriented plug-in, actually)
This one solution gets you your usual raw material kit, but with stuff prebuilt, like full walls ready to be set up instead of wooden planks, or whole windows instead of wood and glass, or, why not, a whole wooden staircase, which you wouldn’t have any use of while building a hospital. But even with those parts, already feature-oriented, but ready to be integrated, you still have a lot of work to do to think about moving in, and using the product in production.

The sad truth is, although satisfying CMFs as parts of CMSs can be found (but are rare!), there are no satisfying CMFs as content-oriented frameworks that i know of, so i guess they’re especially hard to find…

So what should i use for my project? CMS or framework? Aw, or CMF?

Well, it mostly boils down to the question: “is my need common, and where is it really that uncommon?

If you’re a bank, and you need an application that deals with your very specific internal processes, then there probably won’t be software solutions out there that are going to cut it.

But if all you want is to push content online, then there’s probably a tool out there that is quite close to the exact thing you need. All you need now is a skilled architect (a tech one, or a construction one!) to find just the perfect product…

Edit in the intent of full disclosure: months after writing this article, the people at Zengularity introduced me to their confidential next project, which turned out to later become prismic.io. The approach was so disruptive and made so obsolete all of the content complexity I used to go on about (for instance, in this very article!), that I joined their project, and I’m now their developer evangelist. The idea is to consider content a valuable asset, and to centralize it in a content repository feeding one or several apps or websites through a RESTful API; each of these have a different architecture, potentially different technologies, and the weight of content on a project’s architecture becomes virtually zero. The revolution is moving forward! More info on prismic.io’s website.