During my tenure at EllisLab one of the roles I filled was Director of Enterprise Services. This quickly morphed into Director of Business Development but in my mind the role was the same. In both of these roles my job was to educate. I spent a good portion of my time demoing ExpressionEngine and answering emails about it's possible uses. It was not uncommon to field questions from name brands that we would all recognize. Higher education institutions, Fortune 100 companies, and some of our favorite brands all use EE.

One of the questions I got on occassion is "Is ExpressionEngine an Enterprise CMS?". I always found this interesting. But this question always left me wondering what the person actually meant by Enterprise CMS.

The Association for Information and Image Management (AIIM) International refined the definition of Enterprise Content Management as follows:

Enterprise Content Management (ECM) is the strategies, methods and tools used to capture, manage, store, preserve, and deliver content and documents related to organizational processes. ECM covers the management of information within the entire scope of an enterprise whether that information is in the form of a paper document, an electronic file, a database print stream, or even an email.

So if we follow a strict interpretation of the definition of ECM then no. I would have to say none of the Web CMSs (WordPress, Joomla, Drupal) that those of us in the web industry would typically think of would fit this definition either. Further, if we narrow the definition to just the Web Content Management portion of and Enterprise System:

Web Content Management as Enterprise Content Management component is used to present information already existing and managed in the ECM repository. However, information presented via Web technologies - on the Internet, an extranet, or on a portal — uses the workflow, access control, versioning, delivery and authorization modules of the WCM instead of own integrated ECM functionality. There are only few examples of successful implementations whereby a shared repository for documents and web content are managed together.

So where does that leave us? Do we loosen the definition of Enterprise Web CMS to be a little more focused on what most of us think of when we use this term? AIIM defines a Web CMS as follows:

A WCMS is a program that helps in maintaining, controlling, changing and reassembling the content on a web-page. Content is mostly kept in a database and assembled using a flexible language like XML or .NET. The user interacts with the system at the front through a normal web browser. From there he can edit, control parts of the layout and maintain and add to the web-pages without any programming or HTML skills. For this it needs to then provide some or all the following functionalities.

  • Automated templates that can be changed easily on one place and then move all through the system
  • Easily editable content
  • Extensible feature sets, usually through plug-ins or extensions.
  • Regular updates and adherence to Web standards
  • Simple Workflow for processes like submittal, editing and authorization for release
  • Lifecycle Management of content, from creation to final deletion
  • Version control of whole web pages

A Web Content Management System often exists as a part of larger Enterprise solutions but can be equally effective for smaller-scale implementations. Most vendors have some sort of Web CMS components in their Software Suite, whether as proper Web Content Management to support the publishing and reuse of content or as web-enabled functionality of top of their more widely used content repository.

I would argue that their definition is a bit narrow for today's use. Most of us would define an Enterprise Web CMS as a system that has the following capabilities:

  • High level of Security protection from outside expoitation
  • Granular security levels for users with different functions
  • Data type flexibility
  • C.O.P.E. capable
  • Extensible
  • Scaleable
  • Workflow management
  • Document management
  • Versioning
  • Higher levels of support

The problem with this list is that I could pretty much make any of the widely available CMSs fit this list. But since I am not an expert on the other systems (Drupal, Wordpress, Joomla) I will just break this down for ExpressionEngine.

Security protection from outside exploitation

ExpressionEngine is just like any other piece of software. If you get a talented enough individual looking for a hole then they are bound to find some way in. Thinking otherwise is foolish. That said, in 6 years of my involvement in the ExpressionEngine community I have never heard of an EE site getting hacked due to an exploit in the CMS. When I was on staff we would occassionally get emails from users saying they got hacked. After spending some time walking them through the exploit it was typically 1 of 2 scenarios. They were on an unsecure host. Or they had another system installed in the hosting that was the gateway for the hacker.

I can't go into great detail but I can say that some of the most security concious organizations in the US have tested EE and found no real exploits. Often what they find is more of a configuration issue more than anything. When you add to this the ability to store your admin folder above webroot. The ability to change the name of your admin folder.

Granular security levels for users

Unlike some systems ExpressionEngine is a bit more granular in how you assign permissions for different member groups. Super Admins have access to do everything in the control panel. But if I want to allow a user access to post in a specific channel (ExpressionEngine is a multi-channel system) then I can. And I don't even have to give them the ability to delete entries. This means that a user might have permission to add/edit entries in the news section but cannot add/edit or even see entries in the image rotator channel.

Data type flexibility

ExpressionEngine excels when it comes to handling different types of Data. One of the main ways that it does this is by allowing you to assign different fieldtypes to a field. If I have a staff channel I can assign as many fields as I need to that channel. So I might have a file field for the image, a textarea field for the bio, text fields for the email, phone and social media info. The fields can be different for each Channel. So I may have a podcast channel that has a file field for the audio file, textarea field for the description and text fields for the speaker/duration etc. This also makes ExpressionEngine extremely friendly to non-technical users as the forms that they need to fill in for the various types of content they have on the site is tailored to the content.

C.O.P.E. capable

This is a relatively new idea in the web world. Karen McGrane is one of the first people that I heard speak of this capability even though I had been using EE in this manner for several years before hearing her talk in 2011 at An Event Apart. She uses NPR's Create Once Publish Everywhere (C.O.P.E) as an example. The basic premise is that you have custom fields to store specific bits of content. This allows you to control who has access to that content. In the case of NPR it allows them to extend portions of their content to different platforms/providers in an easy and manageable way. With EE I can reveal the stored content via RSS/HTML/XML and limit it to different levels of members based on permissions. It's actually quite easy.


ExpressionEngine is built on the Open Source CodeIgniter PHP framework. It also has extensibility built in to the system. This is evidenced by the great number of professional quality add-ons that have been built for ExpressionEngine. Chances are that if you have a need for some specific functionality that there is an add-on that will provide that functionality to you. But if that is not the case then using the built in classes and/or CodeIgniter you should be able to create it.


I personally had conversations and know of EE sites that get many millions of viewers per month. Some of these systems utilize a caching mechanism. Others just have a multiple server set-up. Scaling ExpressionEngine typically progresses like the following:

  • Shared Hosting
  • VPS
  • Dedicated single server - EE and DB server on one
  • Dedicated dual servers - EE on one server and DB on the other
  • Multi-server set-up - many EE servers to one DB server
  • Caching + dual/multi servers - EE on one server and DB on the other fronted by Varnish or Memcached

When a site gets to many servers vs caching + they are typically getting into that 5M+ visitors. This progression is nothing new. Most of the top CMSs would progress in the same way. I do want to be honest in that there is a propensity with EE to overload the DB server due to the fact that EE is a multi-channel system and on a single page of the site you could be pulling content from many different channels. Each of those bits of content from the various channels is at least a query (sometimes more) to the DB. So great care needs to be taken on high trafficked sites to limit what you are pulling from the DB and to be smart about how you employ EE. Typically if you limit what you are scanning for in the DB and you are still having performance issues on the front end of the site then you will need to go the route of putting a caching mechanism in place.

Workflow management

Workflow Management is an achilles heel with EE. If your organization truly needs multiple level workflow management with collaboration and more then I am not aware of a system being sold for less than $50k that can provide you with that. ExpressionEngine does have the ability to limit what a member group can do. So if I want the editor group to only be able to push entries to a status of Draft then I can do that natively. If I want a bit more functionality then I can use an add-on like Better Workflow which allows for an entry to remain live on the site, edited & saved as a draft all while the non-edited version stays live. The edited of an entry kicks off an email to an admin that can then review the entry and push it live to the site.

Document management

EE does not have a document management library function but due to it's highly flexible nature you can either create one in about 5 minutes or you can use an add-on like Channel Files to provide some additional functionality. If you have need for versioning of your documents then EE may not be the solution for you. In theory there is a way around document versioning and that would be to put all documents through the same versioning process that you use for files that make up the site. This work around would be confusing to non-technical folks. Another possible solution would be to use an add-on like Matrix and just add each version of the doc as a new row in the same entry. You could manually assign a version number or just use row count to do so. But either way, this is not a robust document management system like what can be found in the more expensive systems.


There is built in versioning of both Template files and Entries in ExpressionEngine. You will find that most ExpressionEngine devs are moving to external systems like Git to maintain a more comprehensive level of Version Control. As with most database driven systems there is a weakness when it comes to versioning anything that is stored in the DB. In ExpressionEngine this would include information related to the Channels, Channel Fields, Categories, Statuses and Entries.

Higher levels of support

Thankfully EllisLab addressed this recently with their addition of Private Support. Prior to this addition the only option was to either enlist the help of a qualified ExpressionEngine development shop or post your question to the public forums. For some organizations posting to the forums was just not an option. So adding Private Support was a necessity in addressing this issue. Now an organization can choose the level of support that they need.

So you see, ExpressionEngine is a reasonable CMS for use in websites at an Enterprise Level. Especially when you consider:

  • The low barrier of entry for learning EE which helps to reduce costs and increase the speed at which you can deploy sites.
  • The ability to extend EE for your organizations specific needs.
  • The multi-channel and data type flexibility and it's affect on the ease of use for non-technical editors and writers.
  • It's flexibility in handling different types of content.
  • The scaleability and EE's ability to handle millions of pageviews per month.
  • And more...

Sure there are a few places it does not fit the hard core definition of ECM. Mainly:

  • ExpressionEngine does not currently have a multi-level workflow management capability.
  • EE does not have a true document management system that ties into your ECM

But if your organization can work with a single level workflow management capability and manually manage their document versioning then EE can be a powerful asset to your organization. Especially considering the power it has for such a low priced CMS.

And, of course, if we can help just let us know.