Toil Review Template (Quarterly Operational Load and Automation ROI)
Quarterly toil review: toil definition tests, measurement method, toil share per engineer vs cap, pages per shift, on-call health, toil inventory, automation ROI ranking, decisions
使用方法: Use it each quarter to measure an operations or SRE team's toil and decide which automation to fund. Fill the measurement method and per-engineer toil share first, from tickets, pages and time diaries. The main pitfall is reporting only the team average, which hides the engineers who carry the queues.
预览
Toil Review: [Team name] [Quarter YYYY-QN]
Quarterly review of a team's operational load: how toil is defined and measured, toil share per engineer against an agreed cap, page and interrupt load per on-call shift, on-call health, the toil inventory, automation candidates ranked by return on investment, a capacity headroom check-in, and the decisions taken. Toil is a term from site reliability engineering practice; the Google book Site Reliability Engineering is cited by name only, and the definition tests, method and numbers in this template are original. Replace every
[bracketed]value and every row marked Example.
Document control
| Field | Value |
|---|---|
| Document ID | [TOIL-YYYY-QN-TEAM] |
| Team | [Team name] |
| Review period | [YYYY-MM-DD to YYYY-MM-DD] |
| Review meeting | YYYY-MM-DD |
| Version | [0.1] |
| Status | [Draft / Reviewed / Decisions agreed / Closed] |
| Owner | [@engineering-manager] |
| Approvers/reviewers | [@sre-lead], [@product-owner], [@director-of-engineering] |
| Last updated | YYYY-MM-DD |
| Classification | [Internal] |
| Toil cap in force | [Percentage of available engineering time, agreed on YYYY-MM-DD] |
| Previous review | [TOIL-YYYY-QN-TEAM] |
Approvals
| Role | Name | Decision | Date |
|---|---|---|---|
| Engineering manager | [@name] | [Approve / Approve with conditions / Reject] | YYYY-MM-DD |
| SRE lead | [@name] | [Decision] | YYYY-MM-DD |
| Product owner | [@name] | [Decision] | YYYY-MM-DD |
| Director of engineering | [@name] | [Decision] | YYYY-MM-DD |
Revision history
| Version | Date | Author | Change summary |
|---|---|---|---|
| 0.1 | YYYY-MM-DD | [@name] | Data collected and draft written |
| 1.0 | YYYY-MM-DD | [@name] | Example: Decisions agreed in the review meeting |
| 1.1 | YYYY-MM-DD | [@name] | Example: Automation candidate AUT-004 deferred to next quarter |
Contents
- Executive summary
- Scope and period
- Toil definition and classification rules
- Measurement method
- Toil share per engineer
- Page and interrupt load
- On-call health
- Toil inventory
- Automation candidates ranked by return
- Capacity headroom check-in
- Decisions
- Follow-up of previous actions
- Glossary and references
1. Executive summary
[Summarise the team's toil share and trend, engineers above the cap, page load and out-of-hours load, the top automation investments approved, the engineering time they take and the expected saving.]
Example: In 2026-Q3 the Corvid Commerce platform reliability team spent 959 of 2,860 available hours on toil, a team share of 33.5%, below the team's 40% cap but up from 29.8% in Q2. Two of six engineers (E1 at 44.0% and E3 at 45.0%) were above the cap, both because they carried the release and access-request queues. On-call engineers received 286 pages over 184 twelve-hour shifts (1.55 per shift), and only 66.1% of pages needed action. The team approved three automation investments for Q4 (AUT-002 alert tuning, AUT-001 self-service access and AUT-003 certificate rotation), costing 360 build hours and expected to free about 1,457 hours a year gross (1,397 net of maintenance) once in place. Release promotion automation (AUT-004) was deferred to Q1 because of its 8-month payback.
| Measure | Previous quarter | This quarter | Target (Example) | Status |
|---|---|---|---|---|
| Team toil share (Example) | 29.8% | 33.5% | 40% or less | Met, rising |
| Engineers above cap (Example) | 1 of 6 | 2 of 6 | 0 | Not met |
| Pages per 12-hour shift (Example) | 1.31 | 1.55 | 2 or fewer | Met |
| Actionable page share (Example) | 70.2% | 66.1% | 80% or higher | Not met |
| Nights with an out-of-hours page (Example) | 38.5% | 44.6% | 25% or less | Not met |
2. Scope and period
| Item | Value |
|---|---|
| Team and services | [Team], [services or platforms operated] |
| Period | [Quarter, start and end dates] |
| Working weeks in period | [N] |
| Nominal hours per engineer | [Weeks x contracted weekly hours] |
| On-call rotations covered | [Rotation names and shift length] |
| Engineers measured | [N, pseudonymised E1 to EN] |
Example: Corvid Commerce platform reliability, 2026-07-01 to 2026-09-30, 13 weeks at 40 contracted hours, so 520 nominal hours per engineer. Six engineers in one primary rotation with two 12-hour shifts a day (184 shifts in the 92 days from 1 July to 30 September). E6 joined on 2026-07-13 and has 400 available hours.
3. Toil definition and classification rules
3.1 Working definition
For this review, toil is hands-on operational work that follows a recipe the team already knows, keeps coming back, and leaves the service no better once it is done. The opposite is engineering: work that changes the service so the same need arises less often, or not at all, however tedious that work feels while doing it. The term comes from site reliability engineering practice (see the Google book Site Reliability Engineering, cited by name only); the tests below are this team's own operational rules, not a restatement of that book.
Classify each recurring task with the five tests. A task is toil when test 5 is answered "No" and at least two of tests 1 to 4 are answered "Yes" (Example rule, set your own):
| No. | Test | Question for the team | Counts toward toil when | Example that counts | Example that does not |
|---|---|---|---|---|---|
| 1 | Hands on keyboard | Does the task stall until a person types, clicks or approves something? | Yes | Approving each production promotion in the pipeline UI | A promotion that proceeds when checks pass |
| 2 | Known recipe | Could a new team member finish it from a written checklist without asking anyone? | Yes | Granting a standard read-only role from an approved request | Deciding whether a new supplier may hold customer data |
| 3 | Comes back | Will the same request or alert return within the next quarter? | Yes | Weekly reset of the shared QA environment | A one-off move of a database to a new region |
| 4 | Someone else's clock | Is the timing set by a queue, an alert or another team, rather than by the team's own plan? | Yes | Answering a disk-full ticket raised by a product team | Scheduling a storage redesign in the quarterly plan |
| 5 | Lasting change | When the task is finished, is the service permanently better: fewer future occurrences, faster, or safer? | No | Restarting a worker that hangs | Fixing the defect that makes the worker hang |
Record one more attribute for every task in the inventory (section 8), without using it as a test: the growth driver, meaning what makes the volume rise (traffic, customers, services, engineers, regions). A task whose driver grows faster than the team is the first candidate for automation even when its hours are modest today.
3.2 What is not toil
| Category | Description | Where it is tracked |
|---|---|---|
| Engineering | Work that leaves a lasting improvement: automation, design, fixing root causes | Project or product backlog |
| Incident response with learning | Diagnosing a new failure and writing the postmortem | Postmortem (dev/postmortem) |
| Overhead | Meetings, planning, hiring, training, administrative tasks | Not measured here, but shown in section 5 as non-engineering time |
| On-call availability | Being reachable while on call with nothing to do | Counted in on-call health (section 7), not as toil |
Repeated response to the same known incident, where nothing new is learned, is toil. The first diagnosis of a novel failure is not.
4. Measurement method
4.1 Data sources
| Source | What it gives | Coverage (Example) | Weakness |
|---|---|---|---|
| Ticket system, toil label | Count and logged time of request and interrupt tickets | 612 tickets, time logged on 81% | Time not logged on every ticket |
| Paging system | Pages, timestamps, acknowledgement, shift | All 286 pages | No time spent per page |
| Calendar sampling | Random two-week time diary per engineer, once a quarter | 6 of 6 engineers | Small sample |
| Pull request and pipeline data | Manual approvals and release steps | All releases | Does not show waiting time |
| Quarterly survey | Perceived toil, on-call strain | 6 of 6 responses | Subjective |
4.2 Calculation
Available hours (engineer) = Nominal hours - leave - public holidays - training days
Toil hours (engineer) = Logged toil ticket time
+ Pages x mean handling time per page
+ Unlogged ticket time estimated from the time diary ratio
Toil share (engineer) = Toil hours / Available hours
Team toil share = Sum of toil hours / Sum of available hours
Annualised hours = Quarterly hours x 4 (assumes stable volume; state if not)
Example: For tickets without logged time, Corvid Commerce used the median logged time of tickets with the same label. For pages, it used a mean handling time of 39.2 minutes per page from the time diaries, so 286 pages x 39.2 / 60 = 187 hours. Time spent diagnosing a novel failure for the first time is excluded and recorded in the postmortem.
4.3 Data quality
[Record known gaps: tickets without labels, missing time logs, engineers without a diary sample, changes in labelling since the previous quarter. State whether the gaps change any conclusion.]
5. Toil share per engineer
The cap is the highest share of available time the team agrees to spend on toil, so that enough time remains for engineering work that reduces future toil. Example: Corvid Commerce set a cap of 40% for this team in 2026-Q1; set your own cap with your engineering leadership and record the date it was agreed in Document control.
| Engineer | Available hours | Toil hours | Toil share | Cap (Example) | Status | Main sources |
|---|---|---|---|---|---|---|
| E1 (Example) | 480 | 211 | 44.0% | 40% | Above | Release approvals, access requests |
| E2 (Example) | 520 | 182 | 35.0% | 40% | Within | Alert triage |
| E3 (Example) | 440 | 198 | 45.0% | 40% | Above | Access requests, data fixes |
| E4 (Example) | 500 | 120 | 24.0% | 40% | Within | Certificate rotations |
| E5 (Example) | 520 | 156 | 30.0% | 40% | Within | Capacity tickets |
| E6 (Example) | 400 | 92 | 23.0% | 40% | Within | Environment resets |
| Team | 2,860 | 959 | 33.5% | 40% | Within |
Arithmetic (Example): available hours 480 + 520 + 440 + 500 + 520 + 400 = 2,860; toil hours 211 + 182 + 198 + 120 + 156 + 92 = 959; 959 / 2,860 = 33.5%. E1: 211 / 480 = 44.0%. E3: 198 / 440 = 45.0%.
5.1 Trend
| Quarter | Team toil share | Engineers above cap | Note |
|---|---|---|---|
| 2026-Q1 (Example) | 36.1% | 2 | Cap agreed |
| 2026-Q2 (Example) | 29.8% | 1 | Deploy automation shipped |
| 2026-Q3 (Example) | 33.5% | 2 | New region added access and capacity work |
| [Quarter] | [N%] | [N] | [Note] |
6. Page and interrupt load
6.1 Paging
| Measure | Formula | Value (Example) | Target (Example) |
|---|---|---|---|
| Pages | Count in period | 286 | n/a |
| Shifts | Days x shifts per day | 92 x 2 = 184 | n/a |
| Pages per shift | Pages / shifts | 286 / 184 = 1.55 | 2 or fewer |
| Shifts above target | Shifts with more than 2 pages / shifts | 31 / 184 = 16.8% | 10% or less |
| Highest pages in one shift | Maximum | 9 | Investigated if above 5 |
| Out-of-hours pages | Pages between 22:00 and 07:00 local / pages | 104 / 286 = 36.4% | 25% or less |
| Actionable pages | Pages that needed human action / pages | 189 / 286 = 66.1% | 80% or higher |
6.2 Top paging sources
| Alert | Pages | Actionable | Action |
|---|---|---|---|
| Example: Queue depth high, order events | 58 | 9 | Re-tune to SLO burn rate per the Alerting Policy (ops/alerting-policy) |
| Example: Node disk above 85% | 41 | 30 | Automate log rotation and volume growth |
| Example: Synthetic check failure, single location | 37 | 4 | Require two locations before paging |
| Example: Certificate expiry within 14 days | 22 | 22 | Automate renewal (AUT-003) |
| [Alert name] | [N] | [N] | [Action] |
6.3 Interrupts outside paging
| Measure | Value (Example) |
|---|---|
| Interrupt tickets in period | 612 |
| Business days | 64 |
| Interrupt tickets per business day | 612 / 64 = 9.6 |
| Share handled by the person on interrupt duty | 71% |
An interrupt rota (one named engineer per day or week who absorbs tickets) protects the rest of the team's focus time. If the share handled by that person is low, interrupts are leaking to everyone.
7. On-call health
| Indicator | Value (Example) | Threshold (Example) | Status |
|---|---|---|---|
| Nights with at least one page between 22:00 and 07:00 | 41 of 92 = 44.6% | 25% or less | Above |
| Engineers with two or more consecutive disturbed nights | 4 of 6 | 0 | Above |
Recovery time off taken after disturbed nights, per the On-call Handbook (ops/on-call-handbook) | 9 of 14 eligible | All eligible | Below |
| Rotation size | 6 (about 31 shifts each per quarter: 184 / 6 = 30.7) | [Agreed minimum] (Example: 8 or more for a single-site 24-hour rotation; 6 or more per site for follow-the-sun) | Below |
| Survey: "on-call load is sustainable" (1 to 5) | 2.8 | 3.5 or higher | Below |
| Engineers asking to leave the rotation | 1 | 0 | Watch |
Example: The out-of-hours load comes mostly from the queue depth and single-location synthetic alerts (section 6.2). Both are noisy alerts, so alert tuning (AUT-002) is the fastest way to improve sleep, ahead of any larger automation. The rotation is also below the team's agreed minimum size for a single-site 24-hour rotation; the engineering manager takes this to the next headcount planning cycle (TR-D-06).
8. Toil inventory
| Toil ID | Task | Category | Occurrences per quarter | Hours per quarter | Trend | Source of demand | Growth driver |
|---|---|---|---|---|---|---|---|
| TOIL-001 (Example) | Manual release approval and promotion | Release | 107 | 214 | Rising | Product teams | Number of services and releases |
| TOIL-002 (Example) | Page handling for repeating, known alerts (97 of them non-actionable) | Alerting | 286 | 187 | Rising | Monitoring configuration | Number of monitored services |
| TOIL-003 (Example) | Access requests for standard roles | Access | 316 | 158 | Rising | All engineering teams | Engineering headcount |
| TOIL-004 (Example) | Manual scaling and quota tickets | Capacity | 61 | 121 | Flat | Product teams | Traffic and regions |
| TOIL-005 (Example) | Production data fixes on request | Data | 46 | 115 | Flat | Support | Customer count |
| TOIL-006 (Example) | Certificate and secret rotation | Security hygiene | 48 | 96 | Flat | Expiry calendar | Number of services and certificates |
| TOIL-007 (Example) | Test environment resets | Environments | 34 | 68 | Falling | QA | Number of QA test cycles |
| Total | 959 |
Arithmetic (Example): 214 + 187 + 158 + 121 + 115 + 96 + 68 = 959, equal to the team toil hours in section 5.
9. Automation candidates ranked by return
9.1 Formulas
Apply the same formulas to every candidate so the ranking is fair. Use hours rather than money unless finance supplies a loaded hourly cost.
Annual toil hours (Y) = Quarterly hours x 4
Hours freed per year (H) = Y x expected reduction
Build hours (B) = Estimated one-off effort
Maintenance hours/year (M) = Estimated upkeep
Net hours per year (N) = H - M
Payback (months) = B / (N / 12)
First-year net hours = N - B
Return ratio (rank key) = H / (B + M)
9.2 Ranked candidates
| Rank | Candidate | Toil ID | Y | Reduction | H | B | M | N | Payback | First-year net | Return ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | AUT-002 (Example) Alert tuning: burn-rate alerts, multi-location synthetics | TOIL-002 | 748 | 70% | 523.6 | 80 | 16 | 507.6 | 1.9 months | 427.6 | 5.45 |
| 2 | AUT-001 (Example) Self-service access for standard roles with automatic expiry | TOIL-003 | 632 | 90% | 568.8 | 120 | 24 | 544.8 | 2.6 months | 424.8 | 3.95 |
| 3 | AUT-003 (Example) Automated certificate and secret rotation | TOIL-006 | 384 | 95% | 364.8 | 160 | 20 | 344.8 | 5.6 months | 184.8 | 2.03 |
| 4 | AUT-005 (Example) Self-service environment reset | TOIL-007 | 272 | 80% | 217.6 | 100 | 12 | 205.6 | 5.8 months | 105.6 | 1.94 |
| 5 | AUT-004 (Example) Automatic release promotion on passing checks | TOIL-001 | 856 | 60% | 513.6 | 320 | 40 | 473.6 | 8.1 months | 153.6 | 1.43 |
| [N] | [AUT-NNN] | [TOIL-NNN] | [Y] | [%] | [H] | [B] | [M] | [N] | [months] | [hours] | [ratio] |
Check for AUT-001 (Example): Y = 158 x 4 = 632; H = 632 x 0.90 = 568.8; N = 568.8 - 24 = 544.8; payback = 120 / (544.8 / 12) = 2.6 months; first-year net = 544.8 - 120 = 424.8; ratio = 568.8 / 144 = 3.95. Approved candidates AUT-002, AUT-001 and AUT-003 cost 80 + 120 + 160 = 360 build hours and free 523.6 + 568.8 + 364.8 = 1,457.2 hours a year.
9.3 Non-financial factors
Rank by return, then adjust for factors the formula does not capture, and record each adjustment:
| Factor | Effect on ranking |
|---|---|
| Out-of-hours load and burnout risk | Move up candidates that remove night pages |
| Security or compliance risk of the manual task | Move up candidates that remove error-prone manual handling of secrets or access |
| Dependency on another team | Move down, or convert into a request to that team |
| Toil that should be eliminated, not automated | Prefer removing the demand (for example a product change) over automating it |
Example: AUT-003 ranks third on return but removes manual secret handling, so it was approved in the same quarter as the top two. AUT-004 has the largest toil pool but the longest payback and needs the delivery platform team, so it moves to Q1 with a joint plan.
10. Capacity headroom check-in
| Item | Hours next quarter (Example) |
|---|---|
| Available hours (6 engineers, 13 weeks, after planned leave) | 2,960 |
| Expected toil (current rate 33.5%, before automation savings) | 992 |
| Overhead (meetings, hiring, training, estimated 15%) | 444 |
| Remaining engineering hours | 1,524 |
| Approved automation build hours (AUT-001, AUT-002, AUT-003) | 360 |
| Hours left for product and platform roadmap | 1,164 |
Arithmetic (Example): 2,960 x 0.335 = 991.6, rounded to 992; 2,960 x 0.15 = 444; 2,960 - 992 - 444 = 1,524; 1,524 - 360 = 1,164.
Service capacity signals for the Capacity Plan (ops/capacity-plan):
[record any toil that is really a capacity problem, for example manual
scaling tickets that show autoscaling limits are too low].
11. Decisions
| Decision ID | Decision | Owner | Due | Trade-off |
|---|---|---|---|---|
| TR-D-01 (Example) | Build AUT-002 and AUT-001 in Q4 weeks 1 to 6 | [@sre-lead] | 2026-11-13 | Observability dashboard refresh moves to Q1 |
| TR-D-02 (Example) | Build AUT-003 in Q4 weeks 4 to 10 | [@security-platform-engineer] | 2026-12-11 | None, inside remaining hours |
| TR-D-03 (Example) | Rotate the release approval queue weekly across all six engineers until AUT-004 ships | [@engineering-manager] | 2026-10-12 | E1 and E3 load drops below cap |
| TR-D-04 (Example) | Ask product teams to own data fix requests through a self-service tool request | [@product-owner] | 2026-12-31 | Product backlog item added |
| TR-D-05 (Example) | Defer AUT-004 to Q1 with a joint plan with the delivery platform team | [@director-of-engineering] | 2027-01-15 | Release toil stays at about 214 h per quarter |
| TR-D-06 (Example) | Request two more engineers for the rotation, or move night cover to a second site, in the next headcount cycle | [@engineering-manager] | 2026-12-15 | Until then, no new service joins the rotation without an alert review |
| [TR-D-NN] | [Decision] | [@owner] | YYYY-MM-DD | [Trade-off] |
12. Follow-up of previous actions
| Previous decision | Delivered | Expected saving | Measured saving | Note |
|---|---|---|---|---|
| Example: TR-D-01 of 2026-Q2, automated deploy rollback | Yes, 2026-08-04 | 90 h per quarter | 72 h per quarter | Rollback still needs manual approval at night |
| Example: TR-D-03 of 2026-Q2, page deduplication | No | 40 h per quarter | 0 | Carried over as part of AUT-002 |
| [Decision ID] | [Yes / No / Partly] | [Hours] | [Hours] | [Note] |
13. Glossary and references
13.1 Glossary
| Term | Meaning in this review |
|---|---|
| Toil | Hands-on operational work with a known recipe that keeps returning and leaves the service no better (section 3.1 tests) |
| Growth driver | What makes a toil task's volume rise, recorded in the inventory |
| Toil cap | The maximum share of available engineering time the team agrees to spend on toil |
| Available hours | Contracted hours minus leave, holidays and training |
| Page | A notification that requires the on-call engineer to respond now |
| Actionable page | A page where a person had to take an action that could not be skipped |
| Interrupt | Unplanned request or ticket that breaks planned work, outside paging |
| Return ratio | Hours freed per year divided by build plus yearly maintenance hours |
| Payback | Months until hours freed exceed build hours |
13.2 References
- Beyer, Jones, Petoff and Murphy (eds.), Site Reliability Engineering, O'Reilly, 2016; online edition at https://sre.google/books/ (CC BY-NC-ND 4.0). Cited by name only, as the origin of the term toil.
- Related templates: On-call Handbook (
ops/on-call-handbook), Alerting Policy (ops/alerting-policy), Incident Severity Matrix (ops/incident-severity-matrix), Error Budget Policy (ops/error-budget-policy), Capacity Plan (ops/capacity-plan), SLO document (dev/slo-doc), Developer Experience Survey (dev/developer-experience-survey), Delivery Performance Report (dev/delivery-performance-report).
Standard and licence note
Structure aligned with site reliability engineering practice for measuring and reducing toil. The Google book Site Reliability Engineering is cited by name only, as the origin of the term: its online edition is licensed CC BY-NC-ND 4.0 and its second edition is all rights reserved, so no text, list, figure, threshold or number from it is reproduced. The five classification tests in section 3 are original operational rules written for this template and do not restate the book's description of toil. The formulas, thresholds, ranking method and the Corvid Commerce example are original and fictional; every target value is an example to be replaced by your own. Check the current editions of the cited books before relying on them. Google is a trademark of its owner; this template is not affiliated with or endorsed by it. Template licence: MIT.
相关模板
Access Review Template
Periodic access audit – keep/modify/revoke
运营Cloud Cost Review Template (FinOps FOCUS 1.4)
Periodic cloud and technology cost review: FOCUS 1.4 metrics, allocation per tagging standard, unit economics, anomalies, commitments, FinOps 2026 capabilities
运营Alerting Policy Template (SLO Burn-Rate Alerts)
Symptom-based paging, page vs ticket vs log, multi-window burn-rate rules with worked numbers, alert metadata, naming, routing, noise budget, review, alerts as code