This is a very common question when starting a new web project: Should I pick a CMS (Content Management System)? Or should I implement a custom web application? And this is a fair question for a technical or non-technical person because each option has advantages and disadvantages depending on the context. It is important to take this decision seriously and avoid assuming that a particular technology is a right choice without thinking beyond the obvious.
Common bad assumptions…
- We should use this CMS because that’s what we know and we will make it faster.
- We better don’t use a CMS because the pages can be edited with HTML easily.
- We should use this CMS because I can use a service to install it in one click.
We frequently hear things like “I want to create a website to order taxis in WordPress because I heard that It’s easier than other technologies“ or “I want to create a marketing landing page in Drupal” or “I want to create a blog website with a custom application in Django”. We could continue all day with examples like that. In many cases, choosing the wrong technology can be the reason for the failure of a project, so if you are a product owner, you should take the advice from a subject matter expert and take this article as reference.
If you didn’t find anything wrong with examples above, you should continue reading to understand why they are bad choices. We are going to list some of the most common factors we should consider for your special case.
Website or web application?
The first thing you need is to identify the type of software that you are going to build. I call a website a web application whose only purpose is to serve static content to the final users which we normally call “readers”, the only interaction of the users is in one-way: reading. On the other hand, a web application allows you to do more than reading. It allows users to interact with an application in both ways. It means that It requires input from the users and provides a response that could be related to processing or obtaining information from external services or a database.
Identifying the type of web application is important for the previous considerations. At this point, we can just say that if you are developing an application, It is probably better to go for custom development, because you will have more flexibility but It’s just the beginning, there are other factors to consider.
CMS or not?
Before thinking about specific technologies you should resolve if you require a CMS or not. Content Management Systems are pieces of software that allow a user to edit the content of a website without technical requirements. From a developer perspective, it provides a framework with a pre-configured core that can be extended with themes and plugins.
As you can see, a CMS has benefits for product owners and developers. It looks like It makes the job easier, and that’s right, you normally can create an initial website very fast while the content edition is very easy but It comes with a price. So, what are the factors you should consider to decide if you go for a CMS or not?
If you rarely need to update the content and you only have 1 or 2 pages to maintain, It is better to create a static HTML website. This is the case of landing pages or websites that present information in no more than 3 pages. But if you are changing content all the time, require multiple pages, then you should consider having a CMS in the first place.
Content management systems are created to add and update content, right?, so if you are creating a blog, a magazine or if you publish content frequently, you need a CMS without a doubt. But what if you grow too much? Only in that case maybe you need to start thinking on a hybrid solution where you can take advantage of the CMS benefits on the management side and present to the user the website served by something else. We will see more details in the Scalability section.
On the other hand, if you only want a website to publish content, and you go with custom development, that’s normally a bad idea. I know that the typical example when you learn about a Framework is about creating a blog. For your information, that’s just an example for educational purposes. You don’t normally see a blog created with Django, Ruby on Rails, Symfony or similar. There could be some very good libraries that extend a custom development in a framework to a CMS, and that’s valid for very special cases where you want the best of both worlds: have a custom development that also requires a content management component.
Time to launch
Normally the time to market is reduced by using a CMS because you can start by quickly creating a website and using an existing theme. That’s true if you don’t require a specific design. If you require a very specific design, having a CMS could increase the time to finish the implementation but sometimes it’s worth it.
When you have to implement a custom design for a website you normally have 2 options: Developing a custom theme or get help from a page builder that allows you to implement the design using the CMS interface. The advantage of implementing the custom design in a CMS is that you can implement it once, and then any newly created page will reuse the same style. But keep in mind that something that could take a couple of hours by just doing HTML/CSS could take days when using a CMS.
In terms of page builders, WordPress has very good options like Beaver Builder that provides a blank theme with multiple options of configuration or you can also integrate into an existing theme.
To implement a custom theme, you will require to understand the API of the CMS and its code to be able to interact with the core to display the information from the database as you expect. WordPress is the most used CMS on the planet, but if you want to use something more robust you can use Drupal that also has some powerful tools from the core like views and blocks.
Support for multiple users
CMSs come with an administration interface out of the box. It allows multiple users to log in to the system and edit content at the same time as keeping control of the versions. Implementing something like that on a custom piece of software can be very complex, so if you require something like this is because you require a content management system.
WordPress has the normal functionalities for a publishing flow and user roles, but If you want something more sophisticated in terms of roles and a special publication workflow where you want to include approval from different people, you should probably use Drupal.
What about allowing external users to register and log in to the website? or allowing users to interact with the database? or restrict the content based on defined criteria for the user?. You can find plugins for everything in a CMS, but for features like the previous ones are better to develop them on a custom application. We will explain the reason in the following paragraph.
When using a CMS you will be tempted to resolve everything with a plugin, but when you resolve with a plugin what is missing with another one you start to create a dependency that is not always well synchronized. And without realizing, you will be hacking plugins or creating glue snippets so everything works correctly. In custom development, you own the code, and you can extend the functionalities without strange dependencies.
Preview of the content
This is a very useful tool of a CMS, you can preview the content and keep it on a draft before publishing it and even schedule the content to be published in a future date. Compared to a custom application where you have to code HTML you can only preview it by having a copy of the code and testing on your computer or publishing it online.
Depending on the grade of interaction that a website requires, you should discard a CMS. You can still develop any custom application by using any CMS but It can be too heavy for simple tasks.
If for example you require to develop a website that will query a big database and the user requires the information instantly and that information is updated frequently, you will have a hard time using a CMS. Instead, you could implement a custom application in charge of storing all the information in a specialized database and provide an interface to consume the data in a web service that can be used by a mobile application for example. Definitely a CMS is not the right technology to expose a highly interactive web service.
A CMS is very tied to a core with pre-built functionalities that you always have to live with. That’s great to start, but when you start to scale your website, and want to implement something more complex, or require better performance, you will always have to live with that, and it will make it more complex to increase page performance or to make the site available for millions of users itself.
In order to scale you will need to mix your architecture with other layers like cache servers, load balancers, between others.
In the content section, we discussed the possibility of hybrid solutions. This is the case of mashable.com:
“Mashable’s backend and frontend are decoupled. The backend CMS that our writing staff uses is still WordPress (albeit, extremely heavily customized). The CMS content is consumed and published by a custom Ruby on Rails frontend.”Chris Heald, Chief Architect @ Mashable
A CMS like WordPress is extremely useful for content edition and articles publication. If it’s good, why should I stop using it? If the front-end is not working for you, you can still use the WordPress backend and create a more optimal application to serve the content to your users. For example, you can manage the content with WordPress and serve the content with Django. To achieve that you can use a library like Django WordPress API. The price of that is that you completely lose the possibility of the edition of pages from WordPress but if you just use WordPress to publish articles, you should be fine.
We have explained some considerations when deciding if you should go for custom development or a CMS. You can always create a custom CMS or a complex application inside a CMS. The important thing is that you analyze the factors mentioned above and depending on your goals and budget, you decide which is the most convenient architecture for the website. The low barriers and functionalities that a CMS provides bring many advantages to startups, small businesses or enterprises, and organizations where the website is not responsible for the operation. If you are creating an interactive website, where you expect a high volume of transactions and the operation depends on that website, or your requirements are too custom, you should consider developing a custom application.
The final decision requires technical knowledge and experience, and you should get input from an experienced software consultant if possible.
Now try to respond to why the examples at the beginning of the article are bad ideas yourself, and if you still don’t get it, you can ask in a comment.