Why toil quietly consumes a platform team
Toil rarely arrives as one big problem. It arrives as a ten-minute job here, a weekly request there, a restart that “only takes a moment”. Each one is small enough to justify doing it by hand. Added together, they decide whether your engineers spend their week improving the platform or keeping it upright.
The cost is not just hours. Interrupt-driven work destroys focus, manual steps introduce mistakes, and repetitive tasks are what make good engineers leave. A toil reduction analysis is how our SRE and incident response service turns that drag into a ranked list of fixes with reasons attached.
What counts as toil, and what does not
Precision matters, because teams who call every unpleasant task toil end up automating the wrong things. Toil has these characteristics:
- Manual. A person runs a command, clicks through a console or edits a file.
- Repetitive. The same task recurs; it is not a one-off investigation.
- Automatable. A machine could do it, now or with reasonable effort.
- Tactical. It reacts to events rather than moving the system forward.
- Scales with the service. More customers or services mean more of it.
- No enduring value. After finishing, the system is no better than before.
Things that feel tedious but are not toil: meetings, writing a design document, a first-time migration, and incident analysis. Those are overhead or engineering. The distinction affects what you automate and how you report progress.
How the analysis works
Gathering evidence
We use several sources because each one hides things the others show:
- Ticket and request history. Recurring request types are the clearest evidence.
- Chat search. Phrases like “can someone restart”, “can you give me access” and “is the pipeline stuck” mark invisible work.
- On-call and incident records. Repeated manual remediation steps in runbooks are often automation candidates.
- Interviews. We ask each engineer what they dread and what they do on autopilot.
- Calendar and time sampling. Where possible, a short sampling period beats memory, which tends to under-count small tasks.
Scoring each candidate
We keep the scoring deliberately simple. A table like this gets built for the top candidates:
| Task | Minutes each | Per month | Error risk | Automation effort | Suggested fix |
|---|---|---|---|---|---|
| Grant a developer namespace access | 15 | frequent | Medium | Low | Self-service via Git pull request |
| Rotate a certificate by hand | 30 | rare | High | Medium | Automated renewal and expiry alert |
| Restart a stuck consumer | 5 | frequent | Low | Low | Fix the cause, or a liveness probe |
| Rebuild a staging environment | 90 | occasional | Medium | Medium | Infrastructure as code pipeline |
The numbers in your table come from your own measurements; the example only shows the shape. We multiply time by frequency, then adjust for risk, interruptions and out-of-hours impact.
Choosing the right kind of fix
Automation is not always a script. The ladder, from most to least valuable:
- Remove the cause. If a consumer keeps hanging, fix the bug or add a proper health check. Scripting the restart hides the defect.
- Self-service. Let requesters do it safely through a pull request, a form or a portal, with guardrails and approvals built in.
- Automate with code. A pipeline job, Ansible playbook or Terraform module replaces the manual steps. Our Ansible service and infrastructure as code work cover this.
- Improve the runbook. If it cannot be automated yet, make it faster and safer to do.
- Accept it. Rare, high-judgement tasks may stay manual on purpose.
A small, typical automation looks like this, a scheduled GitHub Actions job that reports stale resources instead of someone checking by hand:
name: stale-resource-report
on:
schedule:
- cron: "0 7 * * 1"
workflow_dispatch:
jobs:
report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: List unattached volumes
run: ./scripts/list-unattached-volumes.sh >> report.md
- name: Post to channel
run: ./scripts/post-report.sh report.md
Note the pattern: report first, delete only after a human reviews. We add destructive automation last and with a dry run.
Decisions and trade-offs
Build versus buy. An internal developer portal or a managed service can remove toil faster than custom scripts, but adds a system to run. Small teams usually do better with plain pipelines and scripts.
Automation debt. Every script is software that needs owners, tests and updates. If nobody will maintain it, a documented manual process may be safer.
Order of work. Start with high-frequency, low-risk tasks to build trust, then take on riskier ones with review. This also gives early, visible wins.
When not to do this. If the team is two people and the real problem is that the product is unstable, fix stability first. Toil analysis pays off most when work is repetitive, not when it is chaotic.
Common failure modes
- Counting only what people remember, which misses the many small tasks.
- Automating a broken process, so it fails faster.
- Scripts with no owner that quietly rot after the author leaves.
- Treating toil reduction as a one-off project instead of a standing review.
- Ignoring alert noise, which is often the largest hidden source of repetitive manual work.
Delivery and handover
You receive the inventory, the scored backlog, the automation delivered as reviewed code in your repositories, and documentation on how each piece works and who owns it. We also give you the measurement method so your team can repeat the exercise each quarter. Where the work fits, it connects to Managed DevOps so recurring tasks are handled continuously and not rediscovered.
How to tell it is working
Compare the same measures before and after: hours per month on each automated task, manual interventions, errors from manual steps, and out-of-hours pages. Ask the team whether interruptions have dropped. If the time recovered is going into reliability and delivery work rather than new toil, the analysis has paid off. To look at your own backlog, get in touch.