WordPress (WP) has enjoyed a great deal of success over the last several years. It’s a wildly popular publishing platform that’s gone from being just a tool for bloggers to a publishing system used by more traditional publishing sites (e.g., the Wall Street Journal magazine). In its most recent upgrade (version 3.0), a number of significant feature enhancements have pushed it further down the road towards become a more full-featured web content management system (CMS), garnering acclaim from many looking for WordPress to evolve.
But is it the unicorns and rainbows of content management that some hope it to be? Or just another round of Web 2.0 hype worth ignoring? After two large projects with Worpdress as CMS, and time spent designing and building this site, I wanted to share my perspectives on these burning (ok…maybe smoldering) questions .
In a nutshell: WordPress doesn’t scale well as a CMS…yet
WordPress is a great tool and platform, and has lowered the barrier to entry significantly for many seeking to create simple, good looking web sites. It’s very user-friendly, and works extremely well for certain types of sites (this one, for example), but it’s not all unicorns and rainbows. WordPress is still growing up as a CMS, and its legacy as a blogging platform shows. In order for WordPress to make the transition successfully, it needs to handle arbitrary content first, and blog content second. Unfortunately, at present, it does the opposite.
In my opinion, the system scales to a certain point and then cracks under the stress of either too much content (Pages being harder to scale than blog Posts) or too many added plug-ins and customization. It has a usability knee wherein adding more content OR plug-ins radically diminishes the utility of the product (see illustration), and hence its viability as a web CMS. Businesses or their consultants are left to gauge whether their site requirements (content and features) will push them outside the envelope where WordPress is the right tool. In my opinion, the word to the wise for those looking to use WordPress as a web CMS is caveat emptor.
So now that I’ve given you the punch line, let’s dive in to the details…
This blog post is lengthy. It’s the culmination of six months of experience working with all aspects of WordPress on three separate projects. There were ups and downs, happy discoveries, and a lot of frustration. My expectations were high before I took on the work, and while WordPress delivered in many areas, it disappointed in others. Here’s how I’ve broken down my thoughts:
- The challenge and the dream
- The reality: Good, bad and really ugly
- Publishing new content
- Managing existing content
- Design friendliness
- Miscellaneous gotchas
A few notes on terminology: In the following discussion, CMS will be used as shorthand for web content management system, and should not be confused with more complex and generalized content management systems (e.g., for enterprise document management, intranets). I’ll use Pages and Posts per the WordPress glossary, and “pages” or “content” as generic terms to cover the collection of Pages and Posts within a site. Finally, whenever I refer to WordPress, I’ll be talking about the administrative interface to WordPress where one publishes and manages content, not to the actual site being managed by WordPress itself.
Web content management: The Challenge and the Dream
Businesses need a way to publish and manage the content on their site effectively, and since the mid- to late-90s, they’ve turned to CMS tools to help, often looking for a silver bullet solution. Unfortunately, web CMS tools have suffered from a few problems:
- Too complex: Usability often dies at the hands of “feature completeness” with these tools. In trying to meet everyone’s needs, they often meet no one’s completely. User experience design is often the first sacrificial lamb, and as a result, these tools are tough for non-technical users to handle.
- Too expensive: Commercial systems are often expensive, or at least, their prices put them out of reach for many businesses. With the rise of open-source tools, this has been less of a problem, but it has been replaced by another…
- Too cutting edge: Open-source CMS tools like Drupal, Joomla and Plone are great for technically savvy users who want flexibility and a free tool with which they can tinker. However, this “feature” is often a huge drawback for businesses looking for tools requiring a minimum of technical savvy, with good documentation, solid developer communities and long-term stability. (Oh and just because the White House uses Drupal doesn’t mean it’s easy to use.)
- Not design friendly: Design templating is heavily constrained in many tools, which limits what’s possible from an experience design perspective. As a result, lots of CMS sites don’t put their best foot forward from a design perspective (i.e., they look like crap).
- Customization compulsory: Every system has its drawbacks and weaknesses, and most tools won’t meet every business’ needs. As a result, many spend time and money customizing tools to meet their needs.
- Hard to deploy: A corollary to many of the drawbacks above is that these tools can be hard to get up and running. Businesses can expect deployments to take anywhere from a few months up to a year or more, depending on complexity.
The dream for many seeking a good, basic web content management system is to overcome these challenges. Most don’t need a huge enterprise class CMS. They don’t need a tool that does everything. What they need is something that’s:
- Usable and intuitive for non-technical users
- Easy to set up and upgrade
- Easy to publish new content and manage what’s already there
- Design friendly
- Fast and optimized
So how does WordPress stack up?
The reality of WordPress as a CMS: Good, bad and really ugly
The table below provides a quick summary for those seeking quick opinions. Read on below if you’re looking for a little bit more detail.
|Feature||The Good||The Bad||The Ugly|
|Usability||Core system is well-designed, intuitive and user friendly||Training will be required. It’s not totally plug-and-play.||Heavily customized systems have some serious usability problems|
|Set up||Almost drop-dead simple for a basic setup||Most businesses will want more than a basic setup||No consistency in terms of how plug-ins are set up and configured|
|Publishing new content||Straightforward for “basic” blog posts and pages||WYSIWYG isn’t…||Find your code jockey if you need designed content|
|Managing existing content||For basic posts and pages, editing is simple and analogous to creation||WYSIWYG isn’t…again||Very difficult to manage if you have LOTS of content|
|Upgrades||Base upgrade path is great and dead simple||Unpredictable behavior when upgrading plug-ins and widgets||With heavy customization, here be monsters|
|Cost||Free or cheap = Awesome||Sometimes, you get what you pay for…|
|Features||Core feature set is solid and focused on doing a few things really well||See extensibility||See extensibility|
|Extensibility||Plug-in architecture with a vibrant developer community and lots of great plug-ins out there||Lots of crap||When that plug-in fails your business, who do you call?|
|Design friendliness||Flexible theme system is great; content markup can be changed as needed||Customizing themes requires knowledge of HTML and CSS||Modifying the design of content means code mucking, frustration for users and management problems|
|Performance||Out of the box performance is pretty good||Dynamic publishing means no caching and possible bottlenecks||Plug-ins with unknown scaling behavior could bring your server to its knees|
Usable and intuitive for non-technical users
The user interface for WordPress has always been clean, and it keeps getting better. It even supports customization (e.g., themes, UI elements). Of all the features of WordPress, this is one where clients have consistently told me that it’s either (a) a big step up from their previous CMS, or (b) intuitive and straightforward in terms of how basic features and functionality are organized. With that said, it’s not perfect.
As soon as you start customizing WordPress by adding plug-ins, things go downhill. There’s no consistent approach to how these elements are handled (a consequence of flexibility for developers who create said widgets and plug-ins). And depending on how many plug-ins you add, these areas of the interface scale poorly, to the point where they become unusable. Widget management can be particularly painful once you get more than a handful, which is easy to do if you’re creating Page-specific widgets and you have lots of Pages.
WordPress has a very simple installation process, so that someone with a minimum of technical savvy can get the system up and running in 10 minutes. Keep in mind, however, that this is just the core system, without any extensions or customization. If you include those things as part of the set up process, it gets a bit messier.
WordPress is designed so that plug-in developers can use a few different approaches, which means that setup and configuration of plug-ins can happen in a few different places. Additionally, there are no real design standards about how a setup interface is supposed to look and behave, which means variability in terms of how these things work (or don’t).
Publishing new content
If you want to create a new blog Post or basic Page in your site, then the publishing process is pretty straightforward. It gets a little tricky if you start talking about (defined) custom templates and content hierarchies, but for basic publishing, most users I’ve worked with have felt it was easy to use.
As soon as your design system gets any more complex than content with basic paragraphs of text, with the occasional image or video, things get problematic. Visual editing mode (a.k.a WYSIWYG, or “What-You-See-Is-What-You-Get”) suffers from the limitations of most CMS tools: it just doesn’t work well, especially if you’ve got custom styles defined. This means that if you want lots of variation in the design of Page content (i.e., outside the structure and layout), then you’ll probably need people with some technical savvy to create this content. In some cases, you can cut and paste from existing Pages, but this still requires working in HTML mode, which intimidates some users.
Managing existing content
If you don’t have too much content (i.e., 50 Pages or less), WordPress works pretty well. As soon as you get a LOT of content (thousands of pages), some glaring usability problems come to light:
- Default admin interface search functionality is terrible. Not only is there no way to search both Posts and Pages, but in many cases, search results are incorrect (i.e., pages may not show up, even if you searched for a word in the title).
- No advanced search exists (i.e., you can’t search for something by title, author, or publication date)
- Sorting functionality is non-existent also. You can’t sort that list of Pages by title; WordPress will use chronological sort and you can’t change it without customization.
What this means is that finding Posts or Pages through the admin interface can be time-consuming and frustrating. Assuming a Post or Page is published, there’s a pretty simple workaround: login to WordPress, go to your site, navigate to the page you want to edit, then click the Edit link on the page. For anything still in draft form, you’re pretty much out of luck, and you’ll need to slog through the admin interface to find your content. Once you get thousands of pages of content (not uncommon for heavy publishers), this limitation is significant.
Easy to upgrade
If you don’t customize WordPress much (i.e., you only add a few plug-ins or widgets), then upgrading the system is a snap. They’ve got integrated tools to help with system and plug-in updates, with clear notifications about when you need to fix things, and the automagical inline updating systems works pretty much as advertised.
As soon as you start customizing, the picture isn’t quite as pretty. Some plug-ins break when the core is updated, and fixes aren’t always forthcoming, depending on how actively the plug-in in question is being maintained. Even worse, if you’ve written your own custom plug-ins or extensions to the base system, you’ll have to deal with maintenance. In many cases you won’t have to worry about it, but for people whose businesses are on the line, caution should rule the day, which means upgrading could take time and effort.
Self-hosted WordPress is free, as are many useful plug-ins. It’s the open-source dream, pretty much. Even the hosted version of WordPress is cheap. You can’t go wrong…
WordPress’ core feature set is a hybrid of basic blog functions (Posts, Media library, Links, Comments) and basic web site content features (Pages, Widgets). Even though it’s not as focused as something like Basecamp (which treats creeping featurism like a plague), it’s not bad. Version 3.0 saw the addition of custom templates, custom taxonomies, and new approaches to navigational menus. While all of these things are good, and maybe even necessary for a CMS, bloat and complexity start becoming a real issue.
Plug-ins round out the mix, creating the potential to add just about as many features as you can imagine. And this is where things get ugly. It’s easy to add plug-ins, which in many cases means you do. Before you know it, you’ve got 15-20 plug-ins installed, with a mix activated and deactivated, and possibly duplication of functionality as you were looking for just that right plug-in. Sound messy? It is…
The plug-in architecture of WordPress is really great, in theory. It supports almost infinite extension, and its easy to add and remove plug-ins. As a result, there’s a pretty vibrant developer community that’s been at it for a few years, which means lots of plug-ins to choose from.
As you might expect, quality varies a lot. There a some terrific plug-ins out there, but as many or more that are questionable. What this can mean is a fair bit of time spent in search of the perfect plug-in: search, install, configure, test, repeat. In some cases you’ll find what you’re looking for, but in many, you’ll find half of what you’re looking for, which then leads to more customization questions.
Even worse, plug-ins are a bit like used cars: you’re buying someone else’s unknown problems. There may be monsters lurking beneath the surface that won’t show up until you start hammering with heavy traffic, lots of database queries, and complex server environments. When problems show up in these circumstances, and you’re relying on a plug-in written by some college student in Eastern Europe, you may have trouble getting support. For some sites and businesses, this is a significant risk.
WordPress sites often sport simple, clean, elegant and even fun designs. The underlying theme system is great, and a whole ecosystem has popped up offering “custom” themes at bargain-basement prices. For blogs and sites with really basic content, this is fantastic, and works really well. However, themes are really more about layout and basic look and feel (i.e., your foundation). They can give you a house, some design elements (color, typography), and a few basic rooms, but beyond that, it’s up to you.
Heavily branded marketing web sites often have content needs beyond the basic text and images used in blog posts. Specifically, they’ll want Pages more than Posts (unless they want a blog on the site, too). Companies want Pages with imagery, tabbed content areas, slideshows, multi-column content, contextual modules depending on the Page type and on and on and on. WordPress doesn’t restrict your ability to create as rich a system as you want, but it can get messy, and depending on how you do it, it can become a total management disaster. It’s really easy to wind up with a beautiful site that your non-technical marketing team can’t maintain.
Here’s a very typical scenario:
You want to host your branded marketing web site using WordPress. You come up with an outline for your site’s content, and then your design team (or agency) create a visual and information design system to support it. Your design system maybe has 5-10 unique Pages (e.g., Home, Contact Us form) and 10-15 Page design templates (e.g., section landing pages, product detail pages) with rich designs that will get applied to your remaining content (maybe totalling 50-100 Pages at the end of the day). Add a blog for your CEO, along with a few other simple features (e.g., email newsletter, basic CRM integration), and you’ve got your standard corporate marketing site. The details will vary from business to business, but in my experience, this is standard fare.
Ok…so what would it take to get this design built? And how would your non-technical team manage it in WordPress?
The base WordPress theme system uses a core set of “templates” to create its content (not quite the same as the design templates mentioned above, but close). WordPress templates include page headers and footers (applied everywhere), content areas for basic Posts and Pages, category listing pages, and sidebars. This core templating system, while flexible, is really designed for blogs more than it is for sites with varied structured content. The bottom line is that in order to implement your design, you’ll need someone to create or customize a WordPress theme to match your branded design system, and then build your Page templates based on that theme. There’s no way in WordPress to do this without getting in and writing code.
So your developers sit down to build out the system and templates. The smartest way to do this would be to use the new custom templates in WordPress 3.0, but this takes time, and the team isn’t familiar with this feature since it just came out. You’ve got to get your site launched, so the team takes a different approach. They build a few new category Page templates where possible, and then, when it comes to Pages in your site that can’t be handled in this way, they just build them from within WordPress using HTML mode. Once the representative set of Pages has been built (i.e., one for every design template), all remaining site content can be built out by creating new Pages, and cutting and pasting from other Pages based on the same design template. Your site launches, and there is much rejoicing. Hurrah for WordPress! Our site looks great!
After the initial launch, a few issues come up. Maybe some design tweaks need to be made, or a few new pages need to be added based on new requirements. No problem. Your marketing team has been trained in the basics of WordPress, and they dive in. Unfortunately, none of them is very good at HTML, so they stick to the Visual editing mode in WordPress.
First, the design tweaks. The CEO decided that he didn’t like the header styles used on the product landing pages. They need to be a different color. And there need to be a little more white space beneath those headers. So, the marketing intern hops into WordPress, only to find that when she changes header colors in the WYSIWYG editing mode, nothing happens on the site. Either that, or it just doesn’t look like it did in the editor. Adding the white space didn’t work any better. She added a few carriage returns in the page content, but it just doesn’t look right. Either no space gets added, or there’s too much or too little. Hmm…Maybe creating the new pages will be easier?
New Page X is kind of like existing Page Y. Because the site was implemented without custom templates, we have to base our new page on the existing page. In order to create Page X, the person responsible logs into WordPress, finds Y in the list of Pages, copies the content, creates a new Page for X, pastes the content from Page Y, and edits the content. Unfortunately, Page X isn’t a perfect match to Page Y. Some images need to be swapped and some subheads and copy using a style from another Page need to be added. It’s all free-form editing at this point (i.e., one big blob of content), which means hunting down the images that need to be swapped, then trying desperately to make headers match styles from another page.
After about an hour trying to make those few tweaks and add one Page, the person on the marketing team gives up and emails the in-house developer to make the changes. It’s just faster that way…
The reality is that your WordPress site looks great, but limitations in the way it was built mean that your non-technical team can’t maintain those great looking designs without knowing some HTML and CSS. Header and link styles, dropdown navigation systems, spacing: all of these things are maintained in CSS outside of WordPress, and a non-technical person won’t be able to change them. And because pages are often just added using the cut-and-paste approach outlined above, that means that people are left trying to edit content in big chunks, rather than bite-size morsels where results will be predictable.
Out of the box, WordPress performs pretty well, but once you start stressing the system and adding lots of plug-ins, you’re going to need to take a serious look at performance optimization. WordPress delivers all of its content dynamically (i.e., it queries a database to render pages). For high-volume sites with many concurrent users, dynamic publishing simply doesn’t work, and you’ll need to use a plug-in like Super cache. This also means that WordPress, by default, won’t work with some CDNs that require static content to be replicated across a series of servers (e.g., Edgecast).
In the course of my projects with WordPress, there were a number of other odds and ends that came up, which came as a surprise to the client or to my teams:
- Some content will be outside WordPress: It’s inevitable that some of the content for your site will be most easily managed outside of the WordPress interface. Example include things like dropdown navigation menus, lightbox pop-ups, or content that needs to come out of a customized database. Anything outside WordPress usually means you’ll need folks with technical skills to manage that content.
- But our old CMS…: Don’t make assumptions about what WordPress can do relative to your old CMS. This is particular a problem if you’ve moving from a homegrown CMS that’s long in the tooth, but heavily customized to meet your needs. It’s easy to make assumptions that everything your old CMS did will be possible, and more, and this often isn’t the case.
- Contextual content modules are hard: If you want to add page content that contextual and inside the content area (i.e., not in a sidebar), this will generally mean customization and possible management problems.
- Expect the unexpected: It’s kind of silly to say, but when it comes to a system like WordPress, you don’t know what you don’t know. If you’re going to undertake a project, make sure you do adequate technical due diligence up front to identify as moany requirements as possible. Otherwise, you may wind up halfway into implementation and realize that a lot of the features you had to have in the site just can’t be done with the available time and budget.
WordPress is like a spork: neither as good as a spoon or fork, but with features of each. It’s mostly blogging tool, with some aspects of a web CMS, and it looks like it’s going to keep evolving. Whether or not it can maintain usability while expanding its feature set remains to be seen.
I’ve gone to great lengths here to dispel some of the myths that WordPress is a magical silver bullet that suddenly overcomes past problems with web content management. It doesn’t. It’s a great tool, but it’s ultimately a user-friendly blogging platform that can be used to manage a moderate amount of additional content. It’s not a completely scalable solution, and it’s not realistic to think that non-technical staff will be able to handle all of your site’s content.
At the end of the day, it’s still difficult to maintain a corporate marketing web site of any size and complexity. Add complex advertising, eCommerce, heavy interaction, or other transactional functionality, and you might as well forget about it. WordPress may be good for some businesses, but terrible for others. So if you’re a business (or individual) looking for a new way to manage your web site, take a look at WordPress, but look carefully and look both ways before crossing this street.
Have you done any work with WordPress as a CMS? If so, share your experiences!