1. Understanding website CMS - Know your contents.
The very first step to built a CMS is to understand the content. Though it sounds self evident, content is key and that's why they call it the 'Content Management System'. Start by asking yourself, a few basic questions: What parts of the theoretical content you will be managing? Who is the audience for this content and where does the content fits in the CMS? Which section of content is required to be editable, and how frequently does it change? What is the lifespan of your content, and what will be the production process? Find the answers to these questions, to determine what your true requirements are. While you might love a particular CMS and think it's the best thing, your clients might find it confusing, hard to use, and extremely complicated. Don't select a system until you know your content completely, and the process used to create it. The key part is to understand the contents, list down the assumptions and share it with your client, and get it approved before starting any further progress.
2. Choose the right CMS - One Size does not fit.
There are many open source CMS targeted at different markets, a few examples being WordPress, Drupal, Joomla, Silverstripe, etc. These CMS systems have huge variations in cost, technology, and complexity. A CMS that works perfectly for one client, may be a total disaster with another client. The goal is to find a system that meets your specific website content, client usability and project cost. Look out for extra functionality requirements in your website, and check for CMS feasibility. Find the best CMS that fits for your client's business needs, and make calculated changes to the site. If you are in doubt about a CMS, then leave it out of you list. Chosen CMS should have extensive user manuals and frequently visited support forums. The documentations should provide information from basic use of the CMS to customizations and advanced functionality.
3. Build your CMS taking care of usability and accessibility.
Do remember that this is the most important point. Each section of the CMS should be developed, with your end customer in mind. Usability testing can help improve the odds that your users' needs are met when your new site launches. Any change done by the CMS editor, should not break the website. The coding style and site structure should be very user safe. WYSIWYG editors make life easier for your clients, and though they may not know html, they may want to be able to use bold or italic text or use header tags to create sections within their pages. They may also want to add an image or change existing one. A WYSIWYG editor makes that all possible for non-tech savvy users. A good CMS based websites should have always a search option to enable visitors to search for any specific contents. Admin search provides quick access to the contents, that your client is looking to update. So while it's tempting to focus on "the system" you should never underestimate the importance of user-centered design.
4. Tighten your contents - Make your CMS sturdy
When implementing CMS, take ultimate care to make sure contents on website are non breakable. Use custom fields and widgets wherever required. Divide your page into smaller bits and assign them to each custom field, only wherever required. Make sure the name of custom fields matches the content and the clients can easily understand and edit them. A good CMS should have a standardized and consistent format for each section of the back-end. If one section uses a drop- down menu for selection, then all of the other sections should not have radio buttons or some other selector, unless required. The sections in the CMS should be properly named or referred, similar to the sections on the website. This will help your clients easily find and edit them. If something is called a 'testimonials' in one place and a 'clients speak' in another, that's going to get confusing. Same goes with names like 'sidebar', 'second column' etc, as this will surely confuse your average user. Do not use any programming code embedded the editor area, or custom fields.
5. Do utilize the template tags as much as possible
Do not make users rely on numerous plugins for your theme to work. In CMS like WordPress, understand the WordPress template tags and then utilize them in your code. By using template tags, you're will be able to ensure that your themes don't break or cause errors when the end user sets it on another server, and the CMS you built will be cross server compatible. If your themes has more than 6 needed plugins, it will cause people to be frustrated, when downloading and setting up the website on their production servers.
6. Do not hard code full URL's into your themes
When you're building your CMS themes, there may be times where images are used, for social media icons or RSS feed icons, and during these points in your coding, you may want to code the full url out (ie: /wp-content/themes/your-theme-name/images/image.jpg) but this will cause errors in the website whenever the person using your theme changes their theme folder name. So the proper codes to use in order to pull the full URL's dynamically are below. <?php bloginfo('stylesheet_directory'); ?>/images/image.jpg. Apart from this, make a clear distinction between images that are part of the design and images that form the dummy content i.e. the contents that is placed in the editor. Place these two type of images in separate folders, and use the dynamic urls to pull these images.
7. Do not make excessive use of custom fields
Clients would prefer filling lesser custom fields basically not more than 2 for each post. So, inorder to make things easier for them, minimize use of custom fields. If you're going to show an image from the home page posts for your theme, write codes in your functions.php file, to automatically show the posts first image, without the need of a custom field. Use custom fields only where there is consistency in requirements.
8. Do make use of the widgets where ever possible
For CMS, the widgets should be used wherever required, by properly naming them and structuring it for easy use. Use them especially where the clients do not have to change much and the contents are less likely to change. Do not expect your clients to know programing code or even html. Use them for your sidebars and various other places. For eg if you have a four column footer, then widgetize it. It's one of the easiest things to do to your themes, and will benefit your theme's users a lot.
9. Getting your coding right