Source code
Performance
Stability
Cost
Releases
Scalability antipatterns
Code that is fine at 100 users and falls over at 10,000.
Overview
This check reads query patterns, request-path work, and serverless state for the shapes that scale with your data instead of staying flat. Each finding names the call site and what it does as the row count grows.
What it looks for
- N+1 queries — a per-id fetch inside a map or loop
- Queries with no pagination, and whole tables or files read into memory
- Synchronous CPU-heavy work in the request path, and event-loop blocking calls
- Hot reads with no caching layer
- Global mutable state in serverless handlers
Why it matters
An N+1 query in a list view is one round trip per row: invisible with seed data, a timeout with real data. CPU-heavy work in the request path blocks the event loop for every other user on that instance.
Rules in this check
| What it reports | Fix path |
|---|---|
| N+1 DB queries — per-ID fetch inside map() | Guide |
| Unbounded query / no pagination | Pull request |
| Whole table / large file in memory | Guide |
| Sync CPU-heavy work in request path | Guide |
| Missing caching on hot reads | Guide |
| Event-loop blocking | Guide |
| Global mutable state in serverless | Guide |
How the fixes arrive
Pull requestLow-risk changes arrive as a pull request on a lumioguard branch, with a breakage analysis attached. You review and merge it.
GuideChanges only you can make safely arrive as a step-by-step guide you can follow yourself or hand to your coding agent.
Run them all on your app
Connect your repo and your live services with read-only scopes. The first scan is free, and nothing changes without your approval.