← All posts

Apps should sound like people

April 3, 2026 · 5 min read · by the founder

Open the settings screen of any utility app and read what's there. Read it like a book.

Enable Notifications. Manage Subscriptions. Export Data. Restore Purchases. Delete Account. Sync Preferences. Application Logs. Clear Cache.

Then read what's there in Cue's settings screen:

Haptic Celebrations. Let it buzz when something good happens. Achievement Celebrations. Confetti for small wins. Quiet Home Zone. Silence alerts while you're on the couch. Show Tips. Re-shows dismissed tips every session. Turn off to make "X" permanent.

One of these screens was written by a form. The other one was written by a person. I want to talk about why that matters more than it looks like it does.


Every app, every screen, every sentence the product shows you is a small speech act. The app is a voice in your day, whether it wants to be or not. Most apps have not picked a voice, they've picked the default voice of their framework, or the default voice of the last designer who passed through, or the default voice of legal. That voice tends to be blank, stern, a little nervous, mildly corporate, and in a particular dialect of tech-English that nobody outside of tech actually speaks. ("We've detected unusual activity on your account.")

Voice isn't a frill. The app has to say things. You will read those things at rates of dozens per day, hundreds per week. Over time the voice either makes the app feel like a tool you trust or a system you tolerate.

Cue's voice, and this is in the code, in a file called Copy.swift, checked in alongside the features it powers, is deliberate. Warm, not cutesy. Observational, not salesy. Occasionally wry. Fond of small specific nouns over big abstract ones. Never uses "Oops!". Never uses "Uh oh!". Never uses "You're all set!". Never uses "We hope you'll", or "We'd love to", or "We think you'll", because the app is not a we, it's a phone, and it doesn't hope or love or think. When the app says something, it says it from the user's side of the table.

The wallet footer sometimes reads "Your gift cards missed you." when you've been away a week. A person wrote that. A person decided that, rather than a blank footer or a streak counter or an empty state, the right thing was a single sentence that's slightly corny, slightly true, slightly a joke, and specifically yours. That kind of sentence is the result of a thousand small rejections in a Slack thread at 11 PM.


I want to be honest about something. Voice is the first thing people copy, because it's the cheapest thing to copy. You can drop a "Your gift cards missed you" into any app's empty state tomorrow. You cannot drop the patient restraint that led to it.

The restraint is: not writing "Welcome back, Wallet Warrior!". Not writing "Oh no, it looks like you've been away a while." Not writing "Psst! You haven't visited us in 7 days!" Those are the drafts that actually came up in review, because the default voice of the framework wants to write those. Removing them required a person to notice every time and say no. Over and over. For every sentence in the app.

What eventually survives that process is a small voice that sounds like a single specific person, warm, observational, competent, slightly dry, occasionally funny in a way that doesn't try too hard. That voice is the voice we refer to, inside the project, as wry. There's also a warm setting (friendly but straight, no jokes), and an off setting (fully silent, footers hide themselves). Three tones, user-selectable. The App Personality press kit has the full list of what each tone changes, if you want to see the spec.

THREE TONES · ONE COPY FILE · USER-SELECTABLE WRY default "Your gift cards missed you." a sentence, not a dashboard WARM friendly · no jokes "You have 3 cards ready." plain, respectful, unembellished OFF fully silent footers hide themselves Copy.swift · one file · grep-able
Same moment, three registers. The off switch is as much of the voice as the voice itself.

Let me linger on the off setting for a second, because it's the one I'm most proud of.

Some users do not want a voice. They want a utility. They want no footer, no wry greeting, no cute lock-screen banner. They want the app to do the job and shut up. The right thing is to let them have that. So Cue has a fully silent mode. The app disappears into the background. It is, in that mode, nearly wordless, only the unavoidable labels remain.

This is not a concession. This is the same respect as the voice itself. The voice exists to be warm to users who want warmth. The off switch exists to be quiet to users who want quiet. The wrong move would be to have exactly one voice and to push it on everyone. The right move is to have a voice at all, and to let it be opted out of.


I've come to believe the single best test of a product team is: can you read the strings in your app out loud without cringing? Not once, the whole set. Every button. Every empty state. Every error. Every notification. Every tooltip. Every line of microcopy that appears on the screen for a user.

If you cringe, the user cringed. They just didn't tell you.

Cue is not perfect here. I cringe at maybe four lines of copy in the app right now, and I know about them, and I will fix them. But I've built the product to make those four lines visible rather than hidden. They live in one file. I grep them. I change them. I review them. That's the point. The voice of the app is not an emergent property of a hundred engineers writing notification strings; it's one person's voice, persisted in a file, refused when it slips.

Apps should sound like people. Yours can. Go find your copy file. Read it out loud. Fix the four lines. That's the whole project.

Follow CardCue Pro