Make vs. Buy: 5 Reasons Why You Should Not Build Your Own CMS
Tags: graphql, architecture, management, saas
Published: 2019-07-22 12:48:04

How do you get the customizability of an in-house CMS without the associated costs and risks? Consider [headless content management](https://graphcms.com/academy/headless-cms). Building your own CMS is a long journey you do not need to make anymore. No need to reinvent the wheel or take unnecessary risks. Developer resources are freed up and can now be fully invested in features that are directly related to your core business.

### 1. A native headless CMS is highly customizable
In theory, building your own CMS assures full customizability to your specific use case. In practice, a custom system is more likely to be a patchwork of compromises. It will be the result of internal politics struggling for prioritizing features that ultimately leaves everyone dissatisfied. It will fit your process at a specific moment of time but any later changes will require a rewrite of large parts of your code.

An un-opinionated, headless solution (e.g. [GraphCMS](https://graphcms.com)) fits the widest range of content modeling and API design needs. Front-end and back-end are decoupled, so you are able to define and build **all customer-facing features** – your entire frontend. Features like Custom Roles with granular access permissions enable you to adapt the CMS to even the most complex editorial processes.

### 2. Set-up times for a headless CMS are much shorter
You can set up an entire website in less than an hour with some of the commercial headless solutions – incl. content architecture, API design and connecting your frontend. 

Building your in-house system will set you back months, maybe years, with designing, building, and debugging.

### 3. Building, maintenance, and switching costs are lower

The total costs of an in-house CMS consist of *large upfront* and *continuous ongoing maintenance* costs. Upfront costs measured in developer time will set you back 18-48 developer months for the most basic CMS. Ongoing maintenance consists of costs for hosting, a CDN, an authentication layer, developer tools, and some dedicated developer time for monitoring and bug fixing.

The monthly costs for a headless CMS start as low as a few dozen dollars. Even the most demanding enterprise companies won’t spend more than a few thousand dollars for the highest levels of service per project. 

Switching costs to a new vendor are also significantly lower thanks to the modular nature of a headless system. A native headless CMS is unopinionated allowing you to build your content infrastructure like lego-building-blocks. If you ever decide to move, you won’t need to build both your frontend and backend from scratch.

### 4. A way to maintain ongoing innovation
Best case, an in-house solution will fulfill your requirements only for a fixed period of time. If you never change your processes and never adopt new technology (e.g. smartphones or whatever comes next), that is ok. Probably, you will need to adapt to stay in business. So, you will need to extend your system in no later than 1-2 years. Once again, a new project team to brainstorm, innovate, build, test, deploy, and bug-fix.

A headless CMS company’s bread and butter is in innovating. Upgrades will come regularly and at a much lower cost, if not grandfathered into the existing price. Selecting a young company with a growth-mindset means a constant in-flow of exciting new features for at least the next 5-7 years.

### 5. A way to avoid taking care of systems you don’t want to build yourself

A complex solution like a headless CMS consists of multiple sub-systems that must work in perfect coordination. For many of these, you definitely don’t want to take care of maintaining them yourself: server set-up, security layer, authentication layer, digital asset management, and CDN setup to name a few. Other subsystems need to be built by engineers with hard-to-find expertise: content model APIs, GraphQL server setup, workflow design, user role design and more.