Skip to main content
  1. Posts/

Managing a Beta with Bluesky

·668 words·4 mins
Agent IO
Author
Agent IO
How I use Bluesky to easily and securely preview a software product to users.

This is the written version of a lightning talk that I brought to ATmosphereConf, an annual conference about the AT Protocol.

The Atmosphere Conference listing for my lightning talk

Thanks for giving me a bit of your attention! This is my second ATmosphereConf, and it’s now my favorite tech event of the year. I love being here in Vancouver; there’s so much to learn about and do here and such great salmon!

Managing a Beta with Bluesky

This is a short presentation of a hack. I thought you might be interested in hearing about an unusual way that I use the AT Protocol, and that it might trigger ideas for things that you might do with it.

For the past year,I’ve been building a new software product. I’d love tell you about it, but that’s too much for now. Instead I’m going to focus on a developer's dilemma… How can I get direct feedback on my project?

I’m a software developer, and I recently left a corporate tech job to make something new. That’s too much to talk about here, so I’m instead going to focus on one important problem that I faced: How can I get feedback on early versions of my work?

You might have heard of products that help with this. ConfigCat, LaunchDarkly, and PostHog are three that I show here. These are fine, but right now I’m just a solo developer, a guy with a laptop, and they all seem to add too much overhead for me right now.

Why not just open source it? I've done that with other projects, and it's got some downsides: You might become your rival’s parts bin training set. You might prematurely commit to the wrong set of features. You might unexpectedly become someone's dependency.

So I’ll bet you’re asking, “why not just open source it?” I’ve done that for other projects, and it has some downsides.

  • If you’re doing something new, you might be teaching your competitors or their coding assistants how to solve the problems that you’re solving.
  • You might prematurely commit to features that aren’t good for you in the long term.
  • And related to that, you might inadvertently become someone’s critical dependency!

That isn’t far-fetched. It happened to me when I was working at Google. One of my projects accidentally became useful to the Kubernetes team and became a critical dependency of kubectl. That sounds great, right? But I wasn’t on the Kubernetes team, and as I moved around Google, none of my managers appreciated the time I spent maintaining my project. Eventually it was just a tax on my time, like lots of open source projects become.

What do I want to do instead? Release binaries that people can easily install. Control who can use them. Get feedback and metrics on how that usage is going.

Here’s what I decided to do instead:

  • Release binaries that people can easily install.
  • Control who can use them.
  • Get feedback and metrics on how that usage is going.
How I do this: Publish Docker binaries. All builds require a license key (a JWT that identifies the user). Add ATProto sign-in to my website. Any identity followed by my project account can generate license keys. Users activate the product with their keys.

To do that, I just build and release Docker images of my tool, and I make all builds require a license key. My license key is just a JWT that identifies that user and that’s signed by a private key that I keep secret.

Now here’s the hack. I made it possible for people to generate their keys themselves. All someone has to do is use ATProto to log into my website and press a button. But who gets to do that? I want to only include people that I’ve approved (basically, people who talk to me before trying it), and rather than maintain a list of members, I make the membership list be the accounts that my project account follows. If @agent.io follows you, you’re in!

Pros: ATProto identities are great! By not using some company's identity system (Google/Apple/Facebook/GitHub, etc), it's equally palatable or unpalatable to all, and I only have to support one. I don't even need to add a lexicon! I just have a dedicated ATProto account. It's public! Anyone can see who's in.

I really like this. Because I’m using AT Protocol identities, my beta is agnostic to all of the various corporate identity systems, so no one can be mad that I’m using one of their competitors. Also, it’s super-easy. I didn’t even add a lexicon. And it’s public! Anyone can see who’s in, so people can easily learn who else is interested in IO.

Cons: It's public! If you don't like exposing who your users are, just maintain a private list of handles/dids that are in. It's breakable! If you're clever enough to break my licenses, that’s cool, but please don't redistribute hacked versions of my work. An ATProto account is required. If they don't have one, my testers need to get an ATProto account.

But this might not be right for you. If you want to keep your users secret, you’ll need to keep your own list. Also, it’s hackable. If you want to muck around in my binaries and do that, good for you, but please don’t redistribute my work. And finally, my users have to have an AT Protocol account, but I think no one at ATmosphere really thinks that’s a problem.

Let's talk! the politics of open source poke recommendations inline skating spots corporate horror stories why your programming language is better than mine favorite KEXP DJs network proxies road trip adventures what happens when you drink too much caffeine the best breeders song risks of DID:PLC fish and chips fish and chips fish and chips fish and chips urban hikes the song you’ve been looping obsessively e-bikes vs cars the band you wish you played in vegan muffins what happened when you came out your favorite coding font badshah vs honey singh kubernetes alternatives who you know at qobuz beastie boys lyrics your simple explanation of elliptic curve cryptography the best black teas microtonal sequencers PDS benchmarks making a living doing ATProto things to do in the Pacific NW

So again, thanks for your attention! Here’s a list of things that I enjoy chatting about, so if you see me around and don’t have a starter topic, pick any of these!