Contents

Chapter 1

Customization Guide — On-Call & Incident Tracker

Adapt this incident management system to your team's size, tooling, and processes.


Team Size Adaptations

Small Team (2-4 engineers)

  • Simplify to Primary On-Call only (remove Secondary column)
  • Use weekly rotations — each person is on-call every 2-4 weeks
  • Collapse Tier 2 and Tier 3 escalation into one level
  • Everyone handles all severity levels

Medium Team (5-15 engineers)

  • Keep Primary + Secondary on-call
  • Use biweekly rotations to reduce fatigue
  • Add specialist on-call for specific domains (database, security)
  • Split Tier 1 (first responder) and Tier 2 (specialist) clearly

Large Team (15+ engineers)

  • Add follow-the-sun rotations across time zones
  • Create per-service on-call rotations (platform, infrastructure, product)
  • Add Tier 3 management escalation for SEV1
  • Consider separate "Incident Commander" and "Technical Lead" roles

Adding Follow-the-Sun Coverage

Add a "Region" select to the On-Call Schedule:

  • AMER (Americas): coverage 09:00-21:00 UTC-5
  • EMEA (Europe/Middle East): coverage 08:00-20:00 UTC+1
  • APAC (Asia-Pacific): coverage 09:00-21:00 UTC+9

Create a Timeline view grouped by Region to visualize 24-hour coverage.


Severity Level Customization

Adding SEV0 (Existential)

For companies where outages have extreme business impact:

LevelNameResponseExample
SEV0Existential5 minData breach, complete data loss, regulatory violation

SEV0 should page everyone in Tier 1 + Tier 2 simultaneously and auto-notify Tier 3 management.

Simplifying to 3 Levels

If SEV3 and SEV4 feel redundant:

LevelNameResponseReplaces
CriticalPage immediately15 minSEV1
MajorSlack alert1 hourSEV2
MinorNext business day4-24 hoursSEV3 + SEV4

Update the Severity select options and adjust all formula references.


Integrating with Alerting Tools

This Notion system complements (doesn't replace) alerting tools. Here's how they fit together:

ToolRoleNotion Integration
PagerDutyReal-time alerting, phone/SMS escalationSync on-call schedule via API. Log incidents from PagerDuty webhook.
OpsGenieAlert routing and deduplicationUse OpsGenie for pages, Notion for postmortems and SLA tracking.
DatadogMonitoring and dashboardsLink Datadog dashboard URLs in the Incidents database.
GrafanaMetrics visualizationEmbed Grafana snapshot URLs in postmortem pages.
SlackCommunication hubCreate a #incidents channel. Bot posts to Slack when new incident is logged.

Notion API Automation Ideas

1. Auto-create incident — Webhook from PagerDuty creates a new Incidents database entry

2. SLA monthly update — Cron job pulls uptime data from monitoring and updates SLA Targets

3. On-call reminder — Send Slack message on rotation day linking to handoff notes

4. Postmortem deadline — Auto-create postmortem entry 24h after incident resolution


Postmortem Process Customization

Adding a Review Meeting Workflow

Add these properties to the Postmortems database:

  • Review Date (Date) — when the postmortem review meeting is scheduled
  • Attendees (Relation → Escalation Contacts) — who should attend
  • Review Status (Select) — Draft → Ready for Review → Reviewed → Actions Complete

Custom Contributing Factor Categories

Replace the free-text Contributing Factors with a Multi-select:

  • Configuration Error
  • Code Bug
  • Capacity Planning
  • Monitoring Gap
  • Process Failure
  • External Dependency
  • Communication Breakdown
  • Documentation Gap

This enables filtering postmortems by common failure patterns over time.

Action Item Tracking Enhancement

Create a separate Action Items database instead of tracking counts:

  • Action Item (Title)
  • Postmortem (Relation → Postmortems)
  • Owner (Relation → Escalation Contacts)
  • Priority (Select: P0, P1, P2)
  • Due Date (Date)
  • Status (Select: Not Started, In Progress, Done)
  • Verification (Text — how to verify the action is effective)

This gives you a dedicated board view of all outstanding action items across incidents.


SLA Tracking Enhancements

Adding Historical SLA Data

Create a separate SLA Monthly History database:

  • Service (Relation → SLA Targets)
  • Month (Date)
  • Uptime (Number, percent)
  • MTTR (Number, minutes)
  • Incident Count (Number)
  • Status (Formula — calculate if SLA was met)

This enables trend analysis over time without overwriting current-month data.

Error Budget Tracking

Add these properties to SLA Targets:

  • Monthly Error Budget (minutes) — calculated from uptime target
  • Budget Consumed (minutes) — sum of downtime this month
  • Budget Remaining (minutes) — formula: budget - consumed
  • Budget Status — formula: green if >50% remaining, yellow if 20-50%, red if <20%

View Customization Ideas

War Room View

Create a filtered Board on Incidents:

  • Filter: Status is "Active" or "Investigating"
  • Group by: Severity
  • Properties: Title, Affected Services, Incident Commander, time since detection
  • This is your "active fires" view during incident response

Weekly Report View

Create a Table on Incidents:

  • Filter: Detected At is within the last 7 days
  • Group by: Severity
  • Calculate: Count of incidents per severity
  • Include: Duration (minutes) with average and total

On-Call Fatigue Dashboard

Track on-call health with a table showing:

  • Each team member's total on-call weeks this quarter
  • Number of pages received per rotation
  • Average sleep interruptions (add as a field in On-Call Schedule)

Notification Preferences

Add a Notification Rules page documenting when to use which channel:

SeverityPrimary ChannelSecondary ChannelManagement Notify
SEV1Phone callSlack #incidentsImmediate
SEV2Slack DM + mentionEmailWithin 1 hour
SEV3Slack #incidentsEmailDaily summary
SEV4Slack #incidentsNoneWeekly report
Chapter 2

Import Guide — On-Call & Incident Tracker

Step-by-step instructions for setting up the On-Call & Incident Tracker in your Notion workspace. Allow 20-25 minutes for the full setup.


Prerequisites

  • A Notion account (free or paid — team workspace recommended for shared on-call)
  • CSV files from the databases/ folder
  • Markdown files from pages/ and templates/ folders

Step 1: Import Escalation Contacts

Import this first — other databases reference team members.

1. Navigate to your target Notion page

2. Type /table → select "Table - Full page"

3. Click ···"Merge with CSV" → select databases/escalation_contacts.csv

Configure Column Types

ColumnSet Type ToNotes
NameTitle
RoleText
TeamSelectPlatform=blue, Infrastructure=purple, Product=green, Security=red, Engineering=gray
TierSelect1=green (first responder), 2=yellow (specialist), 3=red (management)
PhonePhone
EmailEmail
Slack HandleText
TimezoneSelect
Notification PreferenceMulti-selectSlack=blue, Phone=red
Availability NotesText

Create Views

1. By Tier — Board view grouped by Tier

2. By Team — Table grouped by Team

3. Alphabetical — Default table sorted by Name


Step 2: Import SLA Targets

1. Create new "Table - Full page"

2. Merge with CSV → select databases/sla_targets.csv

Configure Column Types

ColumnSet Type ToNotes
ServiceTitle
CategorySelectCore=red, Product=blue, Supporting=yellow, Infrastructure=purple
Uptime TargetTextDisplay as percentage string
Response Time Target (p99)Text
MTTR Target (minutes)Number
Current Month UptimeText
Current Month MTTRNumber
Incidents This MonthNumber
Last Incident DateDate
StatusSelectMeeting SLA=green, At Risk=yellow, Breached=red
NotesText

Create Views

1. Health Board — Board view grouped by Status

2. Core Services — Table filtered to Category = "Core"

3. At Risk — Table filtered to Status = "At Risk" or "Breached"


Step 3: Import On-Call Schedule

1. Create new "Table - Full page"

2. Merge with CSV → select databases/on_call_schedule.csv

Configure Column Types

ColumnSet Type ToNotes
Week StartingDate
Week EndingDate
Primary On-CallRelationLink to Escalation Contacts database
Secondary On-CallRelationLink to Escalation Contacts database
Shift TypeSelectWeekday=blue, Weekend=orange, Weekday + Weekend=purple
Handoff NotesText
Swap HistoryText
Coverage GapsText

Create Views

1. Calendar View — Use "Week Starting" as the date field

2. Timeline View — Shows rotation blocks visually, use Week Starting to Week Ending range

3. Current + Future — Table filtered to Week Starting is on or after Today, sorted ascending

4. My On-Call — Table filtered by Primary or Secondary = your name


Step 4: Import Incidents

1. Create new "Table - Full page"

2. Merge with CSV → select databases/incidents.csv

Configure Column Types

ColumnSet Type ToNotes
Incident IDTitleFormat: INC-YYYY-NNN
TitleText
SeveritySelectSEV1=red, SEV2=orange, SEV3=yellow, SEV4=gray
StatusSelectActive=red, Investigating=orange, Mitigated=yellow, Resolved=green
Affected ServicesRelationLink to SLA Targets database
Detected AtDateInclude time
Acknowledged AtDateInclude time
Mitigated AtDateInclude time
Resolved AtDateInclude time
Incident CommanderRelationLink to Escalation Contacts database
Detection MethodSelectMonitoring Alert=green, Customer Report=orange, Internal Report=blue
Root Cause SummaryText
Customer ImpactText
Action Items StatusText

Create Views

1. Active Incidents Board — Board grouped by Status, filtered to Status is not "Resolved"

2. Severity Board — Board grouped by Severity

3. Timeline — Sort by Detected At descending (most recent first)

4. This Month — Table filtered to Detected At is within current month


Step 5: Import Postmortems

1. Create new "Table - Full page"

2. Merge with CSV → select databases/postmortems.csv

Configure Column Types

ColumnSet Type ToNotes
Postmortem IDTitleFormat: PM-YYYY-NNN
Incident IDRelationLink to Incidents database
TitleText
Date WrittenDate
AuthorRelationLink to Escalation Contacts database
SeveritySelectSame colors as Incidents
Duration (minutes)Number
MTTR (minutes)Number
Contributing FactorsText
Action Items CountNumber
Completed ActionsNumber
StatusSelectComplete=green, In Progress=yellow, Draft=gray

Create Views

1. Action Item Status Board — Board grouped by Status

2. By Severity — Table grouped by Severity

3. Incomplete Actions — Table filtered to Completed Actions < Action Items Count


Step 6: Set Up Relations and Rollups

On the Incidents Database

  • Add rollup: Postmortem Status from Postmortems relation → Show Status

On the SLA Targets Database

  • Add rollup: Incident Count from Incidents relation → Count all
  • Add rollup: Average MTTR from Incidents relation → Average of "MTTR (minutes)" formula field

On the Escalation Contacts Database

  • Add rollup: Incidents Led from Incidents relation → Count all
  • Add rollup: On-Call Weeks from On-Call Schedule relation → Count all

Step 7: Create Dashboard and Reference Pages

Copy markdown content from pages/ into new Notion pages:

1. Incident Dashboardpages/incident-dashboard.md

2. Incident Response Runbookpages/incident-response-runbook.md

3. Escalation Policypages/escalation-policy.md

Embed linked database views into the dashboard as described in each page's instructions.


Troubleshooting

Dates import without times:

When setting date columns, enable "Include time" in the date property settings. Then re-enter the time values for incident timestamps.

Relations show no results:

Verify the relation is pointing to the correct database name. Notion matches relations by exact database title.

SLA Status formula not working:

Copy the formula from formulas/FORMULAS.md exactly. Property names in formulas must match your column headers character-for-character.

On Call Incident Tracker v1.0.0 — Free Preview