
Performance Engineer
- 654 installs
- 65 repo stars
- Updated June 21, 2026
- charon-fan/agent-playbook
performance-engineer is a Claude Code skill that systematically diagnoses, optimizes, and monitors application performance across backend APIs, database queries, and frontend page load metrics.
About
performance-engineer is a Claude Code skill from charon-fan/agent-playbook for performance optimization and analysis when developers ask to optimize code, explain slowness, or profile an application. It defines explicit targets: API response p50 under 100ms, p95 under 500ms, database queries under 50ms, First Meaningful Paint under 2 seconds, and Time to Interactive under 3 seconds. Bundled Python scripts include scripts/profile.py for application profiling and scripts/perf_report.py for generating performance reports. Developers reach for performance-engineer when backend services, APIs, or frontend experiences miss latency budgets and need structured diagnosis rather than ad-hoc micro-optimizations.
- Applies standardized performance targets including p50 < 100ms, p95 < 500ms, database queries < 50ms, FMP < 2s and TTI <
- 4-step performance checklist: baseline metrics recorded, bottlenecks identified, fixes verified with benchmarks, regress
- Common optimization levers: cache hot paths, reduce N+1 queries, minimize payload size, batch network calls
- Generates performance reports and runs profiling scripts while tracking latency percentiles, throughput and error rates
- Hard-gate verification before shipping: all checklist items must be completed and benchmarks must meet targets
Performance Engineer by the numbers
- 654 all-time installs (skills.sh)
- Ranked #198 of 1,382 Code Review & Quality skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/charon-fan/agent-playbook --skill performance-engineerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 654 |
|---|---|
| repo stars | ★ 65 |
| Security audit | 3 / 3 scanners passed |
| Last updated | June 21, 2026 |
| Repository | charon-fan/agent-playbook ↗ |
Why is my API or page load slower than expected?
Systematically diagnose, optimize, and monitor application performance across backend services, APIs, and frontend experiences.
Who is it for?
Full-stack engineers debugging latency regressions in APIs, databases, or frontend pages with defined SLO targets.
Skip if: Greenfield projects with no performance symptoms or teams that only need load-test infrastructure provisioning without code-level diagnosis.
When should I use this skill?
User asks to optimize slow code, profile an application, explain performance bottlenecks, or meet API or page load latency targets.
What you get
Performance profile data, perf_report.py reports, and optimization recommendations against defined latency budgets.
- Performance profile output
- perf_report.py generated report
By the numbers
- Defines API p50 target under 100ms and p95 under 500ms
- Bundles 2 Python scripts: profile.py and perf_report.py
- Sets database query target under 50ms and page TTI under 3s
Files
Performance Engineer
Specialist in analyzing and optimizing application performance, identifying bottlenecks, and implementing efficiency improvements.
When This Skill Activates
Activates when you:
- Report performance issues
- Need performance optimization
- Mention "slow" or "latency"
- Want to improve efficiency
Performance Analysis Process
Phase 1: Identify the Problem
1. Define metrics
- What's the baseline?
- What's the target?
- What's acceptable?
2. Measure current performance
# Response time
curl -w "@curl-format.txt" -o /dev/null -s https://example.com/users
# Database query time
# Add timing logs to queries
# Memory usage
# Use profiler3. Profile the application
# Node.js
node --prof app.js
# Python
python -m cProfile app.py
# Go
go test -cpuprofile=cpu.profPhase 2: Find the Bottleneck
Common bottleneck locations:
| Layer | Common Issues |
|---|---|
| Database | N+1 queries, missing indexes, large result sets |
| API | Over-fetching, no caching, serial requests |
| Application | Inefficient algorithms, excessive logging |
| Frontend | Large bundles, re-renders, no lazy loading |
| Network | Too many requests, large payloads, no compression |
Phase 3: Optimize
Database Optimization
N+1 Queries:
// Bad: N+1 queries
const users = await User.findAll();
for (const user of users) {
user.posts = await Post.findAll({ where: { userId: user.id } });
}
// Good: Eager loading
const users = await User.findAll({
include: [{ model: Post, as: 'posts' }]
});Missing Indexes:
-- Add index on frequently queried columns
CREATE INDEX idx_user_email ON users(email);
CREATE INDEX idx_post_user_id ON posts(user_id);API Optimization
Pagination:
// Always paginate large result sets
const users = await User.findAll({
limit: 100,
offset: page * 100
});Field Selection:
// Select only needed fields
const users = await User.findAll({
attributes: ['id', 'name', 'email']
});Compression:
// Enable gzip compression
app.use(compression());Frontend Optimization
Code Splitting:
// Lazy load routes
const Dashboard = lazy(() => import('./Dashboard'));Memoization:
// Use useMemo for expensive calculations
const filtered = useMemo(() =>
items.filter(item => item.active),
[items]
);Image Optimization:
- Use WebP format
- Lazy load images
- Use responsive images
- Compress images
Phase 4: Verify
1. Measure again 2. Compare to baseline 3. Ensure no regressions 4. Document the improvement
Performance Targets
| Metric | Target | Critical Threshold |
|---|---|---|
| API Response (p50) | < 100ms | < 500ms |
| API Response (p95) | < 500ms | < 1s |
| API Response (p99) | < 1s | < 2s |
| Database Query | < 50ms | < 200ms |
| Page Load (FMP) | < 2s | < 3s |
| Time to Interactive | < 3s | < 5s |
| Memory Usage | < 512MB | < 1GB |
Common Optimizations
Caching Strategy
// Cache expensive computations
const cache = new Map();
async function getUserStats(userId: string) {
if (cache.has(userId)) {
return cache.get(userId);
}
const stats = await calculateUserStats(userId);
cache.set(userId, stats);
// Invalidate after 5 minutes
setTimeout(() => cache.delete(userId), 5 * 60 * 1000);
return stats;
}Batch Processing
// Bad: Individual requests
for (const id of userIds) {
await fetchUser(id);
}
// Good: Batch request
await fetchUsers(userIds);Debouncing/Throttling
// Debounce search input
const debouncedSearch = debounce(search, 300);
// Throttle scroll events
const throttledScroll = throttle(handleScroll, 100);Performance Monitoring
Key Metrics
- Response Time: Time to process request
- Throughput: Requests per second
- Error Rate: Failed requests percentage
- Memory Usage: Heap/RAM used
- CPU Usage: Processor utilization
Monitoring Tools
| Tool | Purpose |
|---|---|
| Lighthouse | Frontend performance |
| New Relic | APM monitoring |
| Datadog | Infrastructure monitoring |
| Prometheus | Metrics collection |
Scripts
Profile application:
python scripts/profile.pyGenerate performance report:
python scripts/perf_report.pyReferences
references/optimization.md- Optimization techniquesreferences/monitoring.md- Monitoring setupreferences/checklist.md- Performance checklist
Performance Engineer
A Claude Code skill for performance optimization and analysis.
Installation
This skill is part of the agent-playbook collection.
Usage
You: Optimize this code
You: Why is this slow?
You: Profile this applicationPerformance Targets
| Metric | Target |
|---|---|
| API Response (p50) | < 100ms |
| API Response (p95) | < 500ms |
| Database Query | < 50ms |
| Page Load (FMP) | < 2s |
| Time to Interactive | < 3s |
Scripts
Profile application:
python scripts/profile.pyGenerate performance report:
python scripts/perf_report.pyResources
Performance Checklist
- [ ] Baseline metrics recorded
- [ ] Bottlenecks identified
- [ ] Fixes verified with benchmarks
- [ ] Regression tests added
Performance Monitoring
- Track latency percentiles
- Monitor throughput and error rates
- Set alerts on regressions
Performance Optimization Guide
Common Levers
- Cache hot paths
- Reduce N+1 queries
- Minimize payload size
- Batch network calls
#!/usr/bin/env python3
# Template generator for performance report.
from pathlib import Path
import argparse
import textwrap
def write_output(path: Path, content: str, force: bool) -> bool:
if path.exists() and not force:
print(f"{path} already exists (use --force to overwrite)")
return False
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content, encoding="utf-8")
return True
def main() -> int:
parser = argparse.ArgumentParser(description="Generate a performance report.")
parser.add_argument("--output", default="perf-report.md", help="Output file path")
parser.add_argument("--name", default="example", help="System or endpoint name")
parser.add_argument("--owner", default="team", help="Owning team")
parser.add_argument("--force", action="store_true", help="Overwrite existing file")
args = parser.parse_args()
content = textwrap.dedent(
f"""\
# Performance Report
## Summary
{args.name}
## Ownership
- Owner: {args.owner}
## Baseline Metrics
- p50 latency:
- p95 latency:
- error rate:
- throughput:
## Findings
- Top bottlenecks
- Resource saturation
## Recommendations
- Short-term fixes
- Long-term optimizations
## Validation
- Benchmark commands
- Regression checks
"""
).strip() + "\n"
output = Path(args.output)
if not write_output(output, content, args.force):
return 1
print(f"Wrote {output}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
#!/usr/bin/env python3
# Template generator for performance profile.
from pathlib import Path
import argparse
import textwrap
def write_output(path: Path, content: str, force: bool) -> bool:
if path.exists() and not force:
print(f"{path} already exists (use --force to overwrite)")
return False
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content, encoding="utf-8")
return True
def main() -> int:
parser = argparse.ArgumentParser(description="Generate a performance profile.")
parser.add_argument("--output", default="perf-profile.txt", help="Output file path")
parser.add_argument("--name", default="example", help="Scenario name")
parser.add_argument("--tool", default="perf", help="Profiling tool")
parser.add_argument("--command", default="run-benchmark.sh", help="Command profiled")
parser.add_argument("--duration", default="60s", help="Profile duration")
parser.add_argument("--force", action="store_true", help="Overwrite existing file")
args = parser.parse_args()
content = textwrap.dedent(
f"""\
Profile: {args.name}
Tool: {args.tool}
Command: {args.command}
Duration: {args.duration}
Environment:
- CPU:
- Memory:
- OS:
- Build:
Workload:
- Input size:
- Concurrency:
- Dataset:
Top Hotspots:
- function_a: 0.00%
- function_b: 0.00%
Notes:
- Findings summary
"""
).strip() + "\n"
output = Path(args.output)
if not write_output(output, content, args.force):
return 1
print(f"Wrote {output}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
Related skills
FAQ
What latency targets does performance-engineer enforce?
performance-engineer targets API p50 under 100ms, p95 under 500ms, database queries under 50ms, First Meaningful Paint under 2 seconds, and Time to Interactive under 3 seconds when evaluating application performance.
What scripts does performance-engineer include?
performance-engineer bundles python scripts/profile.py for application profiling and python scripts/perf_report.py for generating structured performance reports from collected metrics.
Is Performance Engineer safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.