A few years ago I once said sth along: "oh yeah, we could make the core super small & lightweight and have almost everything work as a plugin".
Well, that was a very long time ago... in between I have realized this:
- The plugin architecture works well for some features and is just a horrible hack for some others. Making it clean would require such a complex plugin architecture that it would actually defeat the purpose of simplicity we had in the first place.
- The plugin approach is very much like a "linux package" approach: incredibly appealing to geeks. I can understand that. It's also equally incredibly impossible to grasp for my father (let alone my mother). In other words: the majority of users faint when they have to think about "installing", "compatibility", "dependencies", let alone "conflicts".
- Adding more features/modules/files to b2evolution actually does not make it slower. Most of these files are never loaded into memory except for the exact moment when you use them. Splitting an app into multiple files is actually the simplest possible plugin system you can imagine.
- I switched to the Mac... And this is something I would never have understood before: a system made of parts assembled from different sources will never match the experience of a coherent system where everything has been designed and tested to work together (I'm not saying our testing process is perfect, just that it's better than untested assemblies of parts from various sources). It's not like the Mac won't let you install 3rd party software. It's just that it provides you with a basic set of functionality that makes it possible for most beginners to NOT EVEN THINK about the system for several months/years. IT JUST WORKS for everything they need, until significantly later in their learning curve.
This is why, when I repeatedly read/see/hear users trying to do this or that with b2evolution, I now tend to consider whether or not that feature would make sense in the core/distribution/as a bundled plugin.
b2evolution will never have all the features everyone may need. And for every feature it has, there will always be a plugin with more advanced features. But my ambition is that most users starting with b2evolution won't NEED TO THINK in order to do what they want to do until several months down the road.
Right now, too many run into a missing piece before they even start blogging.
Inspiration: Don't Make Me Think: A Common Sense Approach to Web Usability by Steve Krug.
In my mind, plugins are particularly useful in these situations:
- Features that are useful only to a minority of users;
- Features that are experimental;
- Interfaces to proprietary systems (like twitter for example);
- Giving options when there are competing solutions (like wysiwyg editors).
Comment from: Member
Note that by these guidelines, the gravatar feature should not be in the core but in a plugin that kicks in when there is no built in avatar. However, this feature was contributed as is by @sam2kb and I thought it’s better to have it in the core than not having it at all. Someday, the gravatar part will need to be split out to a plugin though.