davidsneighbour / colossus-wp-options-framework

The easiest to use WordPress option framework.
4 stars 0 forks source link

To Embed Or Not To Embed / Release Schedule ? #31

Open codeclinic opened 4 years ago

codeclinic commented 4 years ago

Whenever I tried adding Titan as an Embedded part of my plugins, it just never worked. Titan was often unavailable to my scripts and this seemed to be sporadic. I had similar issues when referencing Titan as a standalone plugin, but it worked much more reliably than the embed method.

On the other hand, I had lots of feedback saying from people saying that they were outraged at having to install a separate plugin (Titan) just to use my plugin. As Titan got abandoned and the last update got further and further away people got even more angry and started suggesting that it was a huge security issue and that maybe my plugins were some sort of malware.

Regardless of peoples reasoning, I know it cost me a lot of users and ultimately customers for my plugins. To the point where I've essentially stopped development on them until I could find time to rewrite them using a new Framework. Luckily we now have Colossus WP Options Framework!

So....

My question is do we want to split releases into two clear installation paths ? So we would release an Embed version and the Plugin version, so as to make it easier for people to use one method or the other. If I recall correctly using the Embed method required you to remove some files and place things in the right folder etc. I know it wasn't a huge task but would we make it easier for people to Embed by Saying "Heres the Embed release, just drop it in X folder in your theme and then add this line to your functions"?

Do we even want to encourage people to use the embed method?

In terms of the plugin version -for the reasons mentioned above- we should try and keep releases on the WordPress.org directory frequent, so that it always appear up to date. However, I know WP rules states that you shouldn't submit plugins with a fake version bump. There should be actual updates to the code in every official release.

Perhaps we need to have a release schedule. That way we can always have a release every x weeks / months no matter how big or small the changes made.

Thoughts?

davidsneighbour commented 4 years ago

Opinions here, not facts ;)

I know plugins/systems that use the fixed-release-cycle method to get out versions more often. I think it's a bad idea in sense of having a binding date for a minor or major release version. I always find Yoast SEO's release cycles funny ;) "Let's introduce a new minor version because the old one is two months old!". It's absolutely ok to release patch versions often. The only problem with "release often" is, that if those patch versions fail the end user in sense of introducing bugs instead of fixing them will tire them of updating often. So we need an absolute "failsafe" way to do code and feature testing. Once the trust is broken we will have a hard time arguing for the end-user to install "yet another update".

A release calendar forces us to sometimes have "pretend" releases. I much prefer to release each time we fix a bug (patch release), have a minor release on new features and a major release on breaking changes.

Regarding the splitting: I was looking over the embedding classes today and we have open tickets where in sub-sentences we hear that embedding multiple times (more than one theme or plugin is using Colossus) fails. There are ways to mitigate this, but It opens up more than "which plugins/themes colossus are we using"... for example if versions differ or breaking changes are introduced.

All in all from a programmers point of view we can have a plugin and an embedding class. The plugin will need interfaces so people can add option pages and structures via an interface, the embedding plugin would just use the core Colossus system to parse developer-defined arrays of setups. I would implement this via a composer package system. It makes sense.

I always embed Colossus (well, ehm, Titan Framework) in my themes, because a plugin might get deactivated by a well-meaning end-user that does not know it's used.

Let's think about this... maybe it's "just" a line of code that we need to document properly instead of separating and clustering code.

codeclinic commented 4 years ago

@davidsneighbour Fair points.

My main concern is that we don't leave long periods of time between any two given releases. I think 3 months would be the longest before it could have an impact on whether the average non-tech WP user questions whether to allow Colossus to be installed or not.

Personally, I've always gone with the approach of doing releases with pretty much every code change. The only real exceptions being if I know I'll be doing more edits in the next day or two. However, I know some people are really against this and insist on releasing stuff in sizeable chunks. For me that just means holding back features, and bug fixes that could be out there helping end users.

So, if I understood you correctly, we're in agreement that we should just release things as soon as we have something implemented and tested.

In terms of Embedded v Plugin... That was more about having the discussion and if you don't feel it's worth the extra hassle, then I'm fine with that.

davidsneighbour commented 4 years ago

With the new auto-update functionality of WP5.5, we can release early and often without losing users over having to update too much. Regarding the embedding, WP plugins team sent a response to me that sounds like they don't want us as a plugin.

---snip---

Sadly in this case, we would not accept adoption, and we would not accept a fork as we no longer permit framework plugins to be hosted on WordPress.org

Why these kinds of plugins are not accepted

To explain the terminology here:

Framework/Boilerplate: a template from which more code can be built Library: requires other plugins or themes to edit themselves in order to be used

We require that plugins be useful in and of themselves (even if only being a portal to an external service). This means that a plugin should either be installed and be fully functional, or it should have some administration panel.

When a plugin requires either the plugin itself to be edited to work, or can only be used by writing code elsewhere, it ceases to have as much a benefit to end users and is more of a developer tool.

While there are many benefits to frameworks and libraries, WordPress lacks any plugin dependency support at this time, which causes a host of issues.

The parade of likely support issues include (but are not limited to):

not recognizing the need for the library or and thinking they’ve been hacked not properly forking the boilerplate and editing it in place, resulting in updates erasing code not recognizing the need for the library plugin, and thus deleting it (causing others to break) updating the library plugin separately from the dependent plugins, leading to breakage updating a dependent plugin without updating the library, leading to breakage different plugins requiring different versions of a library plugin without proper if-exists checks

We feel that libraries should be packaged with each plugin (hopefully in a way that doesn’t conflict with other plugins using the libraries). At least until core supports plugin dependencies. Frameworks, in and of themselves, have no place in our directory as they are non-functional templates

---snip---

Adding an interface to create options by the plugin itself might be an option, but requires plenty of work to implement.