Performance Chat Summary: 10 January 2023

Meeting agenda here and the full chat log is available beginning here on Slack.

Announcements

Discussion: Unbundling Performance Lab

  • @flixos90: Want to emphasize that we should decouple how we develop these features from how we distribute them, with this conversation focused on the latter. We can keep working in a mono repo to keep development overhead low no matter which approach we choose for distribution.
  • @olliejones: It seems like any attempt to figure out what a “canonical pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party” is might be a waste of time, as it’s up to Matt, not us
    • @flixos90: The canonical plugins topic is related but not really connected. Agreed it’s not on us to decide, but also don’t think we need to do that to determine how to unbundle Performance Lab. The ask is to distribute the features as individual plugins – whether or not they’ll become “canonical” plugins isn’t directly relevant to the unbundling.
  • @flixos90: As comment notes, we’ve considered three options so far:
    • Option 1: Keep PL as is, but additionally deployDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. modules as individual plugins
    • Option 2: Make PL a “wrapper” focused on central infrastructure and recommendation of individual plugins
    • Option 3: Deprecate PL completely in favor of individual plugins
  • @masteradhoc: Don’t see SQLite as something that needs to be in PL and WebP can also be standalone. How do you define if a feature should get into the plugin or be standalone? Would go for option 3 to keep everything separated and have some sort of list to keep track on what is being worked on. However, this still doesn’t solve the bigger issue – what happens if the argument is still to not merge them into coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.? What will make a canonical plugin in the end? How can we really move WP further in performance?
    • @flixos90: The idea is that all modules of PL are standalone features, so option 3 would mean each module would become its own plugin. The PL plugin has a lot of benefits that we would lose if we go with this option, which is why it’s the most unfavorable to me. There are several feature plugins that weren’t merged into core – either they continue to be developed to eventually get there or they get archived.
    • @masteradhoc: In that case, think more of option 2. Wouldn’t do option 1 as it seems like duplication.
    • @flixos90: Yes, there would be duplicates, but it’s not necessarily bad. It’s the best of both wolds, similar to how Jetpack works as of today.
  • @spacedmonkey: Could a feature be both a standalone plugin and in PL?
  • @olliejones: We have one canonical plugin now, Akismet, that’s available to every WP install but not required – is that what Matt wants for performance?
    • @flixos90: Nothing would be pre-installed; let’s focus on unbundling as opposed to canonical plugins since we don’t know what those are
  • @spacedmonkey: It seems to only make sense to break off larger feature like WebP or SQLite into separate plugins
    • @masteradhoc: I wouldn’t install a plugin just to get additional Health Checks
    • @flixos90: It’s a blurry line – it would require the overhead of a discussion on every single feature to decide if it should be a standalone plugin. Would be in favor of a single consistent decision to save ourselves the overhead later. This is how feature plugins have always worked. FWIW several plugins have only ~50 installs because they’re so specific.
  • @spacedmonkey: Could have a Performance Lab module and a GH repo template for them, would help with maintenance
  • @joegrainger: If we deploy modules as individual plugins, will they have their own repos and if so will they be in the WordPress organization?
    • @flixos90: Yes, only on wp.org would there be separate repos
  • @mxbclang: Are we comfortable that keeping PL and deployingDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. separate plugins fulfills Matt’s request? We would still have a single plugin with all of these features
    • @flixos90: We’ll have to see of course, but main ask was individual plugins
    • @adamsilverstein: Not sure this really meets his requests, he very explicitly said of SQLite that we should “stop putting additional things like this into Performance Lab”
    • @flixos90: From my perspective, since Jetpack does Option 1, this should be a reasonable approach
  • @spacedmonkey: Jetpack is an example of a mono repo with multiple plugin projects: https://github.com/Automattic/jetpack/tree/trunk/projects/plugins, which is a good example of how Option 1 would work
    • @kraft: Jetpack system uses composer packages for things shared between plugins and they get called in via them, happy to answer any questions about the setup
  • @mxbclang: Option 3 is also a burden for support, since each plugin has its own support forumSupport Forum WordPress Support Forums is a place to go for help and conversations around using WordPress. Also the place to go to report issues that are caused by errors with the WordPress code and implementations. that would need to be monitored
  • @spacedmonkey: Marketing is also an issue, where do we push people to?
    • @flixos90: Depends on the context, likely PL primarily, but individual plugins would also be available. A feature proposal post would highlight both as equal options for testing.
  • @olliejones: Option 1 lets us keep moving on development, but it carries the risk of Matt pushing back
    • @flixos90: FWIW both Options 1 and 2 carry that risk
    • @adamsilverstein: Makes me lean toward Option 2
    • @flixos90: Benefit of Option 1 is that it would continue to work as is for the people who have PL currently installed; Option 2 would require a complex migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. that users likely would not understand
    • @adamsilverstein: Good point, thinking more of the end user who hasn’t tried “feature X” yet and having a separate plugin might be a better experience
    • @flixos90: Options 1 and 2 would be have separate plugins for each module
  • @spacedmonkey: Having each functionality in its own plugin helps with testing
  • @spacedmonkey: What defines a module? Would the current Site Health checks all be together, for example? SQLite and WebP are clearly their own modules, but what about smaller things?
    • @flixos90: Great question and another thing to discuss for the future
    • @spacedmonkey: Defining how we break the plugin up helps with what option we pick – don’t want a bunch of “sub”-plugins
    • @flixos90: Yes, but this doesn’t affect which option we choose
    • @spacedmonkey: It does for Option 3
  • @olliejones: Plugin discoverability is a huge issue in today’s WP ecosystem and Option 1 helps discoverability. The categoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. “canonical plugin” does seem to help with discoverability.
    • @flixos90: Fair to say that discoverability would suffer with Option 3.
    • @spacedmonkey: Marketing and support would also suffer
    • @adamsilverstein: Not sure about discoverability, if I want a SQLite feature for my site, a canonical plugin that does just that would be easier to discover than a feature within PL
    • @flixos90: Yes, but the standalone plugin would always exist with any option
  • @spacedmonkey: If there’s a standalone plugin, will anyone bother with a PL plugin? What’s the point of it?
    • @flixos90: Depends on the audience. There are people that want one feature at a time and others who want everything in one place.
  • @olliejones: Happy with Option 1 for now. Taking a step back, discoverability is a REALLY big problem for WP themes, plugins, etc. The reason I suggested working on the definition of “canonical” is that it has the potential to address that. Know that we can’t solve that problem but it’s what Matt cares about.
    • @masteradhoc: Agree, maybe next meeting could focus on how these initiatives can be moved forward
  • @spacedmonkey: Personally think that all PL functionality should be opt-in
  • @adamsilverstein: Love the idea of canonical plugins at install time, Drupal does something exactly like this with their 10-minute install
  • @flixos90: That’s how I’ve been thinking about canonical plugins, as well, with WP core providing contextual recommendations
  • @spacedmonkey: Maybe we could have a setup wizard where you opt-in to the features that you want, like Web Stories
  • @olliejones: Is there any way to get Matt’s approval of our choice, or do we have to do a bunch of work and risk it getting shot down?
    • @flixos90: We’d definitely reach out to him with a proposal once we have alignment within the team; we wouldn’t start any work before having buy-in from him
    • @olliejones: Who will do that?
    • @flixos90: Potentially, will help in figuring out how to do that
  • @flixos90: For next week, perhaps: I think are our options when it comes to the scope of how the current modules would be distributed as plugins:
    • Every module becomes its own plugin
    • Modules are grouped together based on their focus into a few “topic specific” plugins
    • Decisions are made individually, some modules become standalone while others are grouped into a topic specific plugin

Voting on an approach is now open in this GitHub comment through Friday, January 20.

Our next chat will be held on Tuesday, January 17, 2023 at 16:00 UTC in the #core-performance channel in Slack.

#core-js, #core-media, #performance, #performance-chat, #summary, #hosting-community

#core-performance, #meta