If that title left you feeling a bit indignant, this post is just for you. After consulting with my Nth company running a content site and watching them struggle to design, develop, and maintain their own CMS, I think it's time to admit this: I'm not better than WordPress. None of us are. WordPress is a fantastic piece of software and trying to roll your own CMS for a simple content site today is just sheer dead insanity. A wise man once said:
It is the duty of every good developer to try to code themselves out of a job.
That man was me, by the way. This wasn't meant to say that you should just quit your job and go live like Thoreau in the woods. It's meant to say that you should embrace ideas, principles, and systems like Don't Repeat Yourself, Minimum Viable Products, Keep It Simple, Stupid, and the Single Source of Truth. These principles all engage pragmatism as related to programming process and design and encourage us to do things once and do them well. Something that we as designers and developers constantly forget is that these principles don't just apply to the one software project we're working on right now; These principles apply to everything across the software ecosystem and indeed across time. Don't solve problems that have already been solved! That includes problems that have been solved by other developers, in other industries, and years into the past.
If you needed somewhere to sit you wouldn't go chop down a tree and build a chair, would you? When you want to listen to music you don't start soldering buttons, resistors, and RAM together, do you? When your clothes are dirty, do you start designing the best way to wash them or do you just pop them into the washer and dryer that somebody else already built? So when you need to put a simple blog on the internet (and yes, your site is just a blog) why would you hire a team of developers to start creating a CMS for you when there are already plenty of options out there?
What I see time and again is that people reject using Wordpress for 1 of 2 reasons. The first is that they just didn't do their research properly and they didn't learn what's out there and what the strengths of various frameworks are. The second is that they just plain think they're too good for WordPress(This is basically a textbook example of the Dunning-Kruger bias). Well, I'll admit right away that WordPress is not sexy anymore. It's not the perfect solution to everything. And seemingly in spite of everything good in the world, WordPress runs on PHP and ... ew.
WordPress is an excellent choice for a content site CMS
- Your blog isn't complicated. When you start thinking about all the little things you want your blog to do, it can seem overwhelming but trust me, other people have done it before and they've done it with WordPress.
- Your blog doesn't have scale that WordPress can't handle.
- Your in-house team will NEVER catch up to the feature set in WordPress.
- Your in-house team will NEVER create something more stable and secure than a platform that's vetted by millions of people. Whether you call it a post, article, blog, story, listicle, blurb, review, communiqué or whatever else, it's still just a giant text blob with some images and a little metadata. That's a simple content website. The thing that WordPress does best.
- Programming is really really hard. While rolling your own CMS seems so very do-able: it's not. Trust me when I say that you will spend years on it, you will spend millions of dollars on it, and eventually you will replace it because it became a monster.
- You have custom content types? Holy shit! Nobody's ever done that before! WordPress doesn't just let you have a special post type, it lets you create a custom template for it. And a custom metadata structure for it. And custom widgets and permissions and icons and admin layouts and everything else for it. Including whether or not it's even visible in the admin GUI.
- Security? WordPress runs literally a quarter of the Internet. Think you can do that and be super easily hackable? Seriously. Look at all dat security. It even updates itself!
- It's not pretty enough? Absolutely every part of it is theme-able. Embrace the feature set and just layer your own styles on top. Doesn't fit your publishing flow? Meet my friends the 900 editorial flow plugins(slight exaggeration but you get what I mean). All free. All the time.
- The most popular plugins easily and automatically handle things like SEO and CDN configuration. It's almost too easy to get all your important features.
When you should definitely not use WordPress:
- You're working on an application or other site that is not content-based. That is to say that your application is heavily interactive and focuses on users taking action rather than just looking at things.
- You're a developer yourself and you're only running a blog. WordPress is easy but you can probably do better. Make a static site or write your app in Lua or something crazy like that. Be interesting!
- Hosting or especially streaming media. WordPress is just not a music or video host. It can be but it's just not.
- If you hate happiness and want to work on something redundant for the next several years.
- You're an arrogant bastard and think that you can do it all and you can do it better. You probably have an IQ of like a million and find tasks like reading the entire dictionary in an afternoon to be trivial.
- You got in a fight with Matt Mullenweg in 6th grade and you've never forgiven him for it.
All of these things are solved problems and you can do all of them very easily with WordPress:
- Complicated media styles
- Editors inserting code
- Permissions management
- Social media integration
- Running multiple sites on one install
- Importing and exporting data to and from any other service
- A/b testing
You don't even need to worry about hosting! PHP configs, MySQL configs, networking, backups, ports, routing, and memory management are all things that have been solved already and are available to you in stunningly simple and affordable services like WP Engine and WordPress VIP. Or roll your own service but take advantage of the work done by others with something like the WordPress Docker image.
Wordpress has methods for absolutely everything. Whatever it is you want to do, there is a more secure and efficient way to do it with a native method. I never even needed to learn sql when I was a Wordpress developer because the database abstractions are that good.
Backups and migrations? WordPress has things like the Heartbeat API that will automatically store versions of articles as you write them. Your entire site config is stored in the database and a litany of plugins will help you quickly set up hourly, daily, and monthly snapshots of your entire database.
Say to yourself "It's just a blog" and repeat until you believe it
I've worked on plenty of WordPress projects before. I've written themes and plugins and even made a tiny contribution to WordPress itself. I wrote the plugin to easily add CORS headers to your site (a function which is now built into WordPress core). This post is not an endorsement of WordPress as the solution to every site and every problem. After everything I've done with WordPress already I'd rather work on more interesting problems like design systems and getting my time-to-glass as low as possible on 3G networks. So, in the same vein, this post is meant to encourage you to think about the problems and projects you face and attack them pragmatically. Let other developers deal with solved problems for you and work on interesting things yourself! Get out there and code yourself out of a job!