name: plan-perf-audit
description: >
Plan-only performance audit across web, mobile, backend, and data; measures
first, fixes nothing. Use when "performance audit plan", "perf burndown",
"measure before optimize", or "N+1 audit plan". Apply fixes →
audit-performance.
license: MIT
effort: high
Performance Audit + Optimization Plan
Degree of freedom: HIGH — measure, interpret, plan. Stay
plan-only. Do not optimize in this pass.
Role: Senior performance engineer (web + mobile + backend/data).
Task: Profile the app, find performance issues across layers, plan fixes. Measure, don't
guess. Audit & plan only — do not optimize in this pass.
This skill vs neighbors
| Skill | Does |
|---|
| plan-perf-audit (this) | Plan with measured baselines |
audit-performance | Audit + may optimize |
audit-bundle-size | JS bundle focus + reduction |
backend-db-performance | Query/index fixes (execution) |
mobile-rn-performance | RN perf fixes (execution) |
Loop: see docs/PLAN-LOOPS.md — after plan-test-coverage, parallel with plan-security-audit, before plan-docs-sync
How to reason (every plan item)
- Propose — an optimization tied to a measured baseline
- Risk — user-visible stall, cost, or timeout if left as-is
- Keep-working — paths already inside budget
- Phase — P0 hot-path → structural → polish (do not execute)
Worked example
Propose: split the 412 KB hero chart chunk; add an index on orders(user_id, created_at) after EXPLAIN.
Risk: /dashboard LCP 4.8s (Lighthouse); orders list is a 1.2s sequential N+1.
Keep-working: /pricing already LCP <2s; user lookup is indexed.
Phase: Phase 1 — P0 hot-path wins. No fabricated numbers.
⛔ Preservation Contract [LOW freedom — run exactly]
Read references/preservation-contract.md. Acknowledge in output #1.
Hardest guardrail: no fix proposed without a measured baseline (or explicit [NEEDS PROFILING]).
References
| File | Contents |
|---|
references/audit-scope.md | Layers, methodology, measurement, research fixes |
references/output-templates.md | Baselines, burndown, phased plan |
Phase flow
1. Fingerprint stack (web/RN/API/Supabase)
2. Measure baselines per layer (no guessing)
3. Trace hot paths
4. Per-layer issue inventory
5. Burndown + phased optimization plan
6. Guardrails (budgets, Lighthouse CI, RUM)
7. Research citations
Optional browser: Lighthouse via playwright-cli. Read protocol-browser-anti-stall first.
Phase 1 — Measure first [HIGH freedom]
Establish baselines before any fix proposal:
| Layer | Tools |
|---|
| Web CWV | Lighthouse, web-vitals, RUM/Sentry |
| Bundle | rollup-plugin-visualizer, @next/bundle-analyzer |
| RN | Metro bundle report, cold start profiler |
| API | Sentry transactions, server logs |
| DB | Supabase advisors, EXPLAIN ANALYZE, slow query logs |
Scope detail: references/audit-scope.md
Phase 2–4 — Hot paths + inventory [HIGH freedom]
Prioritize highest-traffic screens, endpoints, queries. Tie each issue to path:line or query text.
Root-cause, not symptom. Quantify expected gain where possible.
Phase 5 — Burndown + plan [HIGH freedom — plan only]
Template: references/output-templates.md
Phases: (1) P0 hot-path wins → (2) structural → (3) polish.
Prevention: performance budgets in CI, RUM for real users, re-measure after each fix.
Self-critique before the burndown [LOW freedom — do not skip]
- evidenced-not-assumed — every fix proposal has a measured baseline or
[NEEDS PROFILING]
- plan-only — do not optimize this pass
- phase justified — P0 hot-path before polish; no fabricated numbers
- right-owner — bundle-only trim →
audit-bundle-size; apply-now optimize → audit-performance
- no-false-safety — symptom without root-cause is not a plan item
Required output (in order)
- Preservation-contract acknowledgment
- Measured baselines per layer
- Per-layer issue inventory
- Burndown table (measured current + target + risk)
- Optimization + enhancement plan, phased
- Guardrails/tooling
- Research notes + citations
- Open questions /
[NEEDS PROFILING] list
End the turn with a standalone recap in chat: the two or three highest-impact measured issues and the first phase to approve. The plan is the deliverable — write it before the recap.
Rules [LOW freedom — run exactly]
- Plan only — do not optimize until approved.
- Measure, don't guess. No fabricated numbers.
- Optimizations preserve behavior + output.
- Re-measure after fixes; keep before/after.