Essays budding
I've revised this idea a bit, but it's not fully-formed yet.
by Matthew Lyon  •  October 8, 2024

Redeeming Codes

My original plan for my life’s work was to create spaces and buildings for people to inhabit, and one might say that my career in tech has been similarly focused on making software fit for people. In my earlier-life learnings of architecture and landscaping, I came across the idea of a Desire Path, an unplanned trail reflecting how people actually traverse an outdoor area.

The idea stuck with me, particularly as I got into computers in the nineties, and watched the wide-open emergence of new tools and ideas, some of which would get adopted into the operating system. People find their own uses for things, regardless and sometimes in-spite of the intentions of the people who designed the thing, which is why we have Misuse Cases.

The point is, things with computers are often used in ways their designers did not forsee. Since interactivity with much software is often not malleable, there’s not a chance for these desire paths to form, and that often leads to frustration for the people using it.

Today’s example involves a feature of Bandcamp called “codes”, which an artist or label can create and then share with others allowing the person redeeming the code to get some material for free. You might think, why are you complaining about getting things for free? and while perhaps there is something to that, you’d be missing the point of this piece — emergent use — entirely.

The lifecycle of a code is fairly simple:

  • When an artist or label creates a batch of codes, Bandcamp makes available export and print functions which surface only the remaining valid codes.

  • When someone goes to redeem a code, they visit a special URL for the artist, type or paste in the 8-character code, and if that code is still valid, the material is added to their Bandcamp collection and they are prompted to download it.

This is all fine and well, and it works, at least, for how I think it was intended to be used: codes being shared individually, one at a time.

However, a common emergent use case for these codes is in marketing blasts from artists: either via email, social media, chat, or somewhere else, they’ll share many codes at once, so some lucky quick-reacting fans can nab some music for free. Here’s an example of something I’ve seen hundreds of times, something I as an artist might have posted, with some real codes:

profile image for @mattly@hachyderm.io
@mattly@hachyderm.io Dec 3, 2023

To celebrate the release of my first EP “Passage of Remnants”, I’ve got some codes to share: https://matthewlyon.bandcamp.com/yum

dj43-cj4l • ncge-hb4s • xvd4-ywwq • dp3f-5wjd • s9sw-xgee • ejlq-cgwv • bfs9-w3h8 • s244-j3f3

You can click the link and try out those codes. I believe it takes a certain amount of introspection to understand what makes for good and bad interface design, so if you want to really replicate how these are shared in the wild, imagine this is an instagram post you’re looking at on your phone. Instagram’s app doesn’t let you copy & paste text from posts, so you have to retype the codes by hand (or screen capture it and use your phone’s OCR software), and you can’t just open the redemption page in a separate window and juxtapost it against this page — you can’t see the code while you’re typing it.

Spoiler alert: as of this writing, only three of those codes are valid. There’s a chance others may have found and redeemed those already, as happens, and therefore none of them would be valid. If you’d like to experience the pain that is the point of this post, I’d recommend trying to figure out if any of them are still available. It’s frustrating, and entirely avoidable.

If you want my EP without fiddling with codes, it’s here and available at no cost.

§

If Bandcamp wanted to support this use case and make it easier for fans receving a batch of codes to redeem them, there are a number of things they could do to support it. Countering the lack of copy & paste of post text on Instagram will prove difficult, but for nearly every other medium via which I’ve seen codes shared like this it’s not a problem.

There may be legitimate reasons for not doing this – but I do not know them and the experience is still frustrating.

I think a solution is pretty obvious and not worth going into too many details, but since I can’t easily create an interface that talks directly to Bandcamp’s servers✳︎ to validate these codes, which is an opportunity to show off in prototyping interfaces when I want to illustrate various tricky scenarios with a server, or interaction with a server isn’t feasible. This example isn’t representative of the complexity I normally deal with, but for a lot of things I work on, static mockups simply cannot compare to getting feedback on the feel of a user interface in context.

✳︎ If you’re working on a complex web project, Cross-Origin Resource Sharing is one of the first things you should figure out. Browsers are inflexible in these policies and this aspect of them will inform your architectural strategy.

I often create meta-control panels for prototypes or part of a project for features-in-progress, available via a hotkey, as behavioral variations need to be evaluated in-context by the people I’m developing for to help determine what the actual behavior should be. To help justify the example, I’m also providing another option that occurred to me after playing with it a bit: a path that selects the text when clicking the field, should all the codes be used already, and the fan has another batch to try.

I set these in Comic Sans with clashing colors to help them feel out of place, to indicate this is not a part of the actual UI and this is not a user setting. The ugliness is a feature — it helps people intuitively understand the thing is out of place.

Go ahead and copy & paste the contents of the pseudo-social media post above into the text area:

This example requires Javascript enabled to work correctly

I think this is a huge improvement over trying individual codes by trial-and-error, but that’s just coming from me as a person who’s tried copying codes out of emails while I can’t get to sleep late at night.

§

It’s often difficult for technically-oriented people to understand that creating “Desire Paths” around rough edges in software is incredibly hard for most people. It’s often not impossible, but it does require a certain intrepidness and skill with computers to script even the things that can be scripted. Sure, you might be able to write a userscript to handle this for you, but would you bother? And even if you did, that work only benefits you & the people you might share it with, not everyone.

Instead, most people use software on the paths its creators paved, since desire paths are out. Part of being a responsbile caretaker of an interaction design flow is understanding the emergent use cases people develop around your features or capabilities and either incorporating those or figuring out how to alter the design to discourage that use case.

This example may perhaps be somewhat simple and somewhat frivolous, but it still causes frustration for people at scale.

Keep in touch

Newsletter RSS Email

Here

Search Home About

Elsewhere

Fediverse BlueSky Instagram Codeberg GitHub Itch

Music

Bandcamp Apple Music Spotify Deezer Tidal

2025 Matthew Lyon