Framework vs CMS: Which is best?
It seems there is always fan-warfare on this topic. Purists vs the sell-outs almost. So what gives? Which is better for your project? A CMS or a framework?
First let's clear the air on what a framework is versus a CMS.
A software framework is a low-level software providing generic functionality that reduces the amount of overhead in developing a given project. Frameworks usually provide some form of database interaction, authentication, and router model to allow providing responses to web requests. The key adjective here is low-level. Frameworks are smaller tools for building larger tools / solutions.
The target audience of a framework is strictly the developers.
Content Management System
A CMS is a high-level software that supports the creation and management of content to be displayed. A typical CMS would likely provide user management and authentication, some type of page manager, maybe a blog manager, settings, etc. High level meaning there is less effort left to the developer. Generally speaking there is less control left to the developer too. Less "freedom".
Anyone from the developer, to the project manager, an assistant, business owner, or an editor can and likely will have their hands on the CMS at one point or another. It should be accessible on some level by everyone involved.
Benefits of a Framework
A good framework will provide just enough out of the box to handle rapid deployment of most of your project's basic needs. Authentication, a routing stack, some form of dependency container, an ORM (object-relational mapping) for databases, and various support classes.
The idea of a framework is to give you a solid foundation-only to build your website or application rather than writing everything from scratch. Saving time and money. A good framework should follow long established programming standards like SOLID / DRY principles.
Downsides of a Framework
In my eyes, there is no downside to a good framework outside of the obvious things it's not designed to deliver. Laravel and Symfony to name a couple are in my opinion fantastic options for a standards based, enterprise ready framework. Both are versatile, extensible, and rock solid in their principles which are shared in the greater programming community's philosophy of top quality coding practices. Both provide enormous value out of the box, both are modern, and both support packages to extend the framework with framework specific or agnostic packages.
The downside one will typically hear about frameworks is that they don't do enough. For example you won't get a control panel or any kinda of graphical user interface at all! But.. they're not designed to provide that. Which is the catch. You have to build that yourself or piece it together with 3rd party packages.
Benefits of a CMS
A good CMS should provide even more of a jump start than a framework does without hindering the positives of the framework itself. Not only do you have authentication from the framework but you also have complete users management via the CMS. Not only do you have routes and controllers from the framework but you also have a page / blog / general content manager that's routed automatically for you through the CMS. All you have to do is point and click and things happen for you.
CMSs provide nearly everything you need to build a website out of the box. And you can usually purchase / build components needed to fill in any gaps in the project. Having an out-of-the-box solution is a huge benefit when kickstarting projects.
Downsides of a CMS
Downsides of a CMS can be aplenty! Too much clutter, inconsistency in operation / appearance, poor underlying foundations, poor code quality, not being extensible / forcing the developer to "hack" the core files, in general poor principles in design / execution can be a major issue in any CMS. Users beware when choosing a CMS!
So which one to should you use?
Which one is better? Why? Well you might have seen it coming but it depends, right? Maybe not...
I suggest a third alternative. Use both a framework and a CMS. Leverage both a low-level framework and a high-level CMS.
The problem is we've seen this concept of a framework AND a CMS fail time and time again. However I argue that the failure is not in the idea or concept but the principles of the design implemented in the solutions so far. None of the existing systems following this approach achieved synergy. Either the framework was too rigid to allow a complex CMS to be built over it without destroying the framework or the CMS destroyed the framework by not respecting it's responsibilities vs the responsibilities of the framework. Often times the CMS just consumes the framework and you can't change one without destroying the other entirely. Time and time again we see this.
You're doing it wrong!
This is not necessarily why I built PyroCMS but this is one of the principles I discovered in the beginning of the process and it's deeply ingrained in my walk, talk, and CMS. This principle is very near the DRY programming principle (don't repeat yourself) and also the O in S.O.L.I.D. principles (open for extension / closed for change). These industry accepted principles can and should apply to your larger application concept as well as individual class / service design. This is usually not the case!
As a result of following these principles, PyroCMS is 100% transparent with the framework beneath it. Not only that but it is 100% modular and vastly extensible because it's closed for change.. but open for extension in every way.
With a synergistic bond between CMS and framework you get a win/win relationship. End users get what they want with the CMS and they get the consistency and structure they need to organize their work with a well thought out CMS architecture. Developers get what they want and can rapidly build and deploy projects of all sizes and complexities with the help of both the framework and the CMS. It's win/win.
To a client this is beneficial because you can rest assured there there are solid principles in your product. You're not locked into a proprietary skill set. You have a much larger community of developers that can easily accommodate your needs should they change.
Lastly I would hesitate to use a CMS that claims to be it's own framework or has a framework maintained by the same group as the CMS. This is an unhealthy conflict of concerns and will inevitably cause the same issues I mentioned above.
Choosing to use a CMS and a framework cohesively allows you to reap the benefits of both. It's for this reason that we, as well as many others, choose to use PyroCMS.
If you are not yet familiar with PyroCMS, it is one of the content management systems we utilize here at Terrostar. Developed by our own Development Strategist, Ryan Thompson, it is a powerful CMS that is a great fit for many of our clients. If you are interested in learning more about what PyroCMS can do for your site, contact us!