By Lucas Yoris · Performate
Shift-Left Performance: Who Owns the First k6 Script in a Product Team?
Shift-left performance with k6: DRIs, CI thresholds, and who owns the first script—SRE workbook culture meets k6 automation.
Platform emails say “shift-left performance,” but the new checkout service ships without a single k6 file in its repo. Postman collections exist; CI runs unit tests; and the first production incident becomes a debate about who should have load-tested—platform, SRE, or the squad that owns the feature.
Shift-left only works when ownership is named before scale, not assigned after an outage. This guide defines who owns the first k6 script in a product team, what that script must cover, how it graduates to CI, and which rituals keep it from rotting when the DRI rotates.
Why the first script owner matters more than a perf guild
Guilds and centers of excellence help with templates and training—they do not replace a directly responsible individual (DRI) on the squad that changes the API every sprint (SRE workbook culture).
- Feature squads know which endpoints moved and which auth flows broke.
- Platform provides secrets management, runner capacity, and golden templates—not every scenario.
- SRE defines SLO math and reviews error-budget burn; they should not be the only author of squad scripts.
- QA validates that reports map to acceptance criteria stakeholders already use.
The first script is intentionally small: readiness + one golden business path (for example login → read → write), not a whole-system simulation. Scope creep on day one is why teams never start.
When “platform owns perf” fails
Handoffs without a squad DRI mean scripts live in a orphaned repo, thresholds reference retired URLs, and CI secrets expire silently. The fix is not more meetings—it is a smoke scenario tagged with owner:checkout in k6 and a name in SERVICE.md.
Pair ownership with quarterly scenario health checks so the first script becomes a maintained asset, not a one-off hero run.
Practical k6: squad-owned smoke with promotion path
The DRI ships a smoke script in sprint one, then promotes the same file to CI after two green desktop runs.
Example script (illustrative). Adapt routes and auth to your service.
What this example demonstrates:
- Low blast radius:
per-vu-iterationswith 3 VUs proves wiring before ARR tests. - Owner tags:
owner:checkout(via env) shows up in reports and on-call filters. - Readiness + business path:
/readythen/api/orderscatches “up but useless.” - Threshold on errors only at smoke stage—add latency thresholds when baseline exists.
import http from 'k6/http';
import { check, sleep } from 'k6';
const BASE = __ENV.API_BASE || 'https://staging.example.com';
const SQUAD = __ENV.SQUAD || 'checkout';
export const options = {
scenarios: {
squad_smoke: {
executor: 'per-vu-iterations',
vus: 3,
iterations: 5,
tags: { owner: SQUAD, suite: 'smoke' },
},
},
thresholds: {
http_req_failed: ['rate<0.01'],
},
};
export default function () {
const ready = http.get(`${BASE}/ready`, { tags: { route: 'ready', owner: SQUAD } });
check(ready, { ready: (r) => r.status === 200 });
const orders = http.get(`${BASE}/api/orders`, {
headers: { Authorization: `Bearer ${__ENV.TOKEN}` },
tags: { route: 'orders', owner: SQUAD },
});
check(orders, { orders_ok: (r) => r.status >= 200 && r.status < 500 });
sleep(0.5);
}
Patterns that work
- Same Postman folder the squad already maintains → import instead of rewrite (Postman to k6).
- Promote to smoke/load CI profiles only after two green runs on the same commit.
- Add
p(95)thresholds when product agrees on a number—not before.
Anti-patterns
- Waiting for a dedicated perf hire before any script exists.
- Platform team writing scripts without squad review—drift in auth within two sprints.
- 500 VUs on first run—use VU and think-time sanity before scaling.
Decision framework: who does what at each maturity stage
| Stage | Squad DRI | Platform | SRE |
|---|---|---|---|
| New service (sprint 0–2) | Author smoke; run locally | Provide template + secrets | Agree SLO candidate |
| GA approaching | Add steady ARR scenario | Wire CI runner | Review threshold vs error budget |
| Shared API consumed by many | Extend platform template | Own breaking-change notice | Monitor tail across squads |
| Regulated data | Co-sign synthetic data only | Enforce no-prod-data policy | Audit trail of runs |
Escalate to platform when runners, secrets, or shared templates block progress—not when the squad is unsure which route matters.
Escalate to SRE when thresholds need error-budget math or incident correlation—not to write the first smoke for every team.
Observability, documentation, and next steps
- Record DRI name and backup in
SERVICE.mdor team handbook. - Link k6 workspace or repo path in the service README.
- Add smoke job to CI within two sprints of service creation.
- Archive first green export with git SHA for future regressions.
- Schedule quarterly health review of smoke + steady scenarios.
How Performate enables shift-left ownership on the squad
Example: checkout squad ships week-one smoke
- Import the squad’s Postman folder on day one—no waiting for platform glue code. Problem solved: DRI starts from requests they already curate.
- Create
squad_smokein the visual editor with owner tagcheckout. Problem solved: tags match the k6 model above without YAML typos. - Run locally against staging; fix env secrets in Performate profiles. Problem solved: faster loop than hand-editing
.envper developer. - Add
http_req_failedthreshold; later addp(95)when SLO number exists. Problem solved: progressive gates without new files. - Export k6 to the service repo; platform wires CI using the same file. Problem solved: one artifact from desktop to pipeline.
- Hand off PDF export to on-call runbooks with route tags for incidents. Problem solved: perf evidence lives where responders already look.
Closing takeaway
Shift-left performance is a named owner plus a smoke script, not a department slogan. Nominate the squad DRI, ship readiness + one golden path this sprint, and promote to CI only after evidence—not aspiration.
Add the DRI name to SERVICE.md today and run the smoke once before the next planning meeting asks for “perf confidence.”
Ready to optimize your API performance?
Explore how Performate simplifies k6 load testing—from imports to results—so your team ships performance confidence faster.