Building Plugin Stacks for Complex WordPress Sites
With the right plugin stack, WordPress can produce some powerful and complex sites. But WordPress has no central authority coordinating everyone’s efforts, so plugin incompatibilities are a big problem.
That’s like, the textbook definition of complexity:
Complexity characterises the behaviour of a system or model whose components interact in multiple ways and follow local rules, meaning there is no reasonable higher instruction to define the various possible interactions.
For sites with 30, 50 or 100+ plugins, minimizing plugin issues by addressing complexity itself will allow you to create a deep plugin stack to meet your client’s needs.
If you’ve been trying to build complex sites for your clients and keep running into issues getting plugins to cooperate, this post is for you. I’m going to show you how to manage complexity, by preventing it in the first place and minimizing the risk that something will go horribly wrong.
Mo’ Plugins, Mo’ Problems
The more plugins you have on a site, the more likely you’re going to encounter plugin conflicts. Why is that?
The more plugins you add, the more interactions between plugins you create, and interactions add up fast. When you add a new plugin, you’re not just increasing site complexity by one, you’re exponentially multiplying the plugin interactions by the number of existing plugins. A small site with 7 plugins has 21 plugin interactions, whereas a large site with 30 plugins has 435 plugin interactions!
Well, that escalated quickly.
When plugins stop being polite … and start getting real
In complex systems we need to pay careful attention to the plugin interactions since interactions are where the drama and also the magic happens.
The process is a lot like adding a roommate. You not only have to consider the merits of a person, but also how they’re going to get along with everyone else in the house. Have you ever had two boring, chill people come together and bring out each other’s wild side that you didn’t know existed? That’s the effect that interactions can create.
In systems theory, when the interaction of elements produces something not found in any of the individual elements, this produces a phenomenon known as emergence. But good luck trying to predict what will emerge, because unintended consequences and side effects are closely related to emergence.
This the very nature of WordPress, with different developers doing their own thing without coordination, it gives rise to complexity.
We need an approach that takes complexity into account. I know, that’s heavy duty Doc.
Where We’re Going, We Don’t Need Roads
When it comes to managing complexity, we absolutely positively, no ifs-ands-or-buts need a holistic approach. That’s why this post specifically focuses on building a whole plugin stack. When we see the bigger picture, we can use systems theory principles and that’s when things stop being so frustrating and start getting, dare I say, fun :)
Now systems theory is crazy cool and vast, so for this post we’re going to focus on
- Creating favorable initial conditions
- Utilizing subsystems
- Looking for emergence
The Fewer Plugins the Better
Plugins are cool and we’ve all been guilty of installing too many plugins just because it’s so dang easy and they’re (mostly) free! For complex sites, you need to keep the plugin hoarding in check and choose the fewest plugins possible to accomplish your goals. Sometimes you can get all the functionality you need from a much simpler set up than you thought.
For instance, let’s say I want to set up a multi-vendor marketplace like Etsy. Here’s the features I want to have:
- Create storefronts for each vendor
- Pay commissions to each vendor
- Need global site wide shopping cart
- Create a simple sign up process for vendors
- Need standard eCommerce functionality (product management, shipping, taxes, etc.)
I could choose 5 different plugins, one for each feature and then some, or I can use two multipurpose that can give me the most essential functions I need.
Keep complexity as low as possible by using the fewest number of plugins. Map out the features you’ll need before you get stated. Could a different combination of plugins solve the problem and eliminate the initial need for other features all together?
First Things First
When complexity is low in the beginning, you have more possibilities to choose from. Use this flexibility to put the big pieces in place first. Your theme and the initial plugins you choose for the foundation of your plugin stack will set the stage for how everything else will work together.
Select plugins that will give you the most high-priority benefits and provide as many critical features as possible. If this limits your options, at least you’ll have the important functionality you need.
For example, let’s say you want to create and monetize a social network site of some kind. The social aspect is the essence of your site, so choose the social network plugin first. Then choose the plugins to manage Avatars or Instagram feeds or other nice-to-have features. If you work backwards and choose an awesome Avatar plugin that’s only compatible with bbPress when you really wanted to use BuddyPress, then you’re not going to accomplish your goals.
Choose plugins that suit your needs, don’t bend your needs to suit your plugins.
Keep it in the Family
The next addition to your stack are plugin families, or plugins created by the same developer or team.
These plugins were designed to work together. When an update is introduced to one, the plugin has likely been tested by the developers to work with the other plugins in the same suite. Whereas choosing plugins that are unrelated are more likely to have compatibility issues.
This is because subsystems can function as a whole within the whole.
Here’s some examples of plugins that work together nicely:
- JetPack, Akismet, VaultPress are all by Automattic
- WooCommerce has literally hundreds of extensions
- Elegant Themes has plugins to create a Divi subsystem
- WPMU DEV has several plugin families
I guess you can say we’re complexity experts. Which we totally are since our support team will back up no matter what host, theme and plugin stack you’re using.
Adding a plugin family is the next best way to add a lot of features to your plugin stack without the drama.
For your site utilities, such as SEO, backups, social media sharing, security, etc. choose a plugin family instead of unrelated plugins if you can, even if you need to sacrifice a couple features. A subsystem is independent with its own boundaries and rules, so internal conflicts have been addressed.
In the same way that choosing plugins in the same family have a central authority to manage incompatibility, a plugin author is also a central authority and manages inconsistencies within their own plugin. For this reason, choosing one plugin that adds several features is better than adding a handful of unrelated plugins.
Before you start adding a random assortment of plugins to handle the leftover features you’re after, look to see if the existing plugins in your stack can take care of your needs.
You might be surprised that the unique combination of plugins you’ve chosen gives you bonus features you weren’t anticipating. The more plugins you have, the more likely this is to happen, which is a pretty cool byproduct.
This is the magic of emergence at work.
Let’s go back to my ecommerce example. Say I want to create an easy way for the vendors in my marketplace to submit blog posts. Since I installed Forminator to create my site’s contact form, I can use that. Forminator has form fields that create blog posts automatically. I don’t need to install an extra plugin or an extension for Forminator, since this feature is already included.
If you choose versatile plugins for your stack, you’ll be able to use one plugin for multiple purposes or in new and creative ways.
For example, Ultimate Branding allows you to customize your WordPress admin in various ways. Did you also know that you can use Ultimate Branding to configure SMTP for your site’s emails? Rather than installing a separate plugin for SMTP, if you already have Ultimate Branding installed to say, customize your login screen, you can use that for SMTP also. Then you can customize your site emails since Ultimate Branding does that too. See what I mean?
As you’re building your stack, stop and see if you’re existing functionality can give you what you need because of the way your plugins are getting together.
OK so the first part of our strategy is to try to reduce complexity as much as possible. Once we can’t simplify, consolidate or omit plugins any more, then we need to adjust our approach slightly, from avoiding risky combinations to managing the risk. This is when we get into the realm of probabilities.
Before you include another plugin, ask yourself if the benefits outweigh the risk, then choose the highest quality plugin you can find. We’re trying to reduce the likelihood that things will go wrong, but keep in mind that we can’t eliminate the risk entirely.
For this reason, make sure you address this with your client. Things will go wrong so prepare them to expect the unexpected. Explain how it is “normal emergent behavior in complex sites” and that you have a plan in place to deal with it. Oh, and actually have a plan.
Don’t forget to test all new plugins in a staging environment and always have a backup ready when managing a plugin heavy site.
I liked that plugin before it was cool
When expanding your site’s functionality, be extra vigilant when you include obscure plugins because they’re high-risk. You should always be wary when installing an unpopular plugin, but on a complex site, you need to raise your standards even more.
Reading negative reviews will help you understand if the plugin has a deficiencies or if someone else is encountering conflicts with other plugins.
You can and should reach out to the developer and ask if there are any known issues with other plugins.
Keep an eye on unanswered support requests. Too many unanswered requests could indicate an absentee developer, which means won’t have someone to help when things inevitably go wrong.
“You can’t have a plugin conflict if don’t have plugins right? I’ll just use snippets instead!”
If only it was that easy. In complex sites, I’d advise you to not add snippets to your theme to expand functionality. For one, if you ever decide to change themes, you’re going to have to move all those customizations over.
Also, keeping the code in a plugin makes troubleshooting incompatibilities much easier. If you separate your code into modular pieces, you’ll know exactly which parts of your custom code are causing the issue when you troubleshoot your plugins.
You can have issues whether or not your code resides in your theme or in a plugin, but plugins are usually updated, whereas code snippets are not. If you have a function that develops a security vulnerability, it will be your responsibility to find it and fix it. With a plugin, you’ll have the benefit of a community helping you keep an eye on it.
How many WordPress developers does it take to screw in a lightbulb? None, there’s a plugin for that
Hopefully by now you’ve come to the conclusion that when it comes to WordPress, we can’t completely eliminate complexity. We can only manage the risk and reduce the likelihood of plugins going wrong. That is until, Gutenberg helps us standardize parts of WordPress with its modular blocks so we have fewer incompatibilities to begin with.
In the meantime, a paradigm shift that takes complexity into account will make building a complex site less frustrating. Once you make the shift, you’ll have hours of fun applying the same principles to come up with cool solutions to other complex problems like climate change and economic inequality. Too heavy?
I g-guess you guys aren’t ready for that yet. But your kids are gonna love it.