From time to time I am questioned by clients / potential clients regarding my reluctance to use open source content management systems (CMSs) such as Wordpress or Drupal. Inevitably from time to time I'm asked to build something using such a CMS although in the case of Wordpress it is more frequently I get asked to fix something sourced elsewhere that has either never worked properly or has suddenly stopped working following an update. Of course there is absolutely nothing wrong per se with using an open source CMS and in many cases it can be perfectly appropriate... unless of course it is being used in an application for which it is fundamentally inappropriate yet the buyer has been forced down a particular path simply because that is all the supplier does. A situation that, from where I'm sitting, seems to happen more often than it should. In my case however I tend not to use those systems for the simple reasons that I don't need to and they don't fit with the way I prefer to do business. Other issues aside, as per what follows, I find them rather inefficient, at times clumsy even. Having a background in engineering, and in particular application-critical software I'm very much a believer in the ethos that the platform delivered should match precisely its intended purpose and fulfil that purpose in the most efficient, and user-friendly manner possible. With that in mind I developed my own CMS (well CMSs as my ecommerce platform is also a CMS of course in some respects but in reality is better thought of as an application) which really is just a lean, modular framework that is easily developed to support whatever bespoke functionality is required. Ironically the ease with which I can deliver pretty much anything desired means that my prices are lower than you might expect.
Anyway, enough of the preamble.. broadly speaking here are my reasons for not offering solutions based around an open source CMS:
1. Footprint.. Oh my what big feet you have..
By their very nature as tools to enable the production of a site with even minimal development skills they are designed to be almost entirely user-configurable. That means a significant payload of additional code and storing a whole bunch of parameters in the database. Code that runs and parameters that have to be retrieved every time a page is requested yet once a site is configured that are almost entirely redundant. That adds to the work the server has to do before it can serve up the requested content to the user, hence resulting in a site that loads more slowly than it could - impacting both the user experience and your search engine ranking. Furthermore the architecture of these platforms generally requires a number of additional requests from the user's browser to load in a number of additional linked resources (scripts, stylesheets etc) all contributing to slow down page load times, a situation exacerbated as more plugins are added to provide specific functionality not available in the core CMS. Once configured that can be mitigated of course by putting some time and effort into combining and compressing resources to minimise the number of http requests.. Based on experience however folk rarely bother.
Far better in my opinion to integrate specific functionality and configuration parameters into the platform during the build and then making the most of that to truly optimise and streamline your scripts, database queries, and page resources and hence deliver a fast site. Especially when considering some business specific functionality I find it is much easier, and hence no more expensive, to build in something bespoke that matches the requirement perfectly than spend hours fighting the architecture of something like Wordpress to deliver a close approximation to the ideal.
Just an aside, out of interest recently I set up a standard, out of the box wordpress install + simple theme, 10 minute job kind of thing and then looked at what it was doing with regard to the database... the home page required 57 separate visits to the database .. I nearly fell off my chair, if it was a person it'd be on medication. By way of comparison this page you're reading requires 3. In itself if the database is designed properly such that the result set is returned quickly then that many queries might not be a problem for you, unless of course you're not comfortable with excessive bloat in an application, but some of those queries were taking up a full quarter second to execute. It didn't take more than a few minutes to reduce the response time by orders of magnitude by sorting out badly applied indices on the database tables but I fail to understand why it couldn't be done well in the first place.
2. Reliability, or The white screen of death…
"Help, my site stopped working, all I get is a blank screen and I can't login or anything" is something I hear with reasonable frequency, oftentimes accompanied by a note of panic if the site is business critical. It seems to be a malady that affects Wordpress-based sites in particular and usually happens because an installed plug-in or theme has an update with some faulty code in it, or code that conflicts with some other module. Frustratingly the way Wordpress is built means that just a minor error in a function that is perhaps infrequently called at best will still cause the whole site to come crashing down. Stick "Wordpress blank screen" into any search engine and you'll find pages and pages of forum posts from folk saying 'help' and many pages of advice on how to resolve the problem. The advice usually begins with instructions to disable all your plugins.. a task that, for the non-tech savvy, can be problematic, not to mention time consuming, when you can't even log in to your admin. It is very important to the way I prefer to do business that I am able to offer a warranty against coding faults in the sites and applications that I deliver that is valid for the life of the site*. I can only do that because all the code is mine, if I was selling platforms that were not my own I could not offer such a warranty.
If I was cynical I might go so far as to say that faulty code represents, to some parties, an additional client charging opportunity, but I would only say that of course if I had witnessed such behaviour first hand..
It's only a few months ago that news broke that some 23,000 web servers had become infected with a 'backdoor' called CryptoPHP that permits hackers to inject malicious code onto infected servers. It is distributed within themes and plugins for popular CMSs such as Wordpress, Drupal and so on. The popularity of such systems represent an opportunity for hackers and while a good agency or developer would ensure that your site only uses resources from reputable sources that is not always the case. I prefer to be entirely responsible for the code that I deliver rather than assume the responsibility for someone else's code regardless of the provenance of the source.
Drupal specifically also came under the spotlight in late 2014 for a fundamental vulnerability that is estimated to have resulted in the infection of millions of websites. A patch was wheeled out quickly to address the fault but too late to prevent vast numbers of sites being compromised and all sites built using Drupal 7 up to that point could be assumed to have been affected. A situation that cost businesses and individuals collectively tens of thousands of hours of effort and cost in remedial action. It's been fixed now but it serves to illustrate the risks of using an increasingly complex platform on the basis of trust that the developers of every module know what they are doing.
4. Function… Can you make it do…?
Yes I can. Open Source CMSs are great for serving content.. however as soon as it becomes necessary to introduce some logic, a bit of application flow, perhaps involving some external systems with a little more interaction than a basic API call then, in my opinion, it is very much better to develop something designed as an integrated package rather than spend time 'fighting' the architecture of the platform. To attempt to deliver such an application using an open source CMS carries a very real risk of creating something of an unmaintainable and unreliable mess in order to deliver something that at best approximates an optimal solution. Such CMSs rely on a series of third-party plug-ins to deliver functionality beyond the basic baseline of the platform (bear in mind that Wordpress at heart is just a blogging platform). Plugins tend to be developed by a variety of individuals in isolation from each other rather than being designed to work together so you may well find that all that functionality you wanted doesn't really work very well when considered as a whole. Not to mention that your site will become slower to load and less easy to manage as the payload of additional plugins, modules and resource increases.
I've learned that even a small business looking for a simple website will often want, and can benefit from something a little bit more than the fundamentals typically offered and doing it my way enables me to offer that 'bit more' in a way that is neatly integrated in the site, is great for the client, is quick to develop and hence costs very little, and that will support easy future expansion. It means I can say to clients that the money you spend with me now isn't going to be wasted when, in future, you need to extend your site or application to do an awful lot more.
5. Usability.. How do I…?
User friendliness is a bit of a bug bear of mine. I spent many years developing user interfaces for enormously complex avionic and flight simulation systems so picked up a thing or two along the way. To a developer familiar with it the back end of something like Wordpress might seem obvious, but to most folk, in both my opinion and experience, it's a confusing dogs dinner of stuff that becomes a barrier when trying to manage the most fundamental of tasks. To my mind the admin interface is just as important as the public front end yet it's an area that an awful lot of developers, in my opinion, just don't get. So.. I build my own.. and the feedback is unfailingly "it's so easy and intuitive..".. and that is important to me.
As a footnote to all of the above, people often seem concerned that they should have something based on an open-source CMS, and hence will ask specifically for Wordpress or Drupal. Drilling down to the root of the concern it seems to me that is often driven by a fear through a reasonable, and understandable lack of appreciation of just what a website is. A fear that if they don't have the same as everyone else then their site or application will be unmaintainable. The reality of course is that everything I do is based upon open source technology - PHP, MySQL etc that will be maintainable by any competent developer, and far more amenable to future expansion simply by dint of not being constrained by a pre-determined architecture, or so heavily customised that the introduction of any new functionality carries a significant overhead of cost and risk.
Having written all of that I am happy to say that there are people out there delivering some terrific sites based upon Wordpress, Drupal, Joomla etc. I know and work with some of them. If you come to me and really really want Wordpress for example I will happily refer you on. I enjoy code and aside from my reasons detailed above, working within a pre-existing CMS just doesn't give me the job satisfaction or opportunities for further developing my own experience that I crave, and that ultimately results in a better product for the client.
* faults caused by changes in server configuration or someone else working on the code for which I am not responsible are of course not covered by any warranty.