What I Actually Do, For Anyone Who's Heard Me Say "AT Protocol" and Nodded Politely

I already said the calm version of this in "Available (Eventually)" – qualification finishing, job market opening, GitHub history speaking for itself. This is the same argument with the diplomacy switched off.

The Bit Where I Explain What I'm Even Building

You know how Instagram, X, and Facebook are each one company that owns your account, your posts, and the rules you're allowed to break? The AT Protocol is the argument that social media doesn't have to work that way. Think of it more like email – my address can live on one server, yours on another, and we can still talk to each other, because nobody owns the whole system, just their bit of it.

Bluesky is the app most people have actually heard of that runs on this. I don't build Bluesky. I build the scaffolding around it – the tools that let people own their own corner of it properly, rather than just renting a nicer-looking version of the same cage.

That's the entire premise behind most of what's on my GitHub . Everything below is a variation on "here's a tool that helps someone control their own data instead of asking a company's permission."

None of this started with reading a specification cover to cover, either. I learnt the protocol the way most people learn anything technical properly – by breaking small things repeatedly. The Bluesky bots came first, then wiring the protocol directly into my own website.

By the time I sat down to write an SDK, I already knew where the sharp edges were, because I'd already cut myself on most of them.

The Bit About the SDKs, Which Sounds Boring But Isn't

An SDK is a toolkit. It's the difference between every developer who wants to build on a protocol having to read the entire specification from scratch, and someone having already done that reading and handed over the working parts.

I've written two: atpkt, in Kotlin, and Wolfram, in C, which is where my actual attention is now. Neither of them is where I actually learnt the protocol, for what it's worth – that happened earlier, messing about with the bots and the website, never sitting down and reading documentation properly beyond glancing at a glossary when I got stuck.

atpkt was where I put that half-formed understanding under pressure. I ended up doing a full correctness rewrite of its MST implementation to line it up with the reference version, which is the sort of unglamorous slog that only happens once you've stopped treating "it compiles" as good enough. I retired it after finding atproto-kotlin , a more mature SDK by kikin81 already doing the same job better than mine was going to. There's no prize for maintaining a worse version of something that already exists properly.

Wolfram is the harder problem, and there isn't an equivalent I can just defer to. Which is precisely why I keep maintaining it: there was nothing like it before I started, and I'm not about to let it quietly rot just because nobody's paying me to keep it alive.

C is one of the oldest languages computers actually speak, close to the metal, unforgiving if you get something wrong. There's no framework doing the polite work for you. Writing a correct implementation of a modern web protocol in it means understanding that protocol well enough to describe it in a language that does you absolutely no favours.

Retiring atpkt wasn't giving up on it. It was recognising when someone else has already solved the problem better, and redirecting the effort somewhere it's still needed.

The Bit About Actually Shipping Things

Inkwell is the project I'd hand someone if they wanted proof rather than a description. It's a reading and writing client for a decentralised blogging system called Standard.site – there's an iOS app, an experimental Android port built from scratch because Swift and Kotlin share approximately nothing, and a website that exists because pointing someone at a raw GitHub URL is not, in fact, a pitch.

The iOS app is the one I'll actually call finished. OAuth sign-in against your own handle, no faffing about with app passwords. It renders four different content formats and falls back gracefully when it hits a fifth. Theming resolves through a small cascade rather than just picking one option and hoping.

None of that is flashy. All of it is the kind of detail that either exists in a product or doesn't, and I'd rather it existed.

Then there's Malachite, which pulls your listening history out of Spotify or Last.fm and publishes it somewhere you actually control. Nothing else did that properly before I wrote it, and if I'm honest, that's most of why it's still maintained – not some noble commitment to open source, just a refusal to watch a gap I filled close back up again out of neglect (I've made this case at length before ).

Socialsync, a Minecraft Fabric mod built with the Jollywhoppers lot to bridge the game and the protocol, is the same story again – it exists because nothing else bothered to, so it doesn't get to quietly die just because nobody's paying me to keep it running.

And Chronicler, a Minecraft server plugin that turns in-game events into an actual newspaper via an LLM, which I've spent real hours doing an unglamorous audit-and-fix pass on – thread-safety issues, blocking calls sitting on threads that had no business hosting them, the sort of bug that only shows up once real people are on the server and everything stutters at once.

None of this is theoretical. It's all running somewhere, doing the job it was built for.

The Bit About Running My Own Infrastructure

I used to self-host my own server – my own slice of the Bluesky network, file storage, photo backup, code hosting – defined through code rather than clicked together through menus, because if I was going to rebuild it I wanted it to be reproducible, not remembered.

Not currently running it, for reasons that are a separate post entirely, but the config still exists, and the point stands regardless: I've done the thing properly, end to end, not just read about it.

I've also filed a bug against the official Bluesky PDS software, over a language flag that was quietly assuming everyone speaking English was American. It got acknowledged. That's not a huge thing on its own, but it's the same category of interaction that any working engineer has with software they don't personally own: you notice something's wrong, you say so properly, and sometimes it gets fixed.

The Bit Where I Stop Being Diplomatic About It

Here's the actual complaint, stated without the polite hedging I usually wrap it in: I hate this. Not "find it a bit frustrating" – hate it.

Being told I have no experience because nobody formally employed me to do the thing I've spent years doing isn't a neutral observation about my CV. It's a redefinition of "experience" to mean "experience somebody else can take credit for," and I don't see why I should nod along to that.

Try the same logic on the other thing I do. I've been writing poetry for six years. The anthology's past 180 pieces now. Nobody handed me that time, nobody paid me for it, nobody's stamped a publisher's name on it – and if someone looked at that and said "well, you're not really a poet, you've never been formally published," I don't think anyone would call that a fair assessment.

They'd call it what it is: someone refusing to count work as work because it didn't come with someone else's letterhead attached.

It's the same move, aimed at the other half of what I do. And it's not just wrong, it's hypocritical – the same people who'd never dream of telling a self-taught musician they don't really play, or a home cook they can't really cook, will look at a working AT Protocol client, an SDK, a bug report a maintainer took seriously, and decide none of it counts because a company didn't sign off on it first.

That's not a standard. That's gatekeeping dressed up as a standard, and it discredits real, verifiable, running work for no better reason than where it happened to happen.

The One Line On My CV That Nobody Ever Questions

The irony is I do have a line on my CV that counts as "proper" work experience by the standard everyone keeps insisting on – helping my mum with her dog breeding business, feeding and supervising litters since 2020, plus whatever IT bits and pieces she's needed sorting along the way. The dogs in question are also just our pets, which is about as informal as a "business" gets.

Nobody's ever once asked me to justify that one. Nobody's demanded to see a contract or asked who signed off on it. It's family, it's informal, it's exactly as unregulated as everything else I do – and it gets waved through without a second thought, because dogs are legible in a way that a C SDK apparently isn't. Funny how the scepticism only shows up once the work gets harder to picture.

The Paperwork I Do Actually Have

A CV with a company's name on it is a comfortable, legible signal – I understand why people default to it. But legible isn't the same as true, and it's worth saying plainly: I'm not coming at this from zero formal recognition either. I've got real IT qualifications behind me, including a Level 3 course I only just finished – the paperwork's still catching up, but the work's done.

So even on the narrowest possible reading of "qualified," the claim doesn't hold – it's not formal employment I'm missing plus formal education besides. It's specifically formal employment, and only that, and somehow that one gap gets treated as though it erases everything either side of it.

What's actually sitting in front of me is a Kotlin SDK I built and then retired once I found someone else's better version of the same idea, rather than stubbornly maintaining a worse one out of pride; a C SDK I'm writing now with none of a framework's guardrails; a working iOS app someone else could download today if Apple's ninety-nine-dollars-a-year toll booth weren't standing in the way; a server I built, ran, and maintained end to end, even if it isn't switched on right now; a bug report that got taken seriously by people who don't know me.

Set next to that, "no experience" isn't an assessment. It's an erasure.

The State of the Actual Market

And that's before you even get to the state of the job market itself, which is, to put it plainly, shite. Junior roles that would've been reasonable applications two years ago now want three years of commercial experience minimum, for graduate money, against a pile of other applicants doing the exact same portfolio-building I am because there's nowhere else left to put the effort.

Telling someone in that market to go and get experience isn't advice. It's a demand for something the market has largely stopped supplying, aimed at the one person in the conversation with the least power to conjure it into existence.

And here's the bit that actually gets under my skin: the advice mostly comes from people who built their careers in a completely different market and don't seem to have clocked that. Youth unemployment in the UK sat at 16.2% as of April 2026 – the highest it's been outside the pandemic since the early 2010s. Over a million 16-to-24-year-olds are NEET right now, the first time that figure has passed a million since 2013 . Graduate vacancies fell by a third in 2025 alone , the second year running they've dropped. Over 1.2 million people applied for just 17,000 graduate roles last year – that's not a queue, that's a lottery.

And it's not just that the top of the ladder is crowded. The whole middle of it is disappearing. Junior-to-mid roles, the ones that are supposed to be the actual on-ramp, are quietly being cut or frozen at the same time as everyone's being told to go and get some. What's left calling itself "entry level" often isn't – one widely cited study found 61% of jobs advertised as entry level actually ask for three or more years of experience , which isn't entry level, it's early career wearing a disguise.

And a fair chunk of what's left isn't real in the first place. Ghost listings – roles posted with no genuine intention of hiring anyone, kept up to build a candidate pipeline or just to look like the company's growing – are now estimated at somewhere between one in five and one in three of everything posted online. So the actual maths, if you're on the receiving end of "go get some experience," looks like this: fewer real junior roles than there used to be, a chunk of the remainder demanding years of experience they have no business demanding at that level, and a further chunk that was never going to hire anyone at all.

And the response from a fair chunk of the commentary I keep seeing isn't "the market's broken," it's that my generation "isn't work-ready." That we lack resilience, that we need training in soft skills before we're fit to be let near an office. Maybe some of that's fair in places. But it's a very convenient story if you're the generation that got apprenticeships with real progression, milk rounds with actual odds, and graduate schemes that weren't seventy applicants deep before you'd finished your coffee.

Blaming the traits is a lot more comfortable than admitting the ladder got pulled up.

No, Not a Temping Agency Either

And before anyone suggests it: I heavily doubt a temping agency is the fix here either. Temp work is built for filling short, generic gaps – reception cover, warehouse shifts, data entry for a fortnight – not for landing someone with four years of protocol-level engineering work into a role that actually uses it. Sending me through an agency built for interchangeable placements to solve a problem that's specifically about my work not being recognised as specific isn't a solution, it's just routing the same dismissal through a middleman.

The Quiet Part

I'll say the quiet part outright, because there's no version of this piece that's honest without it: I feel hopeless about it, most days. Not dramatically, not in a way that needs managing – just the low, ongoing kind, where you do everything you're supposed to do and the door still doesn't move.

Some of that hopelessness has a very specific shape. I'm never going to own a house. Not "not yet," not "not until I've saved a bit more" – never, on anything like the trajectory I'm currently on, in the country I'm currently in. That's not self-pity, it's arithmetic, and it's the same arithmetic a lot of my generation has already done and stopped saying out loud because saying it out loud doesn't change the numbers.

To be clear about where I'm pointing this: not at older generations as a whole, most of whom didn't design any of this and are just as stuck inside it as I am. I'm pointing it at the people at the top who did design it, and who've spent decades making choices that protect their own asset values at younger people's expense. Homeownership among the over-65s sits around 75%; for younger people it's roughly halved from its early-90s peak , and that's not an accident of the market, it's the result of planning restrictions and quantitative easing that a former Chancellor openly admitted was designed to inflate the value of assets already owned by people who had them . The same analysis puts lifetime housing costs for young people at roughly three times what they were for the generation before us. That's not a vibe. That's a policy outcome, chosen repeatedly, by people who will not be the ones living with it.

Strip away the language of policy and planning and what's actually underneath it is just greed. Not complexity, not unintended consequences, not an economy too vast for anyone to have steered – a small number of people at the top choosing, again and again, to protect what they already had over building anything for the people coming after them. That's the word for it. I'm not going to dress it up as anything more technical than it is.

Plutus is the actual god of wealth, for the record – not one of the proper Olympian twelve, more of a minor deity attached to Demeter's household, and traditionally depicted as blind, handing out riches with no regard for who deserves them. Fitting, honestly. But blind isn't the same as stupid, and I doubt even he'd look at four decades of hoarding dressed up as prudent economics and call it a job well done.

It doesn't cancel out anything I've written above. It sits alongside it. I can be entirely right about the work being real and still not know if it's going to be enough, and pretending otherwise for the sake of a tidier ending would be its own kind of dishonesty.

What I'd Still Take

I'm not going to pretend a team teaches you nothing a solo GitHub account can't. Someone pushing back on your code who isn't obligated to be nice about it, shipping against a deadline you didn't set yourself, the slower and more political craft of building something with other people rather than just for them – I'd genuinely like all of that, and I'm not being falsely modest about wanting it.

But wanting that next thing is not the same as having nothing behind me right now, and I'm done letting people conflate the two.

If you scrolled through my repositories the way you'd flick through someone's old notebooks, you wouldn't find idle sketches. You'd find years of iteration, a fair few abandoned ideas, and a solid handful that shipped and are still working right now, this week. Call that whatever you like. Don't call it nothing.

The Actual Point

I build small, free tools that help people keep hold of their own corner of the internet, and I write poems in the gaps around that, and I've been doing both long enough that they've each turned into a body of work whether or not anyone was watching.

If "experience" means having actually done the thing, repeatedly, well, under no supervision but my own – I've got plenty, on both counts. If what people actually mean is "experience I'm willing to recognise because someone else paid for it" – say that instead. It's a smaller, more honest claim, and at least then I'd know it's not really about the work at all.