Triager
Triager is an internal dashboard for on-call engineers at Readwise. It aggregates data from multiple services into a single view so you can diagnose and resolve issues without tab-switching between tools. Once it has enough context about a bug, it can also draft a pull request with the proposed fix.
How it works
Triager aggregates data from multiple services and walks you through a single triage loop:
- An issue surfaces — a report in Slack
#dev-help(support ticket or Sentry/New Relic upticks pending). - Classify the bug using heuristics to determine what type of issue it is (parsing, sync, client-side, server-side, etc.).
- Search Linear and Slack for prior discussion and existing tickets to avoid duplicate work.
- Based on the classification, pull only the relevant data — e.g. a parsing issue doesn't need Supernova user data, a feature request might need Canny context instead of Sentry traces.
- Present a report in the dashboard with all the context gathered. If the on-call engineer clicks through, Triager can append to an existing ticket or create a new one.
- If the bug is well-understood, have Triager draft a PR with the proposed fix.
Integration summary
Internal context
| Service | What it provides | Typical use during triage | Status |
|---|---|---|---|
| Slack | Team communication (all channels) | Receive bug reports from #dev-help; search across all channels for prior discussion and context |
✅ |
| Linear | Issue tracking | Find existing tickets with related context, avoid duplicates | 🔜 |
| Canny | Feature requests and vote counts | Determine if an issue is a feature request rather than a bug, check how popular/requested it is | 🔜 |
Customer context
| Service | What it provides | Typical use during triage | Status |
|---|---|---|---|
| HelpScout | Customer email history | Read the full support thread, see prior complaints, check ticket status | ✅ |
| Supernova | Enriched user data | Look up account state, subscription, devices for a specific user | 🔜 |
| Prod databases | Readwise and Bookstore DBs | Direct queries when you need data not surfaced by other tools | ✅ |
Bug tracking
| Service | What it provides | Typical use during triage | Status |
|---|---|---|---|
| New Relic | Client-side error and performance data | Spot frontend bugs, JS exceptions, page load regressions | 🔜 |
| Sentry | Server-side error tracking | Investigate backend exceptions, stack traces, breadcrumbs | 🔜 |
| Postgres (outgoing email) | Email send checking | Verify outgoing email delivery status | 🔜 |
Slack (communication)
#dev-help is the primary entry point — the support team posts bug reports there for the on-call engineer. Triager monitors this channel as a key triage input. Beyond #dev-help, Triager searches across all Slack channels for prior conversation, related incidents, and context that can enrich the investigation. During triage, use it to answer:
- What did the support team report in
#dev-help? - Has someone already looked into this?
- Was there a recent deploy or config change that might be related?
- Is there a thread with investigation notes from a previous incident?
Linear (tickets)
Linear integration lets you search existing tickets for prior context. During triage, use it to answer:
- Has this been reported before?
- Is there an existing ticket with investigation notes?
- What was the resolution last time this happened?
HelpScout (customer emails)
HelpScout gives access to the full customer support inbox. During triage, use it to answer:
- What exactly did the user report, in their own words?
- How many users have written in about this?
- Is there an ongoing thread with more detail or reproduction steps?
Canny (feature requests)
Canny tracks feature requests and vote counts. During triage, use it to answer:
- Is this a feature request rather than a bug?
- How popular or requested is this feature? How many votes does it have?
- Has this already been requested and tracked?
New Relic (client errors)
New Relic surfaces errors and performance problems happening in the browser or mobile client. During triage, use it to answer:
- Is this a client-side problem or server-side?
- Which browsers/OS versions are affected?
- Did error rates spike after a recent deploy?
Sentry (server errors)
Sentry captures backend exceptions with full stack traces, request context, and breadcrumbs. During triage, use it to answer:
- What exception is being thrown and where?
- How many users are affected?
- Is this a new issue or a regression?
Supernova (user data)
Supernova provides enriched data about a specific user. During triage, use it to answer:
- What plan/subscription is this user on?
- What device and app version are they using?
- Is there anything unusual about their account state?
Prod databases (Readwise & Bookstore)
Direct database access for when you need data that other tools don't surface. During triage, use it to answer:
- What does this user's data actually look like in the DB?
- Are there data integrity issues causing the bug?
- How many rows/users are affected by this issue?
Postgres (outgoing email)
Checks outgoing email delivery status. During triage, use it to answer:
- Did the user actually receive the email?
- When was the last email sent to this address?
- Are there delivery failures or bounces?
Tech stack
- Django backend with Django Ninja API
- Tailwind CSS frontend
- ContextOne for data enrichment
- Integrations via service-specific API clients