I believe firmly in the extensions model when it comes to large plugins, in the same way that I firmly stand behind the idea that the best way to implement major functional features in themes is through the use of plugins. In general this model is pretty well accepted, but occasionally there are users that ask “why?”. There are a lot of reasons for expanding the feature set of large plugins via extensions, and I’d like to explain my own personal answers to why.
When I look at the extensions for Easy Digital Downloads, Gravity Forms, WP e-Commerce, Soliloquy, WooCommerce, Jigoshop, or even smaller plugins like BracketPress or Ignition Deck, I think “awesome”, these guys are doing it right, at least according to the model I believe in (note that I included my own plugin in that list).
A lot of people, however, disagree with me and feel the commercial extensions model (especially for plugins that are already commercial) is a number of things:
Obviously I disagree with these sentiments, but let me sympathize with them for a moment and detail some of the reasons these feelings exist.
When you buy a plugin, it’s great when it offers all of the features that you need, and it’s even better if these features exist in a free plugin. Who doesn’t like free? But what about when you purchase a paid plugin only to find out that the feature(s) you really need only exists as an additional paid add-on. That’s pretty frustrating, right? Yes it is. When the free plugin doesn’t have the feature you want, but there is a paid extension for the feature, that feeling could be good or bad. On one side, you’re happy because the feature exists. On the other site, you’re unhappy because you have to dish out some cash in order to get the feature. Why didn’t the developer(s) simply build the feature into the core plugin?
Many users have no issue paying for a commercial plugin, but then they get skeptical when they can download the main plugin for free but then have to pay for multiple extensions. Usually they think along the lines of this: why not simply build them all into a single plugin that is more powerful and provides all of the features for a single fee? Seems reasonable.
Why then do I adamantly believe the extensions model is best?
1. Unnecessarily heavy plugins are always bad
What does this mean really? It means that plugins that pack 100s or 1000s of features in have a serious problem with bloat. I’ve seen a lot of plugins that attempt to provide every feature under the sun, in order to accommodate as many users as possible, but when they do that, they suffer slower performance, increased maintenance, more bugs, and other issues that come with really large code bases.
I personally have a rule that says if only 20% or less of the plugin users are expected to utilize a feature, the feature does not belong in the core plugin, it should instead be built as an extension. Currently, we have 97 extensions for Easy Digital Downloads. It is safe to say that the majority of these extensions provide features that only a few users use. For example, the Paymill payment gateway is only applicable to those users processing payments through Paymill. Out of the total number of EDD users that we have, how many are Paymill users? Based on the number of sales / inquiries about the Paymill gateway, I’d say less than 1%. So should Paymill be provided as a payment processor included in the core plugin? Absolutely not. Doing so would simply introduce additional code weight and possible bugs to all EDD users, even though it is only relevant for 1% or less.
Imagine for a moment how much larger the Easy Digital Downloads code base would be if we included every single extension in the core plugin . . . it’s a frightening prospect.
2. Focused features
As I said above, I believe that all features that are likely to be used by less than 20% of a plugin’s users should be built as extensions. Usually features that exist as extensions are focused on a specific task. For example, the Audio Player extension for EDD is designed to allow musicians to display a preview of their music on their product pages. This is a very focused feature that is targeted at a very specific group of users. Musicians may wish the extension was part of the core plugin, but no one else would ever use it. Therefor the feature has no reason to exist in the core plugin.
3. Easier maintenance of the code base
The more you abstract your code, the easier it is to maintain. Separate “pieces” of code are dramatically easier to fix bugs in and make general improvements than large “blobs”. In this scenario, each extension is it’s on “piece” of functionality within the environment of the plugin it belongs to.
It is much easier for a user to turn off a single extension in the case that something breaks than it is for them to turn off the entire plugin.
4. Greater feature coverage
The creation of extensions allows you to introduce features to your plugin you never would have otherwise, due to the 20% rule. Easy Digital Downloads would never have gotten the ability to ship simple, physical products if it wasn’t for an extension. That feature simply didn’t make sense for the core plugin, but since a few users really wanted it, building it as an extension worked exceptionally well.
5. Greater flexibility
In order to build extensions for a plugin, the plugin has to first be built in a modular fashion, which means it can be extended. There are many, many plugins that simply can’t (or not easily) be extended via extensions at all. Then there are others like those listed above that make extending the plugin really easy.
By building your plugin in such a way that it can be extended, you also open your plugin up to other developers to extend. I assure you, I didn’t write all 97 extensions for EDD, a lot of other developers contributed most of them.
6. A solid business model
This is one of the really important reasons. In order for a free plugin, such as EDD, to be successful and generate a sufficient level of revenue, there has to be some element of the plugin that users pay for. Simply put: there must be a way for users to give you money, otherwise you will never generate enough revenue to support your business. Simple, I know, but it’s true.
By separating out features of a plugin into commercial (and free) extensions, you create a business around your free plugin. WP e-Commerce, WooCommerce and JigoShop are all other examples of free plugins that thrive on the business of selling paid extensions.
This brings me to one of the sentiments I hear a lot: that’s greedy.
Many users (it’s a minority) feel that breaking a plugin up into extensions that each have to be purchased separately is simply a way to force users to spend more money, hence the use of the term “greedy”. Is it? I don’t think so at all and I’d like to share a few reasons why I think this is completely inaccurate.
6a. The selling of extensions generates revenue for dozens of developers
If I and the rest of the official EDD team were the only ones benefiting from the revenue of paid extensions (this applies to all other plugins with commercial extensions as well), I could maybe sympathize with this “greedy” sentiment a little bit, but did you know that the vast majority of extensions sold (for all of these plugins) are not built by the core teams? That means the commercial extension sales are in fact directly benefiting dozens of non-team member developers.
For example, this month Easy Digital Downloads will pay out nearly a 3rd of its extensions-generated revenue to other developers. That’s a HUGE percentage.
By the time WooCommerce was 1 year old, they had paid out $281,778 in commissions to extension developers.
When we’re talking those kind of dollars being sent out to non-paid employees (just developers that contributed to make the project better) how can we think anything but “awesome”.
Assuming the plugin is open to 3rd-party extension developers, the revenue generated by extension sales is helping to feed the families of dozens, perhaps even hundreds. Greedy? I don’t think so.
6b. It is not about the money (for me at least)
While obviously paid extensions are, well, paid, they are not always given a price tag because we need another way to pull a few dollars in. Extension sales help finance further development of the core plugin, whatever the plugin is.
Do you think WP e-Commerce could pay several full time developers to continuously work on bringing the oldest WordPress e-commerce plugin up to today’s standards if they didn’t generate revenue from their extensions? No way.
Do you think I (Easy Digital Downloads) could afford to pay 5 part time support staff if there wasn’t money coming in to pay them with? No way.
It is not about accumulating wealth (though that would be nice), it is about continuing the development and betterment of the systems.
Even when not built for a commercial purpose, every plugin I build now is built such that it can be extended. By making it possible to extend a plugin, the door to features you never imagined building (or refuse to) are opened, even if it means other developers build an extension for your plugin to provide the feature they need.
There are quite a few plugins that follow the extensions model, some of them are free plugins with commercial extensions, and others are commercial plugins with commercial and free extensions. Here are the ones I could come up with in a short time period (not an exclusive list):