| name | algorithmic-complexity-review |
| description | Algorithmic complexity (Big-O) review — finding nested loops, N+1 queries, exponential recursion, quadratic string builds, and other accidental complexity blowups. Covers Python, JavaScript/TypeScript, Java, Go, and similar languages. Use whenever writing, reviewing, or refactoring code where Big-O matters. Trigger even when the user doesn't mention "Big-O" explicitly — if they're reviewing code for performance, refactoring a hot path, asking "why is this slow," or working with data that scales (loops, recursions, collections, ORM access), apply this skill to classify the time/space complexity and suggest the fix. Especially trigger on tasks like "review for performance," "find slow code," "make this faster," "this code is O(n²)," or when reading code that processes collections. |
dot-skills Algorithmic Complexity (Big-O) Best Practices
Find, classify, and fix algorithmic complexity (Big-O) problems in code — language-agnostic. The 39 rules across 8 categories cover the patterns responsible for the vast majority of accidental quadratic, exponential, and N+1 blowups in production code: nested iteration, loop-invariant I/O, data-structure mismatch, recursion explosions, redundant computation, collection-building anti-patterns, search/sort selection, and space traps.
When to Apply
Use this skill when:
- Reviewing a pull request or function for performance regressions
- Asked "why is this slow?" or "can we make this faster?"
- Refactoring a hot path or a function that handles user-scaled input
- Reading code that contains: nested loops,
.includes/.find/x in list inside iteration, ORM access in a loop, recursion without memoization, string/array building via += or spread, file/database I/O inside iteration
- Reviewing code that processes lists, trees, or streams whose size will grow
Workflow: Find, Classify, Fix
The skill is structured for a three-step workflow on any code under review:
1. Find — Scan for the Suspicion Patterns
Look for these structural signals first (highest hit rate):
2. Classify — Derive the Big-O
Compute complexity from the code structure:
| Structure | Complexity |
|---|
| Single loop over n items, O(1) body | O(n) |
| Two nested loops over n / m items | O(n*m) |
Loop calling an O(n) operation (.includes, .find, x in list) | O(n*m), often misread as O(n) |
Recursive f(n) = f(n-1) + f(n-2) without memoization | O(2ⁿ) |
Recursive f(n) = 2*f(n/2) + O(n) | O(n log n) |
Recursive f(n) = 2*f(n/2) + O(1) | O(n) (full tree traversal) |
Recursive f(n) = f(n/2) + O(1) | O(log n) |
s = s + part in a loop | O(n²) (string immutability) |
[...acc, x] in a reduce | O(n²) (copy-on-spread) |
| Query/RPC inside loop over n items | O(n) round trips |
When in doubt, ask: "As input doubles, does runtime roughly double (linear), quadruple (quadratic), or do something worse (exponential)?" That's the practical complexity class.
3. Fix — Apply the Pattern From the Matching Rule
Each reference file in references/ is a {category}-{slug}.md containing:
- WHY the pattern matters (the cascade effect)
- An Incorrect code example with the cost annotated
- A Correct example with the minimal diff
- When NOT to apply the fix (the rule has exceptions)
The minimal diff philosophy is intentional: the goal is for the agent to see exactly how few lines need to change to flip the complexity class.
Rule Categories by Priority
| # | Category | Prefix | Impact | Rules |
|---|
| 1 | Nested Iteration Patterns | nested- | CRITICAL | 6 |
| 2 | Loop-Invariant I/O and N+1 | io- | CRITICAL | 5 |
| 3 | Data Structure Mismatch | ds- | HIGH | 6 |
| 4 | Recursion Complexity | rec- | HIGH | 5 |
| 5 | Redundant Computation | compute- | MEDIUM-HIGH | 5 |
| 6 | Collection Building | build- | MEDIUM | 4 |
| 7 | Search & Sort Selection | search- | MEDIUM | 4 |
| 8 | Space Complexity Traps | space- | LOW-MEDIUM | 4 |
See references/_sections.md for the full ordering rationale.
Quick Reference
1. Nested Iteration Patterns (CRITICAL)
2. Loop-Invariant I/O and N+1 Queries (CRITICAL)
3. Data Structure Mismatch (HIGH)
4. Recursion Complexity (HIGH)
5. Redundant Computation (MEDIUM-HIGH)
6. Collection Building (MEDIUM)
7. Search & Sort Selection (MEDIUM)
8. Space Complexity Traps (LOW-MEDIUM)
How to Use
- Start with the Find signal table above to locate the most likely pattern.
- Open the matching reference file for the WHY and the minimal-diff fix.
- If you're classifying complexity from scratch, use the Classify table to derive Big-O from code structure.
- When proposing a fix, quote the rule by file path so reviewers can verify the reasoning.
- See
references/_sections.md for category ordering rationale, and assets/templates/_template.md when adding new rules.
Reference Files
Related Skills
bug-review — Multi-pass PR bug review (this skill is a focused complement for performance issues specifically)
- A language-specific best-practices skill (React, Python, Go) — covers idioms beyond Big-O; pair with this skill for performance-critical reviews