What does it take to make a CMS?

Related Articles:
- How does a CMS function on the web?
- What is a CMS?

To make a CMS it takes three things: hardware, software, and people.

Ten or twenty years ago, all three represented huge problems, and a CMS was difficult and expensive to create. Since then, hardware has become much more powerful, so that specialised super-expensive equipment (like supercomputers) was no longer needed - you can manage a modern CMS from a notebook or a netbook, even a mobile phone. Software improved too - there is a lot of open-source free code that anyone can use, no need to pay thousands to a company to buy it and then continue paying to maintain it. Finally, as both software and hardware became easier to use, it is no longer necessary to learn every bit of the process in depth - you can just focus on high level tasks and let the machines handle the rest.

Think of it this way - the first aviators were usually the engineers and the mechanics for their planes. Planes were very simple, but still only a few people could understand them and fly them, because the field was so new. Modern planes are infinitely more sophisticated, and it takes dozens if not hundreds of different people to operate them. The modern pilots generally know nothing about fixing an engine. They understand the mechanics of flight in principle - enough to know how it works, but not enough to say how to build a new plane with better aerodynamics. Finally, they know a few things extremely well - so well in fact that they may be able to land a plane in almost zero visibility, or land so softly that the passengers barely notice the touchdown. The modern pilots fly farther and faster than the first aviators, because they can focus on flying, while benefiting from better technology.

If you are to succeed with CMS, you need to have a similar strategy: divide the skills in three categories. Pick the skills that you are going to ignore, the skills to learn in principle, and the skills to learn in depth.

1. Skills and tasks to ignore.
These are the things that are too complicated to be managed by one person or too peripheral to your main task. That doesn't mean they don't need to be done, or that they are unimportant - it simply means they need to be outsourced 100%. You either find a pre-manufactured solution, or a person who can do the task for you. Here's a list of some skills that a CMS manager should outsource:

Server administration:
Your CMS will be web based, so it must be hosted on a server. This server must be reliable, meaning at least several things:
- the software must be up-to-date
- the content must be backed up
- the server must be difficult to hack, i.e. protected from unauthorised access
- sensitive information must be protected. This is particularly important for e-commerce sites - you don't want your clients' credit card information exposed. Same applies to medical records and other personal information.
Any of these can be a full time job in a serious business - and a very stressful job, too.

Coding / Programming:
Somebody has to create the CMS itself. It is an immense task. Drupal 7, on which this site is running, is over 10 megabytes of code - millions of lines of code. It would take centuries to write it single handedly, and them millennia to troubleshoot it and make it work. You don't want to do it. (You probably don't even want to know how it functions now that it is written - at least not line by line - a general idea would do).

Content creation:
A lot of people who hire web developers expect them to magically come up with the content for the site. You want your client to provide the content; or you want to harvest your data from the web or your users. Successful web projects will include thousands - sometimes millions or even billions of pieces of content. Again, it is not a winning strategy to create it yourself. This particularly applies to artistic creations, such as photography, film, or creative writing. Don't try to be all of that yourself - the quality will suffer, and so will you.

Content styling:
There is a reason why there is a separate college of design on this campus. It takes a lot of skills to do this job right. The web only makes the task more complex. There are several issues in styling:
- ease of navigation: this is about placing buttons and interface elements in a way that make sense to users. Extremely hard to do well.
- aesthetics: you want your site to look pretty - balanced, proportional, and visually appealing.
- typography: you want to use fonts that will be readable, and a markup that would highlight important elements such as titles and make them stand out in your content.
These same issues apply to a print publication, but for a web project there is an additional challenge of having to take all that stuff and then finding a way to write code that would actually display it that way online. If that wasn't enough, you have to worry about browser compatibility. You may spend a week making the site look just like your sketch on a piece of paper, only to find that it breaks in another browser, or on a Mac, or on a Nokia phone. Long story short, you don't want to touch styling.

2. Skills and tasks to learn in principle

Internet structure (domains, hosting, servers)
More often than not, you will be tasked by your client with managing their hosting and domain registration. Especially on smaller projects, where you will be a one person team, you have to understand how these things work so you can pick the best service to fit your storage and features needs. You also need to understand how to interact with your server - how to install a CMS and upload files, meaning you need to learn how to use an FTP client.

CMS structure
You need to have a general idea of what a CMS does, what features it may include, and what CMS solutions are available on the market. This knowledge is time-sensitive - you need to keep an eye on developments to stay up to date.

Databases and information architecture
The vast majority of CMS's will rely on a relational database to store the actual data, i.e. your content in raw unformatted format. You need to have a good idea of how these are organised, and how they function. That doesn't mean you need to be able to write complex database queries in a special query language, but you need to know in general how the data is written to a database and how it is retrieved. The most popular open source database standard is MySQL.

Web application languages
Your CMS code that actually does all the work will be written in some web application language - a programming language designed for the web needs. If you are working with open code, as we will be, your CMS will probably use PHP, the most popular open source web application language. Programming in PHP is relatively easy compared to other languages; but it is still a very complicated task. Just like a foreign language, it requires constant practice. You need to have a general idea of how PHP functions and the role it plays in the process. You will learn to interpret some very simple PHP code, and that will give you an idea of the rest of the problem.

Markup languages (HTML and XML)
Your browser cannot work with PHP (your web application language) or with MySQL (database data). It needs to be fed content in a special format, usually a markup language like HTML (or sometimes XML). You need to have a good understanding of HTML - at a deeper level then PHP or MySQL, because those layers are largely invisible to you as an administrator, but you constantly bump into HTML as you create new posts that you want to format with titles, indents, colors, etc.

Stylesheets (CSS)
It is a good practice to separate content from style. While your content will be delivered to the readers using a markup language like HTML, it will be styled with a cascading style sheet (CSS). The benefit of keeping the style separate is efficiency - you define your style once, and you don't have to re-write it for every page. Changes are easy and fast, and you can skin your content differently depending on whether it is displayed in a browser, or prepared for printing, or fed to a mobile device with a small screen. You need to have a good understanding of CSS, but probably not a working command of it so that you can create your own stylesheets.

3. Skills to learn in depth and tasks to focus on all the time

Skill: Know the structure of a specific CMS product (such as Joomla, Drupal, Plone, of Microsoft Sharepoint)
A good photographer can operate their camera without needing to see which button is which. A good cook doesn't need a measuring cup. A professional tennis player knows exactly what type of racket to use - down to the exact model, grip type, and string tension. You need to know your tool inside out. You need an in-depth knowledge of its structure, backed by constant practice and testing.

Skill: Know ways to implement a variety of services and features in your CMS
Just like a good photographer must master a variety of assignments - landscapes, portraits, weddings, product photography, journalistic reporting - so you need to learn how to implement a variety of CMS solutions. If your client comes to you and says, "we want to let our PR folks post photos from our events, and let everybody else comment on photos and tag other employees in them", you need to be able to answer, "I can do that, give me a couple of days and you will see a prototype".

Task: Keep your knowledge up-to-date
This stuff changes all the time. One time I found a Drupal module that did exactly what I needed for the college web site; and then I noticed that the code was only one week old. Keep an eye on the developments - subscribe to newsletters and listservs, follow other CMS people on Twitter, go to conferences, talk to people.

Task: Interact with clients and track their needs; change the CMS to meet them
A good CMS is like a new house - it needs to be lived in. You don't just build it and leave, it will take some fine-tuning and maintenance once it is created. You need to have good communication with your clients through the whole process, listening to their needs.

Task: Monitor usage statistics and change you CMS structure based on the findings
You should also be tracking how people are using your CMS - using web statistics and analyses. Use the insights you gain from that to improve your system.