Takahe / 6th Nov 2023

Life-Critical Side Projects

TLDR: I am looking for new developers and maintainers for Takahē who want to help in exchange for my mentorship, or I'll have to sunset the project.

I find it important to have hobbies that aren't the same as what I do for work, which is why an increasing number of them don't involve computers at all - I'm very happy building new things on my camper van, making weird geographic art, or hiking around bits of the Rockies.

However, I still love programming and systems work, and I'll always have at least one project going on the side that involves it - nothing beats the size and complexity of what you can create in just a few hours of coding. That said, I have two basic rules for my programming side projects:

The first one is not very surprising, and was implemented after my first big work-related burnout around a decade ago; it's important to get up and walk away from work at the end of the day, and not try to solve the same type of problem. At the moment, I work on data orchestration and processing systems, so I'm safe on the hobby front there unless I suddenly develop a desire to deeply analyse my house's power consumption.

The second one has more subtlety, however; I'm not just ruling myself out from working on avionics or nuclear medicine in my spare time. Most software affects people's lives in some way - most notably, downtime affecting people's jobs and livelihoods - but social media occupies a special place on my risk scale.

The Risk Of The Crowds

I'm a person formed and shaped by the age of social media, but while it has had a very positive impact on my life, I've also seen first-hand the damage it can do. From individual harassment, to wider campaigns - there are some good arguments that a good portion of the current right-wing political landscape in the US was driven by it, as one example.

And all of that was on professionally-developed social media with large teams of engineers, moderators, QA staff, and lawyers. Developing a social network poorly is even more fraught with danger - you're always one small slip away from revealing users' personal information, or DMs, or letting others impersonate them, or more.

When I started Takahē, I mostly wanted to explore what it would take to enable one ActivityPub server to host multiple domains. I never had any real intention of starting an actual server that people would use, but as time went on, and people eagerly played with it and used it a little, it developed along the path of least resistance and ended up as a more fully-featured microblogging server.

However, several times during its development so far I've accidentally written bugs that would let you view private posts, force posts into people's timelines, or even post as other people. None of these are life-critical in the strict sense, but I get this unending feeling that I'm writing software that, if it ever got popular and something I screwed up ruined someone's life in even a small way, would absolutely destroy me.

That's not something I enjoy, and in recent months I've struggled to find the energy to work on Takahē due to this feeling - especially as it's currently pretty much a solo project, as well (I believe burdens like this are far more easily shared with a larger dev team).

I'm not the kind of person to keep something dragging on when it needs to have a graceful ending, but I also think the project still has a lot of value and plenty of things to do - so I'm hoping to find a middle ground.

Mentorship

One of the things I enjoy most - and which I have had the pleasure of doing more as I get increasingly senior in my career - is mentoring people. Nothing energises me more than helping someone with code and systems challenges, and I learn more myself each time I do it.

Thus, while I think my personal capacity for working on Takahē is relatively limited, I am hoping to find one or more people who want to take on maintenance and new feature development and feel they can do so with my help and mentorship. You don't need to know much about ActivityPub or Takahē itself to help; I am happy to discuss all I know on those and all other relevant subjects.

I'd be looking to have at least one or two calls (video or audio) a month with any new maintainers, as well as pitching in on pull request reviews and other discussions. I'd happily continue to host takahe.social and pay for its hosting costs (it's over $100 a month) as well; I just don't think I can be the primary feature developer and maintainer any more, as the complexities of working on something like this and making sure it's correct just aren't fun for me any more, and I don't see a funding source emerging any time soon to pay me to work on this even a few days a week (but if you do want to do that, please get in touch!)

Interested? Email andrew at aeracode.org with what you're interested in, and we can open a discussion!

If nobody comes forward after a few months, I'll likely tidy up things into one last release and then put the project into stasis; ready if someone else wants to revive it, and keeping up to date with any critical security issues, but nothing else.

Mastodon's Shadow

Of course, while some of this is down to what it takes to work on social media software, the other part of it is that the Fediverse, with Mastodon-flavoured ActivityPub at its core, is not an easy place to just turn up and write a server in.

While I have a lot of praise for it being an open standard people are actually using, it's an incredibly complex standard that, even after developing against it for over a year, I still don't fully understand - partially because there is no actual single standard that everyone adheres to, and there's plenty of weird behaviour and extensions.

People keep asking me if they can just "plug in ActivityPub to their project" and... no, you can't. Being an ActivityPub server means handling so much in terms of state, subscriptions, fanout, and more, that you're better off just using an API to an existing server and posting there. My hat is off to the folks who actually made every single WordPress able to be a server.

The underlying post format isn't bad, especially if you ignore all the RDF influences and just write it in the fixed Activity Streams format Mastodon expects (and thus which everything else has to accept) - in some ways, I wish we had an alternative way of shipping those JSON blobs around, maybe even a pull-based model where central relays polled static collections of posts every minute or so, a bit similar to what the Bluesky people seem to be doing with their protocol.

I will probably look at splitting out Takahē's ActivityPub message parsing/construction code into its own library - that's something that is a lot easier to write nice tests for and feel confident about - and I also want to split Stator, the state-machine-based queue replacement that I built for Takahē, out into a separate package as well - with a bit of refactoring to make it even more query-efficient based on what I've learned.

I still like ActivityPub and the promise of a federated social media future, but it's just not the sort of thing I have the energy to do in my spare time, and my salary these days means the cost of me doing it full time is probably way too high for any reasonable funding, especially given the current financial environment.

It's funny that there used to be a mantra in technology that we all wanted to "change the world", something I at least partially believed in. The lack of direction in that statement is notable; I've seen it change the world, and I'm not sure if the result is entirely better (though there is still a lot of good that has been done).

I'm still personally convinced that smaller communities are the only thing that actually work long-term - and that Twitter's pieces of success were always in being able to host a lot of those at once on a globally-discoverable platform - but that's a topic for another day and another blog post.

As to what I actually want to do as a hobby project? Writing games has traditionally been what I turn to over the years, and it'll probably be that again. Will I finally get a second game over the line and released? Who knows, but there's a lot of challenges I enjoy tackling for myself even if they never see the light of day!