I'm a big advocate of lean plugins and I think we've done a stellar job removing unnecessary bloat from WooCommerce 2.1. The brilliance of having multiple plugins to add only the functionality you need reduces the number of bugs, keeps everything separated for easy updates, and perhaps most importantly creates a clean & intuitive admin interface.
There is of course a huge demand for customizing the behavior of WooCommerce (or any plugin). So where do you put that functionality? Do you put them in settings pages, extra plugins, snippets, tutorials, or something else? There's a few options to choose from and while none of them are perfect there are a couple of clear winners.
Where to Add Extra Functionality
Whether you're removing existing functionality or thinking about adding new functionality the hard part is deciding where to put that extra functionality. With WooCommerce 2.1 we decided to release the removed functionality as free plugins so every user can easily access them but I'm not convinced this is always the best choice.
Create Free Plugins
The most user friendly way is to create free plugins. This way any users who want that functionality can install the plugin and it's right there. No custom coding and easy updates.
Create Premium Plugins
The only real downside of free plugin is that someone has to maintain them. For every plugin you release you need to maintain it by spending man hours answering support questions and keeping the plugin up to date. So for each free plugin you release you need to make sure that it's enhancing your premium products or services and making enough money to justify the time commitment. If you don't think it will justify the time commitment that's when you need to make it a premium plugin.
Create a Snippet
Snippets allow a developer to quickly and easily change some functionality on a site without cluttering up the admin interface. This is really great for very specific settings but they're hard for your average user to implement, they can't be easily updated, and they're hard to find. I tend to only create snippets when adjusting the value or a filter.
Create a Tutorial
Tutorials are actually a really great way to share some highly customized piece of functionality. Like when you want to customize a checkout you have no idea which fields the user will want to remove or modify so you just tell them how to do it. The downside is that this is pretty hard for your average user to implement. But the good news is that if there's enough demand for this sort of functionality you can always create a premium plugin. This is what WooThemes did with the Customizing Checkout Fields tutorial which was later followed by the Checkout Fields Editor.
Create an Unofficial Tutorial
An unofficial tutorial is something you would publish on a site (like this) that doesn't have an official stamp of approval. You don't need to support the tutorials posted on your own site. I often do help users who leave comments on the blog but I don't have to. That reduces your support costs which allows you to do more work or create yet more tutorials.
Some of my favorite examples on this site are:
- Create The Ultimate Invoicing System Using WooCommerce
- Notify Admin of Customer Address Change in WooCommerce
- WooCommerce Terms & Conditions
Which Method Do I Pick?
Well honestly each of these have their place. I don't think any company should use just one method to the exclusion of all else. At WooThemes we actually have a mix of all of them. I would like to move towards a model where we have a better library of snippets which we could release as plugins (far easier to setup) and I'd like to remove some of the complex tutorials that some users get stuck on.