Hi, so this will be about migrating the WordPress community from Slack to Matrix.
So first, quick about me, I'm Alex Kirk, I'm from Vienna, Austria.
I'm at Automatic for since 2014 now.
We run WordPress.com and others.
I'm an engineer.
I lead teams around localization and matrix.
I'm sponsored to contribute to WordPress.org.
And I've got some site projects, so if you have a WordPress blog, check out the Friends
plugin for making your site your own hub for subscribing to others and enable Master on
Apps plugin if you want to use Master on Apps with your site.
So quick thing, probably I don't need to tell you, but just to make sure, what is WordPress?
It's a popular PHP CMS.
But in 2003, today it powers over 43% of the websites on the web.
It has a blog editor that allows you to edit posts, but also the whole site.
It's well known for its plugin ecosystem, with plugins like Yoast, Runt Custom Fields,
WooCommerce and so on.
And it's open source under the GPL.
And just a step back, just so that you understand what our needs are as a community.
So this is how we collaborate.
We've got 22 make teams in different areas, so one about accessibility, core, design,
polygots, meta, lots of teams, performance, sustainability.
And they all work towards separate goals.
But each team has a P2, a blog, where they post about new things that are happening,
proposals, decisions that are being announced, lots more.
This is like the asynchronous part of the communication.
And then we've got sometimes weekly, sometimes bi-weekly chat meetings for sharing updates
and coordinating.
And these are quite important because they give people a definite time when they can
reach collaborators on the project.
So you don't have to enter a room and hope that the right person is there.
But you know the time, at this time, people who work in accessibility, for example, are
available.
And we've got meetups and work camps.
Meetups are local to a city.
They're like the smaller ones.
Work camps are the next stage where people travel there to meet.
And then we've got the flagship work camps.
For example, in Asia, coming up in March, EU in Milan, and US in Portland in September.
And another aspect is we've got a project, an initiative called Five for the Future.
So there we encourage individuals and organizations to contribute 5% of their time or resources
towards the workplace project.
So this means a 100-person company would have five people dedicated to the project.
An individual would have like two hours out of a week.
And organizations like that concept because they retain control over the person who can
contribute.
And thus they're confident of pledging towards that goal.
And if you want to hear more about that, there's actually a talk by my colleague Jesus
in this room, Shaping the Future, investing wisely in long-term open source development
with Five for the Future.
And this is how a release of WordPress looks like.
These are the companies who contributed to a release.
So 640 people from 186 identified companies.
This is the make-wordpress.org site.
This is where we list the teams.
And as you can see at the bottom, we list the next meeting that will happen and not
only in Slack but also in Matrix.
And this is the meetings during a week.
So every day a couple of meetings take place.
And because of the distribution around the world, some meetings happen twice in a day
so that everybody has a choice to attend them.
All right.
So our plan to migrate.
So it happened or it started in January last year.
We announced that we'll create a subproject to evaluate migrating to Matrix.
And then we would evaluate and create the environment that we need, migrate history and
integrations, and then finally launch, finalize what needs to be finalized, and turn off Slack.
All right.
So what could happen?
What things we anticipated?
First people don't like change.
We've been on Slack for a while.
So we figured we need to prioritize something superior.
So where are the strengths of the new system so that people will want to move?
There is complexity around decentralized systems.
Like everybody knows centralized systems.
They need to go to one address and that's the only way to get there.
So people might not know what to do.
And then we'd had Slack lock-in.
We've got lots of migrations created over the years that make Slack nice to use for everybody.
And that's why people like it, I suppose.
So when you consider Slack and an open source community, there's actually a few things that
are a bit tricky.
So one thing is that Slack, a sign up is email-based.
So when you join the WordPress Slack, you have to follow a guide.
And typically we actually do this at WordCamps where we have somebody there who will help
somebody to get onto Slack.
It's pretty complicated.
Then it's a commercial product.
The free tier has a message retention limit.
The data is siloed behind Slack stores.
So you need API keys to access it.
But many companies use Slack and it's easy to just add one more workspace to Slack.
So for many people, the barrier of entry is quite low in the end.
Having matrix to that.
Of course, Federation means everybody could join from anywhere, from any home server.
But for the WordPress community, we would want to lock them in through an existing authentication
system.
No retention limits, of course.
And our WordPress community has multiple Slack workspaces for different countries.
So this would be able to unite them in one place.
And of course, an open source project should have an open source chat.
All right.
So we tried to make it easier to join Matrix.
Number one, I already mentioned it.
We created a way to use your WordPress.org account to access Matrix.
And we created it in a way that anybody could install this plugin on their own server to
use it to authenticate a user against, like, to join a Matrix server.
And with the upcoming OpenMidiConnect being like full in for Matrix, this is a potential
authentication provider.
Yeah, so on WordPress.org, we've installed it.
People can use the WordPress.org account.
They will go through their WordPress login screen and just authorize the WordPress server
to submit the information to Matrix.
Number two, we created a Matrix client in a WordPress blog.
So a WordPress page is made up of blocks.
And those blocks, one of them can now be a Matrix chat.
So we call it Chattricks.
And you can configure each block individually.
So one thing that you can do is you can pre-define the home server, which we'll do.
But you can also restrict it to a single room.
It's based on hydrogen.
And we did some upstream contributions.
So before we used it, hydrogen had, you could only have one hydrogen open in the whole browser
between tabs even.
So we contributed something so that you can use it in multiple blocks on the same page.
If you have multiple posts, typically they would be like all put on one page and then
that wasn't possible before.
And we had a couple of bug fixes to use hydrogen with SSO.
I'm not sure how many people had used it with SSO before.
And this allowed us to create team chat pages.
So what does this mean?
We can give a contributor a URL, a WordPress.org URL, where they should go for a meeting.
They don't need to know this is Matrix.
They just see it's a URL on WordPress.org.
So for example, for the Make WordPress Core that creates WordPress Core, the address of
the Make blog is make-wordpress.org-core.
So the chat page is just slash chat.
Core has different chats.
There's another chat.
The design team has a chat and so on.
So this is what such a page looks like.
On the top, you have a custom, like it's a WordPress post.
You can put anything there.
We put there when's the next meeting, instructions on how to go there, also instructions on if
you want to use your own Matrix client how to get there.
And this is the chat rigs block, which shows the room at the time.
For FOSDA, my colleague Ashish created a small demo, and it uses the WordPress Playground,
which is an interesting concept where you can run WordPress in your browser, and you
can test any plugin in a sandbox in your browser.
So I've recorded a demo video, to be sure, but it's real time, so as it loads, you can
see it's pretty fast.
So this now loads WordPress, and we've preconfigured it with a chat rigs block, and here it joined
the chat.
You can go there and enter a message, and all you have to know is the URL of this page.
If you want to add such a block to the page, this is how you do it.
You use the Gutenberg block editor.
You add the block.
You configure it.
You set a home server.
And if you want to lock it down to a room, you don't have to, but it can be practical
to do it.
You just enter the room name, and then the block loses the room list and just shows the
room that you attached it to.
And then you can...
It's a block.
You can add stuff before, after, as you wish.
It's a pretty neat way of giving instructions to people, or putting, I don't know, meetup
agendas, whatever.
It's like, it's a post.
Additionally, we created our own element instance.
Just you can preconfigure it with the home server so that you don't have to tell people,
you have to enter this home server into the login screen.
It's something where people might typically get lost already.
And we also created a bridge.
So since we control both the bridge and the matrix server, we were able to create all
the users on the matrix server and use the Slack bridge with a slightly forked version
so that we can use puppeting.
So when you post something on Slack, your matrix user already will say the same thing
in your name.
And there's some upstream fixes, by the way, that could be merged.
And...
Yeah, so that makes things quite streamlined.
And another thing that we wanted to do, we didn't want to lose the history of Slack.
But it's been a bit tricky because if you create a bridge, the bridge needs to start at some
point and you cannot really backfill messages.
So what we did, we figured out this little trick of first creating a room and bridging
it, then creating a second room and migrating the history of that room there.
Then we would add all users to that new room.
We would import the old events in sequence so that we can backdate using an app service.
And if the user is no longer in the room, we have to re-invite them and so on.
And when we're finished, we can then copy the events from the first room that already
started to be bridged and thus close the gap in the history.
So there is this period between you importing or getting the data from Slack and bridging
that this gives you a way to close that gap.
And then we can change the room aliases, reattach the bridge, delete the old room.
We've got a room with all history.
So now we have a matrix server, community, it uses Synapse with a Slack bridge.
Open ID Connect configured and with the app service.
And we migrated 3 million messages in 170 rooms, 45k users, 55 gigabytes of database
size.
And during this process, we updated the community.
We had held weekly meetings as it's common in WordPress.
We published meeting notes afterwards.
And we've got coverage from the tavern.
So it's like first in January, like we're starting this in April.
This is what we're continuing.
We had to figure things out about private and public messages.
And then we installed the matrix bridge.
So now to the migration.
In November, we announced we want to migrate to matrix.
And this is how we'll do it.
We'll ask people to use matrix instead of Slack.
Before the final migration, we'll post a message in every Slack room.
Slack will be closed.
This is where you need to go for instructions.
And then finally, disable postings.
It's actually quite interesting that it's pretty hard to just kind of disable a Slack
server because in a way you want to be sure that it's still around.
The only way to completely shut it down is to delete it, which is a destructive operation.
So what remains is that people could still DM.
Well, OK.
So the feedback that we anticipated from this.
People want the default.
So we would figure like they would use element.
We knew that the notification element is not to everybody's liking.
There's no dedicated threads and mentions view as in Slack.
Threads is coming.
I saw it.
There's a couple of things that people are used to from Slack that are a bit different.
We anticipated that.
So we felt like people could live without that.
People in matrix have been living without it for a while.
Search is a bit difficult.
There's no search langes in element.
And while there are many other clients, some of them miss important features like threads
or have implementations that are kind of different.
I mean, I've tested some of them.
Nico, for example, it works, but it's different.
And then when you provide a home server to community, it comes with all sorts of troubles.
So you cannot limit people creating rooms on the home server.
So people will create some spam rooms, whatever.
So you need to be aware of that.
So we started to collect issues by the community.
So they said we are unable to force some things like we can on Slack.
So you cannot reduce the time allowed for editing messages.
You cannot enforce room membership for federated users.
Well, okay.
Thread messages in Slack, you can say, I want this message to also be posted to the main
room.
It doesn't work.
Other Slack features, they're considered essential.
You cannot ping a group on matrix.
And you cannot ping here.
As the room mentioned, but there is stuff that when you have one central server that
you can enforce that you cannot enforce on a distributed environment.
And scheduling of messages, reminders, not there yet.
Through a bot maybe, but not in the UI well integrated as in Slack.
Then accessibility problems.
So there has been an initiative to improve elements accessibility, but there are still
gaps like macro navigation.
This over wasn't super great.
Then we had bridges, glitches like out of other messages, duplicates, double, yeah.
All sorts of small issues.
Use experience around threads management, obviously.
We anticipated that.
Then some things that don't work with matrix failing to load time zone positioning, lots
of user join events that can make things pretty slow.
So what we did to address this.
We implemented integrations and many fixes via bots.
We used the mobile framework.
We could use the RSS bot, GitHub bot.
We tried to make it easier to migrate our own Slack integrations.
So we have a post to room bot that uses the web hook to post messages to the room.
The other direction, how can something on our servers react to something in a room?
We implemented group mentions.
Not super great.
If you post a command to the bot, it will post another message mentioning everybody in
the group.
Which there are some very large groups.
So there could be very long messages.
And watchdog so that we can be alerted if some spam rooms are created by some community
members.
We also, because we had our own element instance, we could ship fixes there while they're waiting
to be merged.
We provided the channel for the community where they could get help.
We created the commutation and guides.
But we had to stop the migration.
So Matt called off the migration at the state of the word.
Then we posted about it.
And in turns out the accessibility problems were too big.
We weren't able to merge them in time.
We submitted the patches upstream.
And there was uncertainty around where, like, are UI needs, where are they on elements roadmap?
What are the effects of the license changes that were announced with Synapse?
And overall, like, do those changes mean that the ethos of the WordPress project are no
longer aligned with the element or the matrix project?
It's kind of, it creates a bit of uncertainty that was detrimental to the migration.
So the current status.
The WordPress community remains a Slack community.
But now with the matrix bridge and all Slack history, new contributors can no longer need
a Slack account to join the conversations.
And turning off Slack is currently not planned.
And we'll keep observing how the matrix product develops.
So in summary, the WordPress community didn't fully merge and migrate in the end.
But maybe the things that didn't work for us are not so important for you.
We are a huge community.
There's many voices.
I could see in a smaller community those things not being as important.
And I hope that this talk was able to help you identify which is important for us and
decide if you are kind of suffering or not suffering under the same issues.
Along the way, we did a lot of open source contributions.
The WordPress plugins I mentioned.
To matrix, open source, all our bots, the migration app service patches upstream.
And that is it.
Thank you.
Yeah, check out the slides.
There's lots of links in the slides.
Yeah, so you mentioned that migration, you want to fill in your room with Slack and
in for the messages there.
You actually don't really have to do that because a lot of the bridges actually allow
you to, the four messages that come in the history.
So the question was whether we were using the functions of a bridge to get back the
old messages.
So in our experiences, it wasn't possible to backdate the messages.
That was the main issue there.
I suppose if you, it depends on the implementation on the matrix server.
Maybe there's no, okay.
Okay, so the question was whether we considered the
relationship funnel?
So that's a good question.
Okay, so the question was whether we considered to use.
to send another message.
Okay, so the question was whether we considered to use
an app service to change the push rules for a user
in order to enable group mentions.
No, we haven't considered that.
Maybe it's a possibility.
I don't know if the user would,
basically you're saying that you would add a keyword
to the user so that they would be mentioned
and you would configure it for them.
Maybe that's a possibility.
Yeah, you were saying there were some accessibility
problems which were kind of killed this.
Could you give us a little detail of what was actually
missing or what problems were that were?
Sure, so the most important problems were around
macro keyboard navigation, so navigating between
the bigger sections of the app.
So there's the sidebar of the spaces,
there's the room list, there's the search menu
and the messages.
And for example, you couldn't get up the message list
using the keyboard.
And if you were able to somehow get into that area,
then the voiceover read out wasn't very useful.
It repeated for every message, for example, profile picture.
It, so stuff like that had been annoying people.
Thank you for the POS, but like the accessibility
when I was outside, I think it's already reviewed.
One of the other plans.
Matthew said the accessibility team has reviewed
the patches that were submitted.
Other questions?
Yeah.
Did you have to disable some of those integrations
or work around that you mentioned?
For example, I imagine that here things
wouldn't work very well on both sides
in a different way.
All right, the question was whether we had to disable
integrations.
So one interesting thing about the bridge
is that it works in both ways.
So migrating and integration could be done in a way
that you first enable, like you create the migration
on the matrix side and when it's ready,
you turn it off on the slack side
and enable it on the matrix side.
And still both sides would be able to use the integration.
So for the here one, well, it only worked on slack
in the end, but I don't know, it depends on the team.
Like part of the WordPress project,
like there are so many teams that every team
has their own ways of doing meetings.
And some heavily rely on those group mentions,
others don't, some need the here mention,
others don't, it's like hard to make everybody happy
all the time.
So that's probably part of such a big migration
that it's really, yeah, you get so many opinions
and as with many communities, there are some
louder than others.
So the question from the internet,
where can you find the tools you have used
for the migration of the history of the room?
Yeah, so the question from the internet was
how we, if you can access the tools.
So I recommend you to look at the slides,
in the slide where I talk about the app service migration,
that's where it's linked.
Is there any integration with Element Call?
The question was whether we did integration
with Element Call, no we didn't.
There is no culture of using video conferencing
in the regular, some teams use it,
but they tend to use Zoom at the moment I think.
Yeah, it's depending on the team what they use.
So for example, Slack Huddles as an alternative on Slack
are not being used as far as I know.
Is there a possibility for the migration?
Or is it more of a licensing issue
of accessibility?
So the question was whether there is a possibility
to complete the migration.
I think it's certainly possible at the moment.
I think there has been a bit of tension
of implementing the migration fast
so that people are not left behind.
Like if you let the migration linger for a long time,
then people will never migrate and then always at the end,
like people get panic and then they do the migration
so the whole long period is wasted kind of.
So that's why the initial plan was to have it rather short.
But on the other hand, I think this current hybrid state
is not as bad as you would imagine
because for new contributors, we've got this easy onboarding
and one thing that I liked about this,
the way that we implemented is that you can kind of
slowly upgrade your experience.
You start with the chat message, the chat URL,
and then if you use it a lot,
you could upgrade to elements, the one that we hosted,
and then you could upgrade to another client.
So I think that's an interesting way
of luring people in.
So maybe over time, the number of metrics users
will increase so much that it becomes like a request
from the community.
But as of now, we're kind of waiting
what the license changes do.
And yeah, this hybrid state is one that I think
is acceptable for the moment.
Okay, no more questions?
One more time.
No more time.
One last question.
Matthew.
I just want to know what it is about the license change
on SNAPs that is causing it to.
I invited to talk to Matt.
Yeah, it's basically like WordPress is on the GPL
license where you used to be able to modify software
on servers and not having to push the changes back
and also contributing back codes to the element project
and assigning a CLA is something that makes people
uncomfortable.
All right, thank you.
Thank you very much.
Thank you.
Thank you very much.
Thank you.