How to build your own CMS — Part 1

How to build your own CMS — Part 1

Ask yourself at least once, “What is a CMS”. Well, it seems obvious, right? A Content Management System. Now think why it is called a CMS. It’s here to manage content. What content? Well, basically everything that can be called content. Wide scope heh… Let me give you some background about my personal history and experience with CMS’s and programming. It dates back to the age of HTML frames (around 2000) where I looked into building dynamic websites for the very first time. My knowledge of PHP was at the level of being able to read syntax and writing my very own insecure login scripts which basically allowed people to do nothing when logged in.

I quickly discovered that creating my own management system would be taking to much time and I wondered how on earth people managed to get a system with a login that allows you to change ‘everything’.. After some research I stumbled on a system called PHP-Nuke. A CMS system with a lot of functionality baked in. After a gruesome week of trial and error and with the help of the phpnuke forums managed to set it up on my Windows machine, I had installed a fresh template and tweaked it in the months after that. I figured that using this CMS prevented me from having to reinvent the wheel.

Exiting the sea of dirty code

PHP-nuke grew in 2006 to be a mature admin panel with functionality to create HTML pages and so called HTML blocks and allowed me to do some default stuff like uploading images, sending e-mails to users and of course security related stuff like banning users and closing down. If I remember correctly PHP-nuke was at version 6 at that moment. Quite a long development history, bug-fixing etc. All of its functionality was written into its core (with some minor exceptions). It was around that time that 2 highly popular CMS’s came into play. Wordpress and Joomla were rapidly growing. They were the ‘hipsters’ of that time, because they worked with modules and add-ons! What? Yes.. the lego stones of the web. Having a basic CMS that did the default stuff and a rapidly growing library of easily installed extensions. Which made the internet explode with new fully manageable websites.

At this moment I was already fully aware of Object Oriented PHP (yeah, I know, calling it Object Oriented PHP at that time was considered cursing), but it has improved since then! What I found out was that 95% of the modules written for Wordpress and Joomla were ‘dirty’ code, not maintainable, not scaleable. CMS updates would sometimes break modules, some module updates would even break the CMS core! So updating a CMS was considered rocket science and risky (well at least for me at that time). So for me it was clear. When someone requested a quick website solution: “Here’s a pre-configured Wordpress / Joomla. GL/HF”. And I have to be honest, they had fun and were satisfied with the result because it worked!

Although Wordpress and Joomla were nice and quick solutions I realized that any custom or longer running project would actually require a different approach to allow scaling and faster bug-fixing. Soooo. What did I do? I tried to build my own CMS! And what a downer was that… I quickly drowned in the fast amount of functionality that I had to write myself. I wanted the CMS to do ‘everything’. Which I, of course, was not capable of doing on my own, both in time and in knowledge. Luckily I discovered CodeIgniter. Which is (or was at that time) a rapidly growing PHP framework that allowed for rapid and clean development. With this framework I somehow managed to create an admin panel and a fancy looking dashboard for aircraft pilots to fill in their flight hours. Yeey! Unfortunately, they didn’t really use it. Why? Well, it was the only thing the system did and there was already another system that did this.. Lesson learned!

It was this realization re-inventing the wheel that made me choose an existing CMS. Hello PyroCMS. A CMS based on CodeIgniter. My favorite framework! This CMS was in a stable state and was ‘clean’ in its code. I’ve used it for a few years until I began working at aFrogleap. I found that PyroCMS was lacking functionality for the mobile industry. Creating some custom modules seemed to work in the first place, but for bigger stuff like import flows it lacked a lot. Especially the interface leaving me with lots of complaints about the interface not providing the proper guidance for inexperienced users.

Embracing the wheel

Well, here I am.. 2015 and still not satisfied with the currently available CMS’s. The possibilities of the web and all of it’s new frameworks are rapidly expanding and the only thing I see is the same old Dirty CMS’s that don’t allow rapid development and scalability. Wordpress and Joomla are big and unmatchable players when it comes to pre-baked and existing functionality. This is why they are still used! But most developers hate it. And PyroCMS, although really cool, is not able to satisfy my user experience and user guidance hunger. It made me think. What does a client really want a CMS to do? well…. Ref: paragraph 1 of this blogpost… Manage content. And what is content? Well basically everything! Do we need to manage everything? NO! Just the things that we need to manage…

Having spend all of my time in understanding CMS’s numerous of trials and failures later, I know now what it takes to build a CMS. And actually it’s not that big of a deal. It just takes some time and most importantly focus and dedication! In my next article I will explain about the pitfalls in building a CMS. I will be answering the next questions:

Why do so many developers / companies fail in building a CMS?

Why did Wordpress and Joomla become big players?

When to build a CMS?

When NOT to build a CMS?

See you next time!