perf-skills 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md ADDED
@@ -0,0 +1,8 @@
1
+ Copyright 2026 NaveenKumar Namachivayam
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8
+
package/README.md ADDED
@@ -0,0 +1,227 @@
1
+ # perf-skills
2
+
3
+ > *"The more you sweat in training, the less you bleed in battle."* — Richard Marcinko
4
+ >
5
+ > The more relevant skills your AI loads during development, the fewer fires you fight in production.
6
+
7
+ ## What Is This?
8
+
9
+ `perf-skills` is a structured knowledge base that gives AI coding assistants deep, opinionated expertise in performance testing. It works with any AI tool that supports custom instructions, rules, or skill files — helping you plan, script, execute, and analyze load tests using any major tool.
10
+
11
+ ### Supported Tools
12
+
13
+ | Open Source | Commercial |
14
+ |---|---|
15
+ | Apache JMeter | NeoLoad (Tricentis) |
16
+ | k6 (Grafana Labs) | LoadRunner (OpenText) |
17
+ | Gatling | OctoPerf (SaaS) |
18
+ | Locust | |
19
+
20
+ ### Topics Covered
21
+
22
+ - **Workload design** — concurrency models, Little's Law, transaction mix, SLA targets
23
+ - **Test data** — parameterization, CSV feeds, synthetic data, data isolation
24
+ - **Script generation** — correlation, assertions, error handling, session management
25
+ - **Test execution** — local, distributed, CI/CD pipelines, cloud execution
26
+ - **Results analysis** — percentiles, bottleneck identification, trend comparison, reporting
27
+ - **Observability** — APM integration, Prometheus/Grafana, distributed tracing, log correlation
28
+ - **Production testing** — canary, shadow traffic, chaos engineering, safety controls
29
+ - **Protocol testing** — gRPC, GraphQL, WebSocket/SSE, Kafka/message queues
30
+ - **Database testing** — JDBC load testing, connection pools, query concurrency, replication lag
31
+ - **Modern architectures** — microservices, Kubernetes (HPA, service mesh), serverless (cold starts), frontend (Core Web Vitals)
32
+
33
+ ## Compatible AI Coding Assistants
34
+
35
+ | Tool | Integration Method | Setup |
36
+ |---|---|---|
37
+ | **Windsurf (Cascade)** | Skills | Copy to skills directory — auto-triggers on perf questions |
38
+ | **Cursor** | Rules / Docs | Add as project rules or index via `@Docs` |
39
+ | **Claude Code** | CLAUDE.md / Custom instructions | Reference files in `CLAUDE.md` or feed as context |
40
+ | **Cline** | Custom instructions / `.clinerules` | Add to `.clinerules` or workspace instructions |
41
+ | **Roo Code** | Custom instructions / Rules | Add as workspace rules or custom instructions |
42
+ | **Aider** | Conventions / Chat context | Add to `.aider.conf.yml` conventions or `/read` files |
43
+ | **OpenCode** | Custom instructions | Add to project-level instructions |
44
+ | **Antigravity** | Context files | Add as context / knowledge files |
45
+ | **Pochi** | Custom instructions | Reference files in project instructions |
46
+ | **GitHub Copilot** | Custom instructions / `.github/copilot-instructions.md` | Reference in repo-level instructions |
47
+
48
+ ## Installation
49
+
50
+ ### Claude Code Plugin (Recommended)
51
+
52
+ **Add the marketplace and install:**
53
+ ```bash
54
+ /plugin marketplace add QAInsights/perf-skills
55
+ /plugin install perf-skills@perf-skills
56
+ ```
57
+
58
+ After install, the `/perf-skills` skill is available and auto-activates on performance testing questions.
59
+
60
+ **Update to latest version:**
61
+ ```bash
62
+ /plugin marketplace update
63
+ ```
64
+
65
+ ### Install as Skills (npx)
66
+
67
+ ```bash
68
+ npx skills add QAInsights/perf-skills
69
+ ```
70
+
71
+ ### Install as Skills (Manual)
72
+
73
+ ```bash
74
+ # Clone and copy to Claude skills directory
75
+ git clone https://github.com/QAInsights/perf-skills.git
76
+ cd perf-skills
77
+ cp -r perf-skills/ ~/.claude/skills/
78
+ ```
79
+
80
+ ### Windsurf (Skills)
81
+
82
+ 1. Copy the `perf-skills/` directory into your Windsurf skills location.
83
+ 2. The skill auto-triggers when you ask about performance testing, load testing, or any supported tool.
84
+
85
+ ### Cursor (Rules / Docs)
86
+
87
+ **Option A — Project Rules:**
88
+ 1. Create `.cursor/rules/perf-skills.mdc` in your project root.
89
+ 2. Add the content of `SKILL.md` as the rule, with file references pointing to the `references/` directory.
90
+
91
+ **Option B — @Docs indexing:**
92
+ 1. Open Cursor Settings → Features → Docs.
93
+ 2. Add the `perf-skills/` directory as a doc source.
94
+ 3. Reference with `@Docs perf-skills` in chat.
95
+
96
+ ### Claude Code (CLAUDE.md)
97
+
98
+ 1. Copy the `perf-skills/` directory into your project.
99
+ 2. In your `CLAUDE.md`, add:
100
+ ```markdown
101
+ For performance testing questions, read `perf-skills/SKILL.md` for routing,
102
+ then load the relevant reference file(s) from `perf-skills/references/`.
103
+ ```
104
+
105
+ ### Cline / Roo Code
106
+
107
+ 1. Copy the `perf-skills/` directory into your project.
108
+ 2. Add to your custom instructions or `.clinerules`:
109
+ ```
110
+ For performance testing guidance, consult the perf-skills knowledge base.
111
+ Start with perf-skills/SKILL.md for routing to the correct reference file.
112
+ ```
113
+
114
+ ### Aider
115
+
116
+ 1. Copy the `perf-skills/` directory into your project.
117
+ 2. Use `/read perf-skills/SKILL.md` to load the routing file.
118
+ 3. Then `/read` the specific reference file(s) relevant to your question.
119
+
120
+ ### GitHub Copilot
121
+
122
+ 1. Copy the `perf-skills/` directory into your project.
123
+ 2. In `.github/copilot-instructions.md`, add:
124
+ ```markdown
125
+ For performance testing questions, reference the perf-skills knowledge base.
126
+ Start with perf-skills/SKILL.md, then load relevant files from perf-skills/references/.
127
+ ```
128
+
129
+ ### OpenCode / Antigravity / Pochi
130
+
131
+ 1. Copy the `perf-skills/` directory into your project.
132
+ 2. Add to your project-level custom instructions or context files:
133
+ ```
134
+ For performance testing guidance, consult the perf-skills knowledge base.
135
+ Start with perf-skills/SKILL.md for routing to the correct reference file.
136
+ ```
137
+
138
+ ### Any Other AI Tool
139
+
140
+ The skill is plain markdown files. Any AI tool that can read files or accept custom instructions can use it:
141
+ 1. Point the tool to `SKILL.md` as the entry point.
142
+ 2. Let the Reference Map in `SKILL.md` guide which file(s) to load.
143
+
144
+ ### As a Standalone Knowledge Base
145
+
146
+ Browse the markdown files directly — they're self-contained references useful even without an AI assistant.
147
+
148
+ ## File Structure
149
+
150
+ ```
151
+ perf-skills/ # Repository root
152
+ ├── .claude-plugin/
153
+ │ └── marketplace.json # Claude Code marketplace catalog
154
+ ├── README.md
155
+ ├── LICENSE.md
156
+ └── perf-skills/ # Plugin / Skill directory
157
+ ├── .claude-plugin/
158
+ │ └── plugin.json # Claude Code plugin manifest
159
+ ├── SKILL.md # Entry point — tool selection, lifecycle, key principles
160
+ └── references/
161
+ ├── tools/ # Tool-specific syntax and configuration
162
+ │ ├── jmeter.md # JMeter 5.6+ — samplers, extractors, plugins, Groovy
163
+ │ ├── k6.md # k6 v0.50+ — executors, checks, thresholds, modules
164
+ │ ├── gatling.md # Gatling 3.10+ — Scala/Java DSL, feeders, injection
165
+ │ ├── locust.md # Locust 2.20+ — Python scripts, events, FastHttpUser
166
+ │ ├── neoload.md # NeoLoad — GUI workflow, CLI, API execution
167
+ │ ├── loadrunner.md # LoadRunner — VuGen, protocols, Controller scenarios
168
+ │ └── octoperf.md # OctoPerf — JMeter-based SaaS, HAR import, cloud
169
+ └── topics/ # Cross-cutting concepts (tool-agnostic)
170
+ ├── workload-design.md # Concurrency models, load profiles, Little's Law
171
+ ├── test-data.md # CSV, DB seeding, Faker, data isolation patterns
172
+ ├── script-generation.md # Correlation, assertions, error handling, naming
173
+ ├── test-execution.md # Distributed, CI/CD (GitHub Actions, GitLab, Jenkins)
174
+ ├── results-analysis.md # Percentiles, bottleneck framework, reporting
175
+ ├── observability.md # APM, Prometheus, Grafana, tracing, JVM metrics
176
+ ├── production-testing.md # Canary, shadow traffic, chaos, safety controls
177
+ ├── protocol-testing.md # gRPC, GraphQL, WebSocket, Kafka/message queues
178
+ ├── database-testing.md # JDBC, connection pools, slow queries, deadlocks
179
+ └── modern-architectures.md # Microservices, K8s, serverless, browser/Web Vitals
180
+ ```
181
+
182
+ ## How the Skill Works
183
+
184
+ ### Routing Logic
185
+
186
+ `SKILL.md` acts as the entry point and router. It contains:
187
+
188
+ 1. **Loading Priority Rules** — tells the AI which file(s) to load based on the user's question (never all at once).
189
+ 2. **Reference Map** — maps user intent to the right file.
190
+ 3. **Protocol Routing Table** — maps protocols (gRPC, GraphQL, etc.) to recommended tools and reference files.
191
+ 4. **Tool Selection Matrix** — helps recommend a tool when the user hasn't chosen one.
192
+ 5. **Key Principles** — the single source of truth for cross-cutting best practices (assertions, think time, parameterization, correlation).
193
+
194
+ ### Design Principles
195
+
196
+ - **Token-efficient**: Tool files contain only tool-specific syntax. Cross-cutting concepts live in topic files. No duplication.
197
+ - **Selective loading**: The AI loads 1–2 files per question, not the entire knowledge base.
198
+ - **Single source of truth**: Each concept is defined in exactly one place. Tool files cross-reference topic files for shared concepts.
199
+ - **Opinionated**: The skill prescribes best practices, not just documentation. It tells you what to do, not just what's possible.
200
+
201
+ ## Example Questions This Skill Handles
202
+
203
+ | Question | Files Loaded |
204
+ |---|---|
205
+ | "Help me write a k6 load test for our REST API" | `k6.md` |
206
+ | "How should I design the workload for our e-commerce app?" | `workload-design.md` |
207
+ | "Set up JMeter in our GitHub Actions pipeline" | `test-execution.md` + `jmeter.md` |
208
+ | "Our p95 latency is spiking at 500 VUs — how do I debug?" | `results-analysis.md` + `observability.md` |
209
+ | "How do I load test a gRPC service?" | `protocol-testing.md` + `k6.md` |
210
+ | "What tool should I use? We're a Python team." | `SKILL.md` (Tool Selection Matrix) |
211
+ | "Test our Kafka consumer throughput" | `protocol-testing.md` |
212
+ | "Validate our K8s HPA scales correctly under load" | `modern-architectures.md` |
213
+ | "Load test our PostgreSQL connection pool" | `database-testing.md` + `jmeter.md` |
214
+
215
+ ## Contributing
216
+
217
+ To add or update content:
218
+
219
+ 1. **Tool-specific content** goes in `references/tools/<tool>.md` — syntax, config, tool-unique tips only.
220
+ 2. **Cross-cutting concepts** go in `references/topics/<topic>.md` — patterns that apply across tools.
221
+ 3. **Never duplicate** — if a concept exists in a topic file, tool files should cross-reference it, not restate it.
222
+ 4. **Update SKILL.md** if you add a new file — add it to the Reference Map and Protocol Routing Table if applicable.
223
+ 5. **Add a version indicator** (`> Targets: ...`) to new tool files.
224
+
225
+ ## License
226
+
227
+ See repository license.
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "perf-skills",
3
+ "version": "1.0.0",
4
+ "description": "Expert AI skill for performance testing — covers JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner, OctoPerf across the full lifecycle",
5
+ "main": "perf-skills/SKILL.md",
6
+ "files": [
7
+ "perf-skills/"
8
+ ],
9
+ "keywords": [
10
+ "performance-testing",
11
+ "load-testing",
12
+ "jmeter",
13
+ "k6",
14
+ "gatling",
15
+ "locust",
16
+ "neoload",
17
+ "loadrunner",
18
+ "octoperf",
19
+ "stress-testing",
20
+ "soak-testing",
21
+ "grpc",
22
+ "graphql",
23
+ "websocket",
24
+ "observability",
25
+ "ci-cd",
26
+ "claude-skills",
27
+ "ai-assistant"
28
+ ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/QAInsights/perf-skills.git"
32
+ },
33
+ "author": {
34
+ "name": "NaveenKumar Namachivayam",
35
+ "email": "info@qainsights.com"
36
+ },
37
+ "license": "MIT",
38
+ "homepage": "https://github.com/QAInsights/perf-skills#readme",
39
+ "engines": {
40
+ "node": ">=14"
41
+ }
42
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "perf-skills",
3
+ "description": "Expert guidance for performance testing: planning, scripting, executing, and analyzing load/stress/soak/spike tests using JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner, OctoPerf.",
4
+ "version": "1.0.0"
5
+ }
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: perf-skills
3
+ description: >
4
+ Expert guidance for performance testing: planning, scripting, executing, and analyzing
5
+ load/stress/soak/spike tests using JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner,
6
+ OctoPerf. Covers workload design, test data, correlation, CI/CD integration,
7
+ distributed testing, observability, production testing, and protocol-specific guidance
8
+ for HTTP, gRPC, GraphQL, WebSocket, JDBC, and message queues.
9
+ ---
10
+
11
+ # Performance Testing Skill (perf-skills)
12
+
13
+ This skill provides expert, opinionated guidance across the full performance testing lifecycle — from workload design through production observation. It covers both commercial tools (LoadRunner, NeoLoad, OctoPerf) and open-source tools (JMeter, k6, Gatling, Locust).
14
+
15
+ ---
16
+
17
+ ## How to Use This Skill
18
+
19
+ Read the relevant reference files based on what the user needs. Multiple files may apply.
20
+
21
+ ### Loading Priority Rules
22
+
23
+ 1. **Tool-specific syntax/config** → load the tool file only.
24
+ 2. **Strategy/concepts** (workload design, test data, analysis) → load the topic file only.
25
+ 3. **Both apply** (e.g., "JMeter CI/CD") → load the topic file first for patterns, then the tool file for syntax.
26
+ 4. **Never load all files at once** — select the 1–2 most relevant.
27
+ 5. **Cross-cutting principles** (assertions, think time, parameterization) → this file's Key Principles section is the single source of truth.
28
+
29
+ ### Reference Map
30
+
31
+ | User needs help with... | Read this file |
32
+ |---|---|
33
+ | Choosing the right tool | This file — see Tool Selection Matrix below |
34
+ | JMeter scripts, plugins, config | `references/tools/jmeter.md` |
35
+ | k6 scripting, extensions, cloud | `references/tools/k6.md` |
36
+ | Gatling simulations, Scala/Java DSL | `references/tools/gatling.md` |
37
+ | Locust Python tests, distributed | `references/tools/locust.md` |
38
+ | NeoLoad projects, GUI, APIs | `references/tools/neoload.md` |
39
+ | LoadRunner scripts, protocols, VuGen | `references/tools/loadrunner.md` |
40
+ | OctoPerf cloud test management | `references/tools/octoperf.md` |
41
+ | Designing workloads, concurrency, pacing | `references/topics/workload-design.md` |
42
+ | Test data, parameterization, CSV feeds | `references/topics/test-data.md` |
43
+ | Script patterns, correlation, best practices | `references/topics/script-generation.md` |
44
+ | CI/CD, distributed execution, cloud runners | `references/topics/test-execution.md` |
45
+ | Analyzing results, percentiles, SLAs | `references/topics/results-analysis.md` |
46
+ | APM, metrics, tracing, dashboards | `references/topics/observability.md` |
47
+ | Staging vs production testing strategies | `references/topics/production-testing.md` |
48
+ | gRPC, GraphQL, WebSocket, messaging protocols | `references/topics/protocol-testing.md` |
49
+ | Database load testing (JDBC, connection pools) | `references/topics/database-testing.md` |
50
+ | Microservices, K8s, serverless performance | `references/topics/modern-architectures.md` |
51
+
52
+ ### Protocol Routing Table
53
+
54
+ When the user's question is protocol-specific, use this to select the right tool and reference:
55
+
56
+ | Protocol | Recommended Tools | Reference |
57
+ |---|---|---|
58
+ | HTTP / REST | k6, Gatling, JMeter | Tool file |
59
+ | gRPC | k6, Gatling, JMeter (plugin) | `references/topics/protocol-testing.md` + tool file |
60
+ | GraphQL | k6, Gatling | `references/topics/protocol-testing.md` + tool file |
61
+ | WebSocket / SSE | Gatling, k6 | `references/topics/protocol-testing.md` + tool file |
62
+ | JDBC / Database | JMeter | `references/topics/database-testing.md` + `jmeter.md` |
63
+ | Kafka / Message Queues | k6 (xk6-kafka), JMeter | `references/topics/protocol-testing.md` |
64
+ | SOAP / WSDL | LoadRunner, JMeter | Tool file |
65
+ | SAP / Citrix | LoadRunner, NeoLoad | Tool file |
66
+
67
+ ---
68
+
69
+ ## Tool Selection Matrix
70
+
71
+ Use this to recommend the right tool when the user hasn't decided yet.
72
+
73
+ | Criteria | JMeter | k6 | Gatling | Locust | NeoLoad | LoadRunner | OctoPerf |
74
+ |---|---|---|---|---|---|---|---|
75
+ | **Language** | GUI/XML + Groovy | JavaScript/TypeScript | Scala/Java | Python | GUI + NeoLoad DSL | VuGen C-like | Web UI (JMeter-based) |
76
+ | **Open source** | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ (SaaS) |
77
+ | **Protocol support** | HTTP, JDBC, JMS, MQTT, FTP, gRPC | HTTP, gRPC, WS | HTTP, JMS, gRPC | HTTP, gRPC | HTTP, gRPC, WS, SAP | HTTP, Citrix, SAP, Flex | HTTP (JMeter-backed) |
78
+ | **Developer-friendly** | Medium | High | High | High | Low | Low | Medium |
79
+ | **Enterprise support** | Community + BlazeMeter | Grafana Cloud | Gatling Enterprise | Limited | ✅ | ✅ | ✅ |
80
+ | **CI/CD integration** | Good (Maven/Gradle) | Excellent | Excellent | Good | Good | Moderate | Good |
81
+ | **Cloud execution** | BlazeMeter, OctoPerf | Grafana Cloud | Gatling Enterprise | Self-managed | NeoLoad Cloud | AWS/on-prem | OctoPerf Cloud |
82
+ | **Best for** | Legacy systems, JDBC, protocols | Modern APIs, TypeScript devs | High-throughput HTTP | Python teams, flexible | SAP/Citrix enterprise | Mainframe, legacy enterprise | JMeter teams needing cloud UI |
83
+
84
+ ### Quick decision rules
85
+ - **Team writes code** → k6 or Gatling
86
+ - **Team uses GUI** → JMeter or NeoLoad
87
+ - **Python shop** → Locust
88
+ - **SAP / mainframe / Citrix** → LoadRunner or NeoLoad
89
+ - **Need cloud SaaS with minimal setup** → OctoPerf (JMeter) or Grafana Cloud (k6)
90
+ - **Free + protocol variety** → JMeter
91
+ - **Correlation needed for session-heavy flows** → JMeter (with Correlation Recorder) or LoadRunner
92
+ - **gRPC or GraphQL APIs** → k6 or Gatling
93
+ - **Message queues (Kafka, RabbitMQ)** → k6 (xk6-kafka) or JMeter
94
+
95
+ ---
96
+
97
+ ## Performance Testing Lifecycle Overview
98
+
99
+ Always think through these phases when helping a user — they often ask about one phase but need context from others.
100
+
101
+ ```
102
+ 1. PLAN
103
+ └─ Workload design → concurrency model → SLA targets → test type selection
104
+ → references/topics/workload-design.md
105
+
106
+ 2. DATA
107
+ └─ Identify variables → parameterization strategy → test data generation
108
+ → references/topics/test-data.md
109
+
110
+ 3. SCRIPT
111
+ └─ Record or code → correlation → parameterization → assertions → script review
112
+ → references/topics/script-generation.md + tool-specific file
113
+
114
+ 4. EXECUTE
115
+ └─ Local → distributed → CI/CD → cloud burst → monitoring hooks
116
+ → references/topics/test-execution.md
117
+
118
+ 5. OBSERVE
119
+ └─ APM → metrics → logs → traces → dashboards
120
+ → references/topics/observability.md
121
+
122
+ 6. ANALYZE
123
+ └─ Throughput, latency percentiles, errors → bottleneck ID → report
124
+ → references/topics/results-analysis.md
125
+
126
+ 7. PRODUCTION
127
+ └─ Canary testing → shadow load → chaos → synthetic monitoring
128
+ → references/topics/production-testing.md
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Common Performance Test Types
134
+
135
+ | Test Type | Goal | Key Metric |
136
+ |---|---|---|
137
+ | **Load** | Validate system at expected load | Response time, throughput, error rate |
138
+ | **Stress** | Find the breaking point | Max VUs before degradation, error onset |
139
+ | **Soak/Endurance** | Detect memory leaks, slow degradation | Resource trend over time (hours) |
140
+ | **Spike** | Behavior under sudden traffic burst | Recovery time, error spike |
141
+ | **Capacity** | Find max sustainable load | Throughput ceiling at SLA thresholds |
142
+ | **Smoke** | Quick sanity check | Single VU — no errors |
143
+ | **Breakpoint** | Incremental ramp until failure | Failure threshold VU count |
144
+
145
+ ---
146
+
147
+ ## Key Principles to Always Apply
148
+
149
+ 1. **Never test against production blindly** — always have a rollback plan and alerting in place.
150
+ 2. **Baseline first** — always establish a baseline before stress or soak runs.
151
+ 3. **Think time and pacing matter** — unrealistic zero-think-time tests produce misleading results.
152
+ 4. **Parameterize everything** — hardcoded credentials, tokens, and IDs will fail at scale.
153
+ 5. **Assertions are not optional** — tests without assertions are just generating traffic, not validating behavior.
154
+ 6. **Isolate the system under test** — shared environments invalidate results.
155
+ 7. **Correlate dynamic values** — session tokens, CSRF, ViewState, etc. must be extracted and reused.
156
+
157
+ ---
158
+
159
+ ## Asking the Right Questions
160
+
161
+ When a user brings a performance problem, ask (or infer) these before prescribing a solution:
162
+
163
+ - What is the **target concurrency** (VUs or RPS)?
164
+ - What is the **SLA** (e.g., p95 < 500ms, error rate < 1%)?
165
+ - What is the **protocol** (HTTP/REST, gRPC, JDBC, WebSocket)?
166
+ - Is the app **stateful** (session-based) or **stateless** (token-based)?
167
+ - Where will tests **run from** (local, CI, cloud)?
168
+ - What **environment** is being tested (dev, staging, prod)?
169
+ - Is there an **APM tool** in place (Datadog, Dynatrace, Grafana, New Relic)?