Robin Sloan
the lab
February 2020

An app can be a home-cooked meal

Have you heard about this new app called Boop­Snoop?

It launched in the first week of Jan­u­ary 2020, and almost immediately, it was down­loaded by four peo­ple in three dif­fer­ent time zones. In the years since, it has remained steady at four daily active users, with zero churn: a resound­ing success, exceed­ing every one of its creator’s expectations.

:)

I made a mes­sag­ing app for, and with, my fam­ily. It is ruth­lessly sim­ple; we love it; no one else will ever use it. I wanted to share a few notes about how and why I made it, both to (a) offer a nudge to any­one else con­sid­er­ing a sim­i­lar project, and (b) sug­gest some­thing a lit­tle larger about soft­ware.

Tap or click to unmute.

Barely there

My story begins with another app, now defunct, called Tap­stack.

Opening the app, you saw a live feed from your phone’s cam­era. Below, a grid of faces, some of them representing individuals, oth­ers representing groups. My grid had four cells: my mom, my dad, my sister, and a group rep­re­sent­ing all three. Just like Snapchat or Insta­gram, you tapped to cap­ture a photo, pressed to record a video. As soon as you lifted your finger, your message zipped away, with no editing, no reviewing. A “stack” of mes­sages awaited you in the corner, and, after you tapped through them, they were discarded.

It was all so sim­ple that it was barely there. Tap­stack more closely approx­i­mated a clear pane of glass than any app I’ve ever used.

For sev­eral years, Tapstack was the main chan­nel for my fam­ily’s communication. The app didn’t lend itself to prac­ti­cal cor­re­spon­dence or logis­ti­cal coordination. Its spe­cialty was ambi­ent presence. I met one of Tap­stack’s design­ers once, and they told me it seemed espe­cially pop­u­lar with far-flung families: a dias­pora app. Because there was no thread­ing and no history, mes­sages didn’t carry the bur­den of an expected reply. Really, they were just a car­rier wave for another sentiment, and that sen­ti­ment was always the same: I’m think­ing of you.

A selfie with coffee, a pic­ture of an ice-covered pond, a video of my nephews being goofballs: I’m thinking of you, I’m thinking of you, I’m think­ing of you.

It never seemed to me that Tap­stack attracted a huge num­ber of users. I don’t know if the com­pany ever made a cent. There was no adver­tis­ing in the app, and they never asked their users to pay.

Why didn’t they ask us to pay?

In 2019, I felt a ris­ing dread as the months ticked by and the app didn’t receive a sin­gle update. Sure enough, in the fall, Tap­stack announced that it was shut­ting down. It offered its users a way to export their data. It went gracefully.

It was, I have to say, a really great app.

Here comes a new challenger

My fam­ily all agreed we were going to need a replacement, and while my first instinct was to set up a group on Insta­gram or WhatsApp, the prospect of hav­ing our warm chan­nel surrounded — encroached upon — by all that other garbage made me feel even sad­der than the prospect of losing Tap­stack.

So, instead of set­tling for a cor­po­rate mes­sag­ing app … 

I built one just for us.

I’ll show you the screen capture again, but the point is that there’s not much to show. The app is a “magic window” that cap­tures pho­tos and videos and shut­tles them around. Mes­sages wait in a queue and, once viewed — always full-screen, with no distractions, no prods to com­ment or share — they disappear. That is lit­er­ally it. The app has basi­cally no inter­face. There’s a cam­era but­ton and a badge in the corner, chill green, that indi­cates how many mes­sages are wait­ing.

Tap or click to unmute.

Here are a few mildly tech­ni­cal observations. Feel free to skip ahead if this part doesn’t interest you:

In a bet­ter world, I would have built this in a day, using some kind of modern, flex­i­ble Hyper­Card for iOS.

In our actual world, I built it in about a week, and roughly half of that time was spent wrestling with dif­fer­ent fla­vors of code-signing and iden­tity pro­vi­sion­ing and I don’t even know what. I waved some incense and threw some stones and the gods of Xcode allowed me to pass.

Our actual world isn’t totally broken. I do not take for granted, not for one millisecond, the open source com­po­nents and sam­ple code that made this project pos­si­ble. In the 21st cen­tury, as long as you’re oper­at­ing within the bounds of the state of the art, pro­gram­ming can feel delight­fully Lego-like. All you have to do is rake your fin­gers through the bin.

I know I ought to pay it for­ward and pub­lish the code for my app. Even if it doesn’t work for any­one else as-is, it might pro­vide a help­ful guide — one I would have been grate­ful to have. But the code is rid­dled with application-spe­cific values, well-salted with authen­ti­ca­tion keys. This app is Entirely Itself — not a framework, not a template — and that’s insep­a­ra­ble from the spirit in which it was made. Which brings me to:

Cooking at home

For a long time, I have strug­gled to artic­u­late what kind of pro­gram­mer I am. I’ve been writ­ing code for most of my life, never with any real discipline, but/and I can, at this point, make the things happen on com­put­ers that I want to make hap­pen. At the same time, I would not last a day as a pro­fes­sional soft­ware engineer. Leave me in charge of a crit­i­cal data­base and you will return to a smoldering crater.

Building this app, I figured it out:

I am the pro­gram­ming equiv­a­lent of a home cook.

The exhor­ta­tion “learn to code!” has its foun­da­tions in mar­ket value. “Learn to code” is sug­gested as a way up, a way out. “Learn to code” offers eco­nomic leverage, pro­fes­sional transformation. “Learn to code” goes on your resume.

But let’s sub­sti­tute a dif­fer­ent phrase: “learn to cook.” Peo­ple don’t only learn to cook so they can become chefs. Some do! But many more peo­ple learn to cook so they can eat bet­ter, or more affordably. Because they want to carry on a tradition. Some­times they learn because they’re bored! Or even because — get this — they love spend­ing time with the per­son who’s teaching them.

The list of rea­sons to “learn to cook” overflows, and only a hand­ful have any­thing to do with the mar­ketplace. This feels natural; any­one who has ever, like … eaten a meal … of any kind … recognizes that cook­ing is totally tan­gled up with domes­tic­ity and curiosity, health and love.

Well, it’s the 21st cen­tury now, and I suspect that many of the peo­ple you love are wait­ing inside the pocket com­puter you are never long without, so I will gen­tly sug­gest that per­haps cod­ing might be tan­gled the same way.

When you lib­er­ate pro­gram­ming from the require­ment to be gen­eral and pro­fes­sional and scalable, it becomes a different activity altogether, just as cooking at home is really noth­ing like cooking in a com­mer­cial kitchen. I can report to you: not only is this dif­fer­ent activ­ity rewarding in almost exactly the same way that cook­ing for some­one you love is reward­ing, there’s another feel­ing, too, spe­cific to this realm. I have strug­gled to find words for this, but/and I think it might be the crux of the whole thing:

This mes­sag­ing app I built for, and with, my fam­ily, it won’t change unless we want it to change. There will be no sud­den redesign, no flood of ads, no pivot to chase a user­base inscrutable to us. It might go away at some point, but that will be our decision. What is this feel­ing? Independence? Security? Sovereignty?

Is it simply … the feel­ing of being home?

Update, Feb­ru­ary 2022: Two years later, my fam­ily still uses Boop­Snoop every day. I have added one (1) feature, at my mother’s request.

February 2020, Oakland