An app can be a home-cooked meal

Have you heard about this new app called BoopSnoop?

It launched in the first week of 2020, and almost immediately, it was downloaded by four people in three different time zones. In the months since, it has remained steady at four daily active users, with zero churn: a resounding success, exceeding every one of its creator’s expectations.

:)

I made a messaging app for, and with, my family. It is ruthlessly simple; we love it; no one else will ever use it. I wanted to jot down some notes about how and why I made it, both to (a) offer a nudge to anyone else out there considering a similar project and (b) suggest something a little larger about software.

Your browser does not support the HTML5 video tag. Rats!

Sifting through the ruins

My story begins with another app, now defunct, called Tapstack.

Its interface couldn’t have been simpler: opening it, you saw a live feed from your phone’s camera. Below, a grid of faces, some of them representing individuals, others representing groups. My grid had four cells: my mom, my dad, my sister, and a group representing all three. Just like Snapchat or Instagram, you tapped to capture 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 messages awaited you in the corner, and, after you reviewed them, they were discarded.

It was all so simple that it was barely there. Tapstack more closely approximated a clear pane of glass than any app I’ve ever used.

For years, Tapstack was the main channel for my family’s communication. The app didn’t lend itself to practical information-sharing or logistical coordination. Its specialty was ambient presence. I met one of Tapstack’s designers once, and they told me it seemed to be most popular with far-flung families: a diaspora app. Because there was no threading and no history, messages there didn’t carry the burden of an expected reply. Really, they were always just a carrier wave for another sentiment, and that sentiment was always the same: I’m thinking of you.

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

It never seemed to me that Tapstack attracted a huge number of users. I don’t know if the company ever made a cent. There was no advertising in the app, and they never asked their users to pay.

Why didn’t they ask us to pay?

Over the course of 2019, I felt a rising dread as the months ticked by and the app didn’t receive a single update. (That’s a new 21st-century feeling.) Sure enough, in the fall, Tapstack announced that it was shutting down. It offered its users a way to export their data. It went gracefully.

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

How to snoop a boop

My family all agreed we were going to need a replacement, and while my first instinct was to set up a group on Instagram or WhatsApp, the prospect of having our warm channel surrounded—encroached upon—by all that other garbage made me feel even sadder than the prospect of losing Tapstack.

So, instead of settling for a corporate messaging 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 captures photos and videos and shuttles them around. Messages wait in a queue; once viewed—always full-bleed, edge to edge with no distractions, no prods to comment or share—they disappear. That is literally it. The app has basically no interface. There’s a camera button and a badge in the corner, mild green, that indicates how many messages are waiting.

Your browser does not support the HTML5 video tag. Rats!

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

Tapstack was simple to start with, and I made it even simpler. Unlike Tapstack, my app doesn’t need a login system. It doesn’t need an interface to create and manage contacts. It already knows exactly who’s using it. (This makes me think about an old blog post by Clay Shirky: “Situated software, by contrast, doesn’t need to be personalized—it is personal from its inception.”)

The core of the app is a camera view with the now-familiar tap/press for photo/video affordance. This is an off-the-rack open source component; what a gift. I don’t think this project would have been possible without it.

Besides the app itself, not much is required: an AWS S3 bucket to hold the photos and videos, a couple of AWS Lambda functions to do things when new messages are uploaded. The back end is actually fairly elegant—which is uhhh not usually my style—but, again, that’s only because it’s so simple. There’s barely anything there.

I distributed the app to my family using TestFlight, and in TestFlight it shall remain forever: a cozy, eternal beta.

In a better world, I would have built this in a day using some kind of modern, flexible HyperCard for iOS, exporting a sturdy, standalone app that did exactly what I wanted and nothing else.

In our actual world, I built it in about a week, and roughly half of that time was spent wrestling with different kinds of code-signing and identity provisioning 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 components and sample code that made this project possible. In the 21st century, as long as you’re operating within the bounds of the state of the art, programming can feel delightfully Lego-like. All you have to do is rake your fingers through the bin.

I know I ought to pay it forward and publish the code for my app. Even if it doesn’t quite work for anyone else as-is, it might provide a helpful template—one I would have been grateful to have. For now, though, the code is riddled with application-specific values, including several authentication keys. I have to pull those out and Configure Things More Responsibly before I can share anything on GitHub.

I am unapologetic, however, about the Extremely Specific nature of the app’s code; it’s inseparable from the spirit in which it was made. Which brings me to:

Cooking at home

For a long time, I have struggled to articulate what kind of programmer I am. I’ve been writing code for most of my life, never with any real discipline, but/and I can, at this point, make the things happen on computers that I want to make happen. At the same time, I would not last a day as a professional software engineer. Leave me in charge of a critical database and you will return to a smoldering crater.

Making this app, I figured it out:

I am the programming equivalent of a home cook.

The exhortation “learn to code!” has its foundations in market value. “Learn to code” is suggested as a way up, a way out. “Learn to code” offers economic leverage, a squirt of power. “Learn to code” goes on your resume.

But let’s substitute a different phrase: “learn to cook.” People don’t only learn to cook so they can become chefs. Some do! But far more people learn to cook so they can eat better, or more affordably, or in a specific way. Or because they want to carry on a tradition. Sometimes they learn just because they’re bored! Or even because—get this—they love spending time with the person who’s teaching them.

The list of reasons to “learn to cook” overflows, and only a handful have anything to do with the marketplace. This feels natural; anyone who has ever, like… eaten a meal… of any kind… recognizes that cooking is marbled deeply into domesticity and comfort, nerdiness and curiosity, health and love.

Well, it’s the 21st century now, and I suspect that many of the people you love are waiting inside the pocket computer you are never long without, so I will gently suggest that coding might be marbled the same way.

And, when you free programming from the requirement to be general and professional and scalable , it becomes a different activity altogether, just as cooking at home is really nothing like cooking in a commercial kitchen. I can report to you: not only is this different activity rewarding in almost exactly the same way that cooking for someone you love is rewarding, there’s another feeling, one that persists as you use the app together. I have struggled with words for this, but/and I think it might be the crux of the whole thing:

This messaging app I built for, and with, my family, it won’t change unless we want it to change. There will be no sudden redesign, no flood of ads, no pivot to chase a userbase inscrutable to us. It might go away at some point, but that will be our decision, too. What is this feeling? Independence? Security? Sovereignty?

Is it simply… the feeling of being home?

February 2020, Oakland