Skip to main content
Nerve Centre KPIs · Audit Profile · Sentiment Settings Surfaces the daily ops questions a client-services agency lives with in Teamwork: is the token still good, is the backlog drowning, are people overloaded across the client portfolio, and (most importantly) are the findings we filed actually getting completed or quietly dying in the queue while billable time accrues? Closes the loop from audit_finding → Teamwork task → completion → regression detection, with the Teamwork-specific billable-margin overlay.

What this audit checks

Authentication & access

  • API key still valid (auth on /me.json)
  • Default project exists, is not archived, and is writable
  • Finding-id custom field resolvable on the Site (round-trip join key present)
  • Teamwork rate-limit headroom > 30% (429 with Retry-After on exhaustion)

Backlog health

  • Open task count vs 30-day baseline (sudden growth = drowning signal)
  • Blocked task-list task count + change WoW
  • Oldest open task age (>90 days = backlog rot)
  • Unassigned tasks > 5 (work that nobody owns)
  • Completion drift - tasks in a Done task-list never marked complete

VortexIQ findings lifecycle (the stickiness test)

  • Abandoned findings - VortexIQ-created tasks, completed=false, lastChangedOn >14d
  • Finding resolution rate over rolling 90d (target >75%), per retainer client
  • Avg time-to-fix for completed findings, by priority
  • Findings completed without a close comment (silent dismissals / paused-client closes)
  • Regression rate - findings reopened (completed flipped back to false) after completion
  • Abandoned-with-logged-time - stale finding tasks accruing billable minutes (Teamwork-specific margin leak)

Team capacity & billable margin

  • Assignees with >10 open tasks across clients (overload signal)
  • Assignees with zero completed tasks in 14d (parked work)
  • Cycle time degradation > 25% week-over-week
  • Sprint scope-creep (tasks added after the date-bounded task-list window started)
  • Per-client resolution-rate vs logged-hours skew (working-but-not-closing margin pattern)

Cross-connector signals

  • Critical findings from sibling connectors (shopify/bigcommerce/adobe/cybersource) older than 7 days with no Teamwork task - coverage gap
  • Teamwork tasks referencing decommissioned/archived integrations - stale work

Severity thresholds

SignalWarnCritical
vortexiq_findings_abandoned515
vortexiq_finding_resolution_rate7550
blocked_tickets38
unassigned_tickets520
oldest_open_ticket_age_days6090
cycle_time_change_pct2550
rate_limit_headroom_pct3010

Data sources

  • GET https://{site}.teamwork.com/me.json - Token + account info
  • GET https://{site}.teamwork.com/projects/api/v3/projects.json - Default project access + status/archived/writability check
  • GET https://{site}.teamwork.com/projects/api/v3/projects/{projectId}/tasklists.json - Task-list name → status_category mapping
  • GET https://{site}.teamwork.com/projects/api/v3/tasks.json - Task reads (open count, blocked, abandoned, by-assignee, throughput, cycle/lead time, findings)
  • GET https://{site}.teamwork.com/projects/api/v3/people.json - Assignee resolution + capacity calc