This post is over a year old, its content may be outdated.

Matt Wilcox

Web Development

Notes Jul 11th 2014

On Plugins

Why I don't trust applications that laregly subsist on their plugins.

Plugins, theoretically, are great. What's not to like about being able to add some functionality to your software? After some years of experience, particularly with web software, I'd say there's a lot to be wary of if those plugins are from third-parties. I distrust software that relies on plugins. Here's why:

The theory of plugins is that if you can abstract out functionality into discreet blocks then you can keep the core software lean, which makes it easier to maintain and develop, and that leads to higher quality software. Likewise if the plugins are kept separate then the functionality the plugin offers can benefit in the same way. That's sometimes how it works in reality too – Perch is a good example of a core bit of software with plugin 'apps' that enhance the functionality. And in the case of Perch, it's the same people developing the plugins that develop the main software, and it largely works well and to-plan – though there have been occasions even here with plugins that fall somewhat behind the core in terms of features (not being able to use the same techniques in a plugin-app as you would in a core area, particularly repeating regions or assets management features, for example).

The problem with plugins comes when the core product ends up being almost nothing but framework for plugins. ExpressionEngine* was a perfect example of this; you can build almost nothing real-world with just ExpressionEngine. You rely on a dozen plug-ins and add-ons. And most of those are from third parties. Third parties are not as dedicated to a product as the first-party people that build it. Sure, there may be exceptions, but the broad rule of thumb holds; and when you rely on plugins from third parties, the quality can be iffy, and the developer can just pull out. Support is much less reliable, and half the time (with EE especially) you'll be paying money for those plugins. And then you might find that some plugins just aren't compatible with each other, and good luck fixing that. Much of the time, they aren't written particularly well either, shunning the conventions of the core software, having their own quirks, or just plain not working robustly – so now you have to vet the quality of the plugin too. Was it written by a pro, or by someone working through MyFirstPHP? Even if it was by a pro, is it a rush job or a labour of love?

When you use a plugin, you are adding a point of weakness to your software. Especially if it's a third party plugin.

All of which is why I am loving Craft quite a lot. You can do a lot of things in Craft pretty easily without having to install a plugin. And yet Craft isn't stuffed full of functions like 'blog' or 'super cache' or 'SEO' that would make the software complicated. Craft, like any good software, focuses on giving you low-level tools in a simple syntax which you can use to build complex applications. I like that a lot. I like that a lot more than plugins.

You can think of building a website as though you were building a house out of Lego. Good software offers various Lego blocks, and you can combine them how you like to build a wall, a chimney, a roof, a table, etc. When you start using plugins you're using pre-fabricated walls and doors. Sometimes that's quicker, but you're stuck with whatever that thing is – wanted a 6 block tall blue door? Tough, the plugin is 8 and red. And only opens from the left. But you didn't find that out until you were a day into the build. You tried contacting the developer but they've vanished. Time to find a different door.

Of course all this holds for other software too, it's not just web software.

Be careful with plugins. Are they doing something truly useful to you, or are you just using them as a shortcut? Are you happy with what future support will be like for it? Are you aware of the cost of using the plugin, in terms of performance, reliability, and time?

*I'm not linking to it because that piece of software has robbed weeks from my life, and I would sooner recommend you dance on rusty knives than build a website with … that.