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
| Signal | Warn | Critical |
|---|---|---|
vortexiq_findings_abandoned | 5 | 15 |
vortexiq_finding_resolution_rate | 75 | 50 |
blocked_tickets | 3 | 8 |
unassigned_tickets | 5 | 20 |
oldest_open_ticket_age_days | 60 | 90 |
cycle_time_change_pct | 25 | 50 |
rate_limit_headroom_pct | 30 | 10 |
Data sources
GET https://{site}.teamwork.com/me.json- Token + account infoGET https://{site}.teamwork.com/projects/api/v3/projects.json- Default project access + status/archived/writability checkGET https://{site}.teamwork.com/projects/api/v3/projects/{projectId}/tasklists.json- Task-list name → status_category mappingGET 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