- SKILL.md 207 lines · 11.7 KB
Technical Debt Auditor
You are performing a systematic technical debt audit of this codebase. Your goal: produce a quantified, actionable report that tells the team exactly where their debt is, how severe it is, and what to fix first. This is not a vague "code review" — it's a structured scan with concrete metrics and a prioritized remediation plan.
Technical debt is like financial debt — it accumulates interest. A quick hack today costs 10x more to fix in six months when three features depend on it. Your job is to find the debt before the interest compounds, quantify it so it can be prioritized against feature work, and give the team a realistic plan to pay it down.
What you're scanning for
| Debt category | What to look for | Why it matters |
|---|---|---|
| Marker debt | TODO, FIXME, HACK, XXX, TEMP, WORKAROUND comments | Developers flagged these as known shortcuts — they're self-reported debt |
| Dead code | Unused exports, unreachable branches, commented-out code blocks, unused files | Dead code misleads readers, adds cognitive load, and sometimes hides bugs |
| Dependency debt | Outdated packages, deprecated APIs, pinned-to-old-major versions, unused deps in package manifest | Stale deps accumulate security vulns and block upgrades |
| Complexity hotspots | Large files (>300 lines), large functions (>50 lines), deeply nested logic (>3 levels), high cyclomatic complexity | Complex code is where bugs hide and where changes are slowest |
| Duplication signals | Near-identical code blocks, copy-pasted patterns with slight variations | Duplication means bug fixes need to happen in N places instead of 1 |
| Test gaps | Missing test files for modules, low assertion density, test files that only test happy paths | Untested code is where regressions slip through |
| Outdated patterns | Patterns that contradict the project's own conventions, deprecated language features, legacy API usage | Inconsistency slows onboarding and creates confusion |
| Config debt | Stale configs, conflicting settings, environment files with unused variables | Config debt causes "works on my machine" bugs and deploy failures |
PHASE 1 — RECONNAISSANCE
Before scanning anything, understand the project:
- Identify the tech stack — read package.json, Cargo.toml, pyproject.toml, go.mod, or whatever the project uses. Note the language(s), framework(s), package manager, and build system.
- Find the entry points — where does the application start? What are the main modules?
- Check for existing quality tooling — linters, formatters, type checkers, test runners, CI config. Understanding what's already enforced tells you what NOT to flag (e.g., don't report style issues if prettier is configured).
- Read any CLAUDE.md or project docs — these may contain conventions that inform what counts as "outdated" vs "intentional."
- Note the project scale — file count, approximate lines of code. This calibrates your effort estimates later.
Do not start scanning until you have this context. A "large function" in a 200-line CLI script means something different than in a 50,000-line enterprise app.
PHASE 2 — SYSTEMATIC SCAN
Work through each debt category methodically. For each category, use the appropriate tools:
Marker debt scan
Search for these patterns across all source files (not node_modules, vendor, build output):
TODO,FIXME,HACK,XXX,TEMP,WORKAROUND,KLUDGE,DEPRECATED- Note the file, line number, and surrounding context for each
- Classify each by severity:
HACK/FIXMEare higher severity thanTODO - Check dates if present — older markers indicate forgotten debt
Dead code scan
- Look for exported functions/classes that are never imported elsewhere
- Find commented-out code blocks (more than 2 consecutive commented lines of code, not documentation comments)
- Check for files that nothing imports or references
- Look for unreachable code after return/throw/break statements
- Check for unused variables and imports that linters haven't caught
Dependency debt scan
- Read the package manifest and lockfile
- For Node.js: check
package.jsondependencies against actual imports; flag packages in dependencies that aren't imported anywhere - Look for deprecated package warnings in lockfiles
- Check major version gaps (e.g., package is on v2 but v5 is current)
- Note any dependency with known security advisories if identifiable from lockfile metadata
Complexity hotspot scan
- Find the largest files by line count — list the top 10
- Within those files, find the largest functions/methods
- Look for deeply nested conditionals (if/else chains >3 levels deep)
- Flag god classes/modules that do too many things (heuristic: >10 public methods or >5 unrelated responsibilities)
- Check for overly long parameter lists (>5 parameters)
Duplication signal scan
- Look for structurally similar code blocks across files
- Check for copy-pasted error handling patterns
- Find repeated business logic that should be extracted into shared utilities
- Note: you're looking for significant duplication (>10 lines of near-identical logic), not trivial similarities
Test gap scan
- Map source files to test files — which source files have no corresponding test?
- Look at existing tests: are they just smoke tests or do they test edge cases?
- Check for test files that are skipped (.skip, @Ignore, etc.)
- Note any mocking that's testing implementation details rather than behavior
Outdated pattern scan
- Compare patterns used across the codebase — is most of the code using pattern A while a few files use deprecated pattern B?
- Look for deprecated language features (e.g.,
varin modern JS,string.formatover f-strings in Python 3.6+) - Check for inconsistent error handling strategies across modules
- Flag any usage of APIs marked as deprecated in the codebase itself
Config debt scan
- Compare
.env.example(if present) against actual usage — are all vars still needed? - Look for conflicting configs (e.g., tsconfig extending differently in subpackages)
- Check for hardcoded values that should be configurable
PHASE 3 — QUANTIFY AND SCORE
For each finding, assign a severity and effort estimate:
Severity levels
| Level | Criteria | Examples |
|---|---|---|
| Critical | Actively causing bugs, security risks, or blocking upgrades | Security-vulnerable dependency, dead code hiding a bug, broken test suite |
| High | Will cause significant pain if not addressed soon — compounds quickly | God class everyone's afraid to touch, major version dependency gap, zero test coverage on critical path |
| Medium | Genuine debt that slows development but isn't urgent | TODO markers older than 6 months, moderate duplication, missing tests for non-critical paths |
| Low | Cleanup work that improves quality but has low blast radius | Commented-out code, minor inconsistencies, unused config variables |
Effort estimates
| Level | Meaning |
|---|---|
| Trivial | < 30 minutes — delete dead code, remove stale TODOs, drop unused deps |
| Small | 1-4 hours — extract duplicated logic, add missing tests for a module, update a dependency |
| Medium | 1-3 days — refactor a complex module, migrate a deprecated pattern across the codebase |
| Large | 1-2 weeks — rewrite a god class, major dependency upgrade with breaking changes |
PHASE 4 — REPORT
Present findings in this exact structure:
# Technical Debt Audit Report
## Executive Summary
- **Project**: <name> (<language/framework>)
- **Files scanned**: <count>
- **Total findings**: <count>
- **Critical**: <count> | **High**: <count> | **Medium**: <count> | **Low**: <count>
- **Estimated total remediation effort**: <range>
- **Top 3 priorities**: <one-line each>
## Debt Heatmap
<Table showing files with the most findings, sorted by severity-weighted score>
| File | Critical | High | Medium | Low | Debt Score |
|------|----------|------|--------|-----|------------|
| ... | ... | ... | ... | ... | ... |
## Findings by Category
### 1. [Category Name] — [count] findings
#### [Severity] [Brief description]
- **File**: `path/to/file.ts:42`
- **What**: <specific description of the debt>
- **Why it matters**: <concrete consequence if not addressed>
- **Suggested fix**: <actionable remediation step>
- **Effort**: <Trivial|Small|Medium|Large>
(repeat for each finding)
## Remediation Plan
### Immediate (this sprint)
<Critical and high-severity items with trivial/small effort — highest ROI>
### Short-term (next 2-4 weeks)
<High-severity items with medium effort, critical items with large effort>
### Medium-term (next quarter)
<Medium-severity items, larger refactoring efforts>
### Backlog
<Low-severity items to tackle opportunistically>
## Metrics Summary
| Metric | Value |
|--------|-------|
| Marker density (TODOs per 1K lines) | ... |
| Dead code ratio (unused exports / total exports) | ... |
| Test coverage (files with tests / total source files) | ... |
| Dependency freshness (up-to-date / total deps) | ... |
| Average file size (lines) | ... |
| Largest file (lines) | ... |
| Files with >3 nesting levels | ... |Important behavioral notes
Be specific, not vague. Every finding must reference exact files and line numbers. "There's some duplication" is worthless. "
src/handlers/user.ts:45-78andsrc/handlers/admin.ts:32-65contain nearly identical validation logic" is actionable.Don't flag what tooling handles. If the project has eslint configured with
no-unused-vars, don't report unused variables — the linter catches those. Focus on debt that falls through the cracks of existing tooling.Calibrate to the project. A 500-line utility script doesn't need the same scrutiny as a production API. If the project is a prototype or early-stage, say so and adjust severity accordingly. Don't recommend enterprise patterns for a weekend project.
Respect intentional tradeoffs. Some "debt" is deliberate. If a comment says "// Intentionally using X because Y", don't flag it. If the README says "we chose library A over B for reason Z", don't report it as outdated.
The remediation plan is the most important part. Teams can find TODOs themselves — what they need is someone to prioritize the work and explain the ROI of each fix. Spend the most effort making the remediation plan realistic and well-sequenced (don't suggest refactoring module A before module B if B depends on A).
Count things. Actually count the lines, the files, the findings. The executive summary numbers must be accurate. If you say "42 findings" the report should contain exactly 42 findings.
Debt score formula. For the heatmap, weight findings: Critical = 8, High = 4, Medium = 2, Low = 1. Sum per file. This gives a single sortable number.
Scanned by NVIDIA SkillSpector
Automated static analysis (no LLM) · v2.12.0 · 2026-11-08
Partial analysis: some checks could not run on this component.
SkillSpector looks for patterns such as shell commands, credential access, network calls or unpinned dependencies. An observation is something worth reading in the files before you install, not a confirmed vulnerability. Components that run code locally, like hooks, MCP servers and security tooling, naturally show more of them.
No observations.
Learn more about NVIDIA SkillSpector.