I’ve had a Friendica account on the fediverse almost since day one, even if I didn’t actively use it initially. In 2018 I started heavily using Diaspora and Mastodon instead of it since I preferred their simpler UIs. It wasn’t until early 2019 that I revisited Friendica since it tied together all of the Fediverse into one experience. It has been my primary portal into all of those networks ever since. Despite a lot of effort by a lot of people it hasn’t been all roses though. As I want to adopt a social media system that I could recommend to my dad the warts of the system still weigh on me. As I host my own I see some big ones there too. What I need to decide is if I want to do the leap to help trying to fix them, if they are fixable, or do the leap off of the platform into something else.
First, before I get into exploring my crossroads I want to thank all of the developers who work almost purely on a volunteer basis on this platform, like so much of the open source community. As an open source contributor I understand the slings and arrows that come with building, maintaining, and debugging software becomes even harder under these circumstances. That is especially true with something as complicated as a federated social network. I know some of the developers of Friendica personally. I may even become one such developer. So this is even more personal of a thank you back than I would normally give under these circumstances.
Second, I am no genius of a software developer in general much less one with specializations to know how to definitively tackle the problems presented here. No one will ever write that I’m the next Dennis Ritchie or Ken Thompson (prolific programmers who gave us C and Unix). No one will ever get teary eyed looking at the wonder that is my code, unless they were saddled with trying to debug it. I’m being a bit overly self deprecating in that last one, especially since I suffer from more than my share of Imposter Syndrome. I do know my limitations though. I have my strengths in aerospace and software engineering but database optimization is not one of them. That is one area Friendica needs major help with. I’ve also never done more than dabble with PHP, which unfortunately is what Friendica is written in. Lastly my skills in UI and UX are primitive to say the least. Some of the complexity issues are really about solving those issues, so again not my area of expertise.
So if I’m so not specialized to fix the problems how can I be casting stones at them? You ever watch a professional sporting game and can see how the weak players can’t hold up to the strong players or when a player makes a mistake they shouldn’t have? Could you do even a fraction of good on your best day as even the weakest player on their worst? It’s the same the same thing here. With that out of the way let’s process through the conundrum.
By far the best part of Friendica is its interoperability. I often refer to “the fediverse” as if it is one entity but it is not. The term “Fediverse” just refers to the fact that these aren’t one giant software system but instead lots of software systems all able to communicate with each other. The go to example to make this approachable to people is email. We all have email on our own systems. They often have the exact same user interface, the same way of doing things. It may even feel like one big system. In reality it is all individual services that just act as one big system. The fediverse is the exact same thing. The fediverse concept goes a bit further because the presentation layers and user experiences can vary dramatically. There is the Twitter-like fediverse you can get with Mastodon. There is the Instagram like experience you can with PixelFed. There is the YouTube like experience you can get with PeerTube. I’m just scratching the service. The image below is a screenshot of the Fediverse.party website which creates this graphical map of the biggest, but certainly nowhere near all, of the various fediverse platforms that exist.
Over the years several competing protocols have been created to be the lingua franca across the servers. The most dominant one that we have today is called ActivityPub. It is the federating protocol that is used by most of the platforms above. Another very but less popular protocol is the one created for Diaspora. Some platforms implement both. Friendica is one of them. Friendica in fact implements several protocols and has more integration with other non-fediverse social networks than any other platform. Its Twitter bridge is so effective that I could actually fully integrate my Twitter experience into my Friendica experience. It therefore creates a social media portal experience that I was always looking for. If Facebook hadn’t locked down their own API in such a Draconian manner, for legitimate reasons and illegitimate reasons, then I could probably be using it as my one stop social media portal.
The user experience it tries to give people is very Facebook timeline like as well. What I mean by that is that it gives you a chronological timeline and posts can be pretty voluminous. There are no 280 character, or 500 character, post limits. I believe the default maximum post length on Friendica is 5000 characters, but the server host can change that. Beyond just post length the presentation of comments is very much Facebook like as well. They show up as comments on the main post not as independent posts floating around the network.
Feature-wise the system is also very close to what I wanted from Facebook as well. It’s not just individual posting capability and its tie ins to the whole network. There is an entire Groups concept that operate like Facebook Groups. There is an Events concept which captures some, but not all, of how Events work on Facebook. There is a direct messaging system which operates more like email than instant messaging. There is the ability to categorize your contacts/connections and look solely at subsets of your timeline via that. So connectivity wise, feature wise, and general workflow wise I absolutely love Friendica. It’s what has kept me using it for three years now. If the rest of the story was that rosy I wouldn’t have my crossroads moment.
The Not So Good
The first problem Friendica has is part of its connectivity strength. I stated that it ties into networks which use ActivityPub for very different things. ActivityPub isn’t the most prescriptive federating protocol. It’s flexibility means that there are very much implementation specific aspects to the data that is being federated. Even if it wasn’t for that the entire user experience is dramatically different between an Instagram like experience and a YouTube like experience. That is common sense with these siloed systems. In Friendica they are all mashed together though. That means it creates portals into the data which aren’t always what the authors of the posts would be expecting. The nature of ActivityPub also means that while they are all technically communicating not all posts reach everywhere and not all content is equally discoverable. Some of this is a fediverse wide problem. Some of it is an artifact specific to Friendica. Some of it is potentially fixable but other aspects are just the way the system works.
The second problem is that while the Friendica system is full featured the user interface is overly confusing. I am no tech newbie nor a social media newbie and I had problems getting my bearings around the system when I first joined. Still to this day I find some features that were buried that I didn’t know had been there the whole time. A bigger problem though is that some of the larger features, like creating a group or posting to a group, can be overly cumbersome. When I say that I want to get to a point where I can recommend a fediverse platform to friends and family the smoothness of the user experience is part of it. Right now it is just not there. Friendica does support different presentation layers though and it may be possible to either address that within one of the current ones or create a new one. Some aspects of the cumbersomeness just need to get fixed more directly. Specifically, the ability to drag and drop or copy/paste images into a post should be supported. It was a feature I worked on for Diaspora since it is a workflow people expect. Having to jump through several UIs to get that to work is why I had started defaulting to posting on Twitter first and having Friendica pick the post up that way.
Beyond the cumbersomeness of the UI, which is fixable, there is the cumbersomeness of private posts which may not be. This is a position that I am in a minority position on among fediverse developers. I always present it as the “Wedding Pictures Problem” when discussing it. Most people want to share their wedding photos with friends and family. I’d say most people also aren’t interested in random bots on the internet sucking up their wedding album though. So when you posted that album to social media you would share it with “Friends” or something like that, not “Public”. So far so good. Over time though friends come and go. It’s now a year later and you have new friends that should be able to see those photos. On Facebook as you add people to your “Friends” connection they can. Across the fediverse the only people who can see them are the ones that were in that Friends group at the time they are shared. There is no mechanism for updating it. The closest thing one could do is delete the original album and reshare. The protocol implementation drives a lot of this behavior. It was designed around the notion that distribution privacy is set at content creation time and unchangeable. I disagree that this is the only way to do this. For private sharing therefore it creates a huge hindrance to how I operate my social media elsewhere. The artifact has been that I share a lot more publicly now than I ever did on Facebook. I’d love to come up with a way to fix that, but that may be something that is only fixable on Friendica if it is fixable at all. There are already some hints at how it could be done with how they handle that for private Group posts, which are visible by newer users once they join.
The Very Not Good
The biggest problem across all of that though is the scalability of the platform. I’m not talking about scaling it to millions of users. I’m talking about scaling it to hundreds or thousands for a given server. The system has gone through a lot of optimization over the years but it still has a long way to go. I started hosting my own instance at https://friendica.myportal.social/ at the beginning of this year when my old Friendica host went offline permanently. I knew that there was some server-side heaviness even when I was just an end user but I wasn’t sure how much of that was spikes in active users, overly bloated old databases full of crud, or latent to the software itself. Now that I have only a few months of data for two users I have to say that I think it is mostly the software itself.
From the user facing side this scalability issue manifests as pregnant pauses in the user interface. The notifications button could take a minute or so to populate. The initial rendering of the site can sometimes have the same artifact as well. Time to initial draw of the main timeline page can take several seconds, which is considered an eternity in UX design world but I’m not that picky. The time to fully render the whole page including notifications etc even on this new light server takes 50 seconds. That is ridiculously long. I can only imagine how long it would take years from now with dozens of users. What’s worse is that even when there are no users on the system actively doing stuff the system is constantly thrashing. Most of this thrashing is happening against the database handling the federation protocols from what I can tell but it is pushing my two core server at 80% a significant fraction of the day. Worse is the volume of data filling up the database which is already at several GB. A lot of these are messages that federated over from other servers. An artifact of how these systems work is that they need to hold on to them for a period of time otherwise they won’t know about them (another common fediverse problem I wish were solvable). The net effect though is that I think if my server had 100 users I’d need some unnecessarily monstrous machine to even keep it running much less have it run well.
Potential Paths Forward
So here is my conundrum: do I stay with Friendica and try to make it better or do I start coming up with something else to be my social media experience on the fediverse? If my mix of fediverse contacts was almost exclusively ActivityPub then it would be a much easier decision. Yeah, I’d lose Groups, Events, and other things which I could potentially hope to build on but don’t because of overly complex UX, but I could live with having that picked up by other kinds of software. However half of the people I interact with are on Diaspora which does not and never will support ActivityPub. I therefore would be dropping half of my regular connections. I don’t want to do that.
There is also the fact that Friendica is the most connected and most feature rich of the fediverse experiences. To greenfield adding those sorts of features to other systems will be a monumental effort. Will it be as monumental as fixing it under Friendica? I only once dabbled in the Friendica code base and became exasperated by PHP setup shenanigans so I can’t claim to have an informed opinion on it. It is always the programmer’s conceit that it is easier to start from clean slate than to fix another system. Sometimes it is true but often they learn that they don’t create one new clean system to finally solve the problem but their own spaghetti mess of different problems after far more effort than they thought.
So I should just jump into the Friendica code base and get started I guess, right? I don’t like language snobbery but at the same time I do have my preferences for languages and PHP is definitely not one of them. A lot of the old problems with PHP have been solved with later versions, and the Friendica team has put a lot of effort into writing the new code with those new PHP language features. There is still a huge pile of legacy code that is written the old way. There is also the matter that a lot of the problems have nothing to do with code but the way the system and/or the data is fundamentally structured. The low hanging fruit optimizations have long been cleaned up by the development team. It is now on to the hard problems. I certainly could put in the intensive hours if I chose to help fix this but would my level of expertise allow me to? I also have other projects that I’m working on and/or starting that I want to put time into. They have their own social network back end issues that I have to resolve. Do I want to split my time so dramatically between those projects?
As there is a massive influx of users into the fediverse with the news of Musk taking over Twitter the need for me to make a decision has taken on a feeling of urgency more than I had previously. It is only a feeling though and it will pass the same way the surge was felt and passed during the Cambridge Analytical debacle, the Google+ shutdown, etc. I have no final ultimately decision I have to make by some deadline. I would like to shit or get off the pot of making it though. Whether this exposition helps in any way towards getting me there remains to be seen, but probably not. It was worth the two hours it took to write it this morning anyway I suppose.