How to adapt the Bug Triage & Issue Tracker to your team's workflow, scale, and tooling.
1. Adjusting Severity Levels & SLA Targets
2. Customizing the Status Workflow
4. Scaling for Different Team Sizes
5. Integrating with External Tools
8. Multi-Product / Multi-Team Setup
The default system uses 4 severity levels. You can modify these to match your organization's standards.
1. Open the Severity Matrix page (pages/severity-matrix.md).
2. Update the SLA targets in the reference table.
3. Update the SLA Status formula in the Bugs database (see formulas/FORMULAS.md) to match your new thresholds.
Example — Startup with aggressive SLAs:
| Level | SLA Target |
|---|---|
| S1 — Critical | 1 hour |
| S2 — High | 8 hours |
| S3 — Medium | 48 hours |
| S4 — Low | 1 week |
Example — Enterprise with business-hours SLAs:
| Level | SLA Target |
|---|---|
| S1 — Critical | 4 business hours |
| S2 — High | 1 business day |
| S3 — Medium | 3 business days |
| S4 — Low | 10 business days |
If you need a "Cosmetic / Trivial" level below S4:
1. Add "S5 — Trivial" to the Severity Select property on the Bugs database.
2. Update the Priority Matrix to include the new row.
3. Update formulas that reference severity values.
If your team is 1-3 people, the full 8-status workflow may be overkill. Simplify to:
New → In Progress → Resolved → Closed
1. Edit the Status Select property — remove statuses you don't need.
2. Update the Board view to reflect fewer columns.
3. Update the SLA Status formula if it references removed statuses.
Common additions:
| Status | When to Use |
|---|---|
| Blocked | Bug fix depends on external team or third-party |
| Needs Info | Bug report lacks reproduction steps or context |
| Won't Fix | Intentional behavior or cost not justified |
| Duplicate | Already tracked under another Bug ID |
| Deferred | Valid bug, but intentionally postponed to a future quarter |
To add: Edit the Status Select property → add new options with appropriate colors.
Add a Checkbox property called "Customer Reported" to the Bugs database. This lets you:
Replace the single "Environment" Select with a Multi-select if bugs appear in multiple environments:
Add a Select property called "Affected Version" (e.g., v2.3.1, v2.4.0). Useful for:
Add a Number property called "Customers Affected". This helps prioritize by business impact:
Add a URL property called "Fix PR URL". Link directly to the GitHub/GitLab pull request that fixes the bug. Useful for:
Simplify aggressively:
Use the system mostly as-is, with tweaks:
Add structure:
Add hierarchy and automation:
1. Add a URL property called "GitHub Issue" to the Bugs database.
2. When filing a bug, paste the corresponding GitHub issue URL.
3. Use Notion's web clipper to pull GitHub issue content into the bug's page body.
1. Use the Notion API to create a bug entry when a GitHub issue is labeled bug.
2. Webhook flow: GitHub → webhook → your server → Notion API POST /pages.
3. Map fields: GitHub title → Bug Title, GitHub labels → Severity/Tags, GitHub assignee → Assignee.
For two-way sync with Linear or Jira:
1. Use Zapier or Make.com as the integration bridge.
2. Trigger: "New item in Notion Bugs database" → Create issue in Linear/Jira.
3. Trigger: "Issue status changed in Linear/Jira" → Update Status in Notion.
4. Map severity and priority values between systems.
1. Use Notion's built-in Slack integration (Settings → Connections → Slack).
2. Or create a Zapier automation: "New bug with Severity = S1" → Post to #engineering-alerts.
3. Include: Bug ID, Title, Severity, Component, Assignee.
For critical bugs that need immediate on-call response:
1. Zapier trigger: "New bug in Notion where Severity = S1 — Critical".
2. Action: Create PagerDuty incident with bug title and link.
Notion Pro includes database automations. Set up these useful rules:
Auto-assign to triage queue:
SLA reminder:
Auto-close stale bugs:
For advanced automation, use the Notion API with a cron job or serverless function:
# Pseudocode: Flag overdue bugs
1. Query Bugs database where Status NOT IN (Resolved, Closed, Verified)
2. For each bug, compare SLA Deadline to current date
3. If overdue, update a "SLA Breached" checkbox to true
4. Send Slack notification with list of breached bugs
1. Create a new Table view.
2. Filter: SLA Deadline < Today AND Status NOT IN (Resolved, Verified, Closed).
3. Sort: SLA Deadline ascending (most overdue first).
4. Color-code by severity.
1. Create a new Table view.
2. Filter: Assigned To is empty AND Status = "New" or "Triaged".
3. Sort: Priority ascending.
4. This is the triage lead's primary working view.
1. Create a Board view on the Components database.
2. Group by: Criticality.
3. Show the "Active Bug Count" rollup prominently.
4. Components with high bug counts in the Critical column need attention.
1. Create a Table view on the Sprints database.
2. Show: Sprint, Status, Bugs Assigned, Bugs Resolved, and a formula for completion %.
3. Filter: Status = "Active".
4. This gives a quick sprint progress snapshot.
If your organization has multiple products or teams sharing one bug tracker:
Start with Option A (single database) until you exceed ~500 bugs or 3 products. Then split to Option B. Notion handles hundreds of entries well, but thousands can slow down views.
1. Archive resolved bugs quarterly. Move bugs with Status = "Closed" older than 90 days to an "Archive" database. This keeps your active database fast.
2. Review root causes monthly. Sort the Root Causes database by Occurrence Count. The top 3 categories tell you where to invest in prevention.
3. Rotate the triage lead. Don't let one person own triage forever. Rotate weekly so the whole team understands the bug landscape.
4. Track your SLA hit rate. Create a formula that calculates (bugs resolved within SLA) / (total bugs resolved). Target 90%+ for S1 and S2.
5. Link bugs to postmortems. For every S1 bug, create a postmortem page (use the template in templates/) and link it to the bug entry. This builds institutional knowledge.
*Questions? Contact support@datanest.dev*
Step-by-step instructions for importing and configuring the Bug Triage & Issue Tracker in Notion.
databases/ folder1. In Notion, create a new page called "Bug Triage System" (or your preferred name).
2. Add an icon (suggested: 🐛) and a cover image.
3. This page will be the parent for all databases and sub-pages.
Import each CSV file as a new database inside your workspace page. Order matters — import in this sequence so relations can reference existing databases.
components.csv1. Inside your workspace page, click "/" → "Import" → "CSV".
2. Select databases/components.csv.
3. Notion creates a new database. Rename it to "Components".
4. Set property types:
| Column | Notion Property Type |
|---|---|
| Component Name | Title |
| Team Owner | Select |
| Tech Stack | Multi-select |
| Criticality | Select |
| Open Bugs | Number |
| Resolved Bugs (30d) | Number |
| Code Health Score | Number |
| Last Reviewed | Date |
| Repository | URL |
| Notes | Text |
5. Add a Select color scheme for Criticality:
team-members.csv1. Click "/" → "Import" → "CSV" inside the workspace page.
2. Select databases/team-members.csv.
3. Rename the database to "Team Members".
4. Set property types:
| Column | Notion Property Type |
|---|---|
| Name | Title |
| Role | Select |
| Team | Select |
| Expertise Areas | Multi-select |
| Current Bug Count | Number |
| Max Capacity | Number |
| Availability | Select |
| Timezone | Select |
| Slack Handle | Text |
| Notes | Text |
5. Add a Select color scheme for Availability:
sprints.csv1. Import databases/sprints.csv into the workspace page.
2. Rename to "Sprints".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| Sprint | Title |
| Start Date | Date |
| End Date | Date |
| Status | Select |
| Bug Capacity | Number |
| Bugs Assigned | Number |
| Bugs Resolved | Number |
| Goal | Text |
| Retrospective Notes | Text |
4. Select colors for Status:
root-causes.csv1. Import databases/root-causes.csv.
2. Rename to "Root Causes".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| Root Cause Category | Title |
| Description | Text |
| Occurrence Count | Number |
| Last Seen | Date |
| Typical Severity | Select |
| Prevention Strategy | Text |
| Example Bug IDs | Text |
bugs.csv (Main Database)1. Import databases/bugs.csv.
2. Rename to "Bugs".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| Bug ID | Text |
| Title | Title |
| Severity | Select |
| Priority | Select |
| Status | Select |
| Assignee | Text (will become Relation) |
| Component | Text (will become Relation) |
| Sprint | Text (will become Relation) |
| Reported By | Select |
| Reported Date | Date |
| SLA Deadline | Date |
| Resolution Date | Date |
| Root Cause | Text (will become Relation) |
| Environment | Select |
| Steps to Reproduce | Text |
| Expected Behavior | Text |
| Actual Behavior | Text |
| Workaround | Text |
| Tags | Multi-select |
4. Select colors for Severity:
5. Select colors for Priority:
6. Select colors for Status:
Now link the Bugs database to the supporting databases.
1. Open the Bugs database.
2. Click "+" to add a new property.
3. Choose "Relation" → select "Components" database.
4. Name the property "Component (Linked)".
5. For each bug, click the Component (Linked) cell and select the matching component.
6. (Optional) Delete the old text-based "Component" column once all bugs are linked.
1. Add a new Relation property pointing to "Team Members".
2. Name it "Assigned To".
3. Link each bug to the correct team member.
4. (Optional) Delete the old "Assignee" text column.
1. Add a new Relation property pointing to "Sprints".
2. Name it "Sprint (Linked)".
3. Link each bug to its sprint.
4. (Optional) Delete the old "Sprint" text column.
1. Add a new Relation property pointing to "Root Causes".
2. Name it "Root Cause (Linked)".
3. Link each resolved/triaged bug to its root cause category.
4. (Optional) Delete the old "Root Cause" text column.
Rollups aggregate data from related databases. These power your dashboard metrics.
1. Add a Rollup property called "Active Bug Count".
2. Add a Rollup property called "Critical Bug Count".
1. Add a Rollup property called "Assigned Bugs".
2. Add a Rollup property called "At Capacity?".
formulas/FORMULAS.md for the exact formula).1. Add a Rollup property called "Bugs in Sprint".
2. Add a Rollup property called "Resolved in Sprint".
Create multiple views to support different workflows.
1. Open the Bugs database → click "+" next to the current view tab → "Board".
2. Name it "Triage Board".
3. Group by: Status.
4. The columns will be: New | Triaged | Assigned | In Progress | In Review | Resolved | Verified | Closed.
5. Drag bugs between columns to update their status.
6. Sub-group by: Severity (optional — shows severity bands within each column).
1. Add a new Table view called "All Bugs".
2. Show columns: Bug ID, Title, Severity, Priority, Status, Assigned To, Component (Linked), Sprint (Linked), SLA Deadline.
3. Sort by: Priority (ascending), then Reported Date (ascending).
4. This is your master reference view.
1. Add a new Table view called "My Bugs".
2. Add a Filter: Assigned To → contains → [your name].
3. Sort by: Priority ascending.
4. Each team member creates their own "My Bugs" view.
1. Add a new Board view called "By Severity".
2. Group by: Severity.
3. Columns: S1 — Critical | S2 — High | S3 — Medium | S4 — Low.
4. Useful for triage meetings to see the severity distribution at a glance.
1. Add a new Calendar view called "SLA Deadlines".
2. Date property: SLA Deadline.
3. This shows upcoming SLA deadlines on a calendar. Red cards = overdue.
1. Add a new Timeline view called "Sprint Timeline".
2. Timeline by: Reported Date → SLA Deadline (or Resolution Date).
3. Group by: Sprint (Linked).
4. This shows bug lifecycles across sprints.
Copy the content from the pages/ folder into new Notion pages inside your workspace.
1. Triage Dashboard (pages/triage-dashboard.md)
/linked → "Linked view of database" → select your Bugs database → choose the view.2. Severity Matrix (pages/severity-matrix.md)
3. SLA Policy (pages/sla-policy.md)
1. Open the Bugs database.
2. Click the dropdown arrow next to the blue "New" button → "+ New template".
3. Create templates from the templates/ folder:
templates/bug-report-template.md):templates/reproduction-steps-template.md):4. Now when any team member clicks "New" in the Bugs database, they can choose the template.
See formulas/FORMULAS.md for the complete list of formulas. Add these as Formula properties on the Bugs database:
1. SLA Status — Shows "On Track", "At Risk", or "Breached" based on current date vs. SLA Deadline.
2. Age (Days) — Number of days since the bug was reported.
3. Priority Score — Numeric score for sorting (lower = more urgent).
4. Resolution Time — Days between Reported Date and Resolution Date (for resolved bugs).
CSV import creates wrong property types:
Notion sometimes guesses incorrectly. After import, click the property header → "Edit property" → change the type. Data is preserved in most cases.
Relations don't show the right items:
Make sure the relation points to the correct database. If you renamed a database after creating the relation, the relation still works — but double-check by clicking it.
Rollups show "No results":
Rollups only work when the relation has linked entries. Make sure you've linked bugs to components/team members before expecting rollup values.
Formula errors:
Copy formulas exactly from formulas/FORMULAS.md. Notion formulas are case-sensitive and whitespace-sensitive. If a property name has spaces, wrap it in prop("Property Name").
*Need help? Contact support@datanest.dev*