Our voice

AppSignal has one voice. Tone shifts with the moment.

We sound like a knowledgeable colleague who respects your time: direct, technical, comfortable with jargon when the audience is. Closer to Linear or Vercel than Mailchimp or Intercom. Warm at the edges, never performatively friendly.

Tone by surface

Voice stays the same. Tone — energy and warmth dialled up or down — depends on the surface and on what just happened to the reader.

SurfaceEnergyWarmthLengthExample
Product UI — calm referenceLowLow–mediumConciseAnomaly detected: mean response time exceeded 400 ms in the web namespace.
Documentation — patient teacherLowMediumAs neededUse the Organization-level Push API key for back-end integrations.
Errors — clear communicatorLowLowOne sentence + actionAppSignal could not save the dashboard. Try again, or contact support with the dashboard ID.
Empty states — encouraging guideMediumMediumOne line + buttonNo incidents in this namespace yet. When your app reports errors, they appear here.
Support — helpful colleagueMediumHighConversationalThanks for reaching out. We've checked your integration; the issue is with the Firehose endpoint configuration.
Marketing — confident specialistMedium–highMediumPunchyTrack errors, performance, and uptime for Ruby, Elixir, Node.js, Python, and more.

Person and pronouns

The product talks to you, the developer using AppSignal. It refers to itself as AppSignal in errors and notifications, and as we only in support-facing contexts where a personal tone helps. Stay consistent within a single surface.

✅ Prefer❌ Avoid
AppSignal could not verify the key.You entered an invalid value.
Configure your integration to start sending data to AppSignal.The account holder must configure the integration before the data can be sent.

What we don't sound like

PatternWhy we avoid itRewrite
ChirpyExclamation points and celebrations feel patronising when someone is debugging at 2 AM"Yay! Your deploy is live!" → "Your deploy is live."
ApologeticHedging or self-blame undermines trust. State what happened and what to do"Unfortunately, we weren't able to process all your data" → "Some data points were dropped during ingestion. Check your payload size against the limits."
SalesyMarketing language makes docs and UI feel untrustworthy"Our best-in-class anomaly detection" → "Anomaly detection"
Forced casualnessMatey register reads badly to a technical audience, and worst of all in an error"Looks like something went wrong! No worries, we've got you" → "An error occurred in the web namespace."

The last row is a repair. The live page's text collided with an earlier edit and reads "Budd to buddy" / "doesn't might not be the best"; the intent was recoverable and has been rewritten. Fix it on the live page too.