algorithmic-complexity-review

v2026.09.24

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.

GitHub
Install command
npx skhub add pproenca/algorithmic-complexity-review
Markdown
SKILL.md

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):

SignalLikely CategoryFirst Rule to Check
Two nested for loopsnested-nested-explicit-quadratic-loops
.includes / .find / x in list inside a loopnested-nested-includes-in-loop
ORM access inside a loop (for o in orders: o.customer.x)io-io-n-plus-one-query
await fetch in for-ofio-io-sequential-await-in-loop
array.find to "join" two arraysds-ds-hashmap-for-keyed-access
Recursive function with overlapping argumentsrec-rec-memoize-overlapping-subproblems
s = s + part or [...acc, x] in a loopbuild-build-avoid-quadratic-string-concat, build-avoid-spread-in-reducer
sorted(...) called inside a loopsearch-search-sort-once-outside-loop
readlines() / loading whole filesspace-space-stream-dont-load

2. Classify — Derive the Big-O

Compute complexity from the code structure:

StructureComplexity
Single loop over n items, O(1) bodyO(n)
Two nested loops over n / m itemsO(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 memoizationO(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 loopO(n²) (string immutability)
[...acc, x] in a reduceO(n²) (copy-on-spread)
Query/RPC inside loop over n itemsO(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

#CategoryPrefixImpactRules
1Nested Iteration Patternsnested-CRITICAL6
2Loop-Invariant I/O and N+1io-CRITICAL5
3Data Structure Mismatchds-HIGH6
4Recursion Complexityrec-HIGH5
5Redundant Computationcompute-MEDIUM-HIGH5
6Collection Buildingbuild-MEDIUM4
7Search & Sort Selectionsearch-MEDIUM4
8Space Complexity Trapsspace-LOW-MEDIUM4

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

  1. Start with the Find signal table above to locate the most likely pattern.
  2. Open the matching reference file for the WHY and the minimal-diff fix.
  3. If you're classifying complexity from scratch, use the Classify table to derive Big-O from code structure.
  4. When proposing a fix, quote the rule by file path so reviewers can verify the reasoning.
  5. See references/_sections.md for category ordering rationale, and assets/templates/_template.md when adding new rules.

Reference Files

FileDescription
references/_sections.mdCategory definitions, impact levels, and ordering rationale
assets/templates/_template.mdTemplate for adding new rules
metadata.jsonDiscipline, type, and source references

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
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/.experimental/algorithmic-complexity-review

Default branch

master

Latest commit

cf93c57

Tree SHA

afbb575