Communitygithub.com

lguidolin/leistung-und-skala

Verwenden Sie dies, wenn Sie an heißen Pfaden, List-Endpunkten, Paginierung, Datenzugriff in Schleifen oder öffentlichen Schnittstellen/Schemata arbeiten. Symptome – unbegrenzte Abfragen, N+1-Zugriff, kein Latenzbudget, Optimieren ohne Messen oder Ändern einer Schnittstelle, von der viele Konsumenten abhängen. Schlüsselwörter – Paginierung, N+1, Hyrum's Law, Performance-Budget, Bundle-Größe.

Was ist leistung-und-skala?

Diese Fähigkeit ist ein Leitfaden für die Sicherstellung von Leistung und Skalierbarkeit von Software. Sie betont, dass Performance ein Feature mit einem messbaren Budget ist: Es müssen Latenz- und Client-Budgets (z.B. Bundle-Größe) definiert und in CI überwacht werden. Der Ansatz ist datengetrieben – messen Sie zuerst, optimieren Sie erst dann, und vermeiden Sie spekulative Optimierungen. Typische Skalierungsfehler wie N+1-Zugriffsmuster (Datenabruf in Schleifen) und unbegrenzte List-Ergebnisse werden aktiv adressiert: Paginierung ist der Standard, und N+1 wird durch Batch-Verarbeitung oder Joins (z.B. DataLoader in GraphQL) vermieden. Die Fähigkeit unterstreicht auch Hyrum's Law, wonach jedes beobachtbare Verhalten einer Schnittstelle – auch unbeabsichtigtes – zu einem Vertrag für Konsumenten wird. Daher müssen öffentliche APIs und Schemas mit Bedacht geändert (nur hinzufügen und als veraltet markieren) und durch Vertragstests geschützt werden. Die Implementierung erfolgt durch CI-Prüfungen (z.B. Bundle-Größe, Abfragekosten) und manuelle Überprüfungen von Paginierung und N+1-Mustern im Code-Review. Die Fähigkeit wird in Claude Code, Cursor, Codex und anderen KI-Agenten eingesetzt.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/performance-and-scale

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Leistung und Skala

Überblick

Leistung ist ein Feature mit einem Budget. Messen Sie es, begrenzen Sie es, und respektieren Sie, dass heutiges Verhalten zu morgigen Verträgen wird. Systeme breiten selten unter dem Durchsatz zusammen, für den Sie ausgelegt haben – sie brechen an der Abfrage, die Sie nicht indiziert haben, und an der Liste, die Sie nicht paginiert haben.

Die Prinzipien

  • Budgets setzen und dagegen messen. Latenzziele (gebunden an die SLOs von observability-and-slos) und Client-Budgets (z.B. Bundle-Größe). Eine Regression über das Budget hinaus ist ein Fehler.
  • Messen, bevor Sie optimieren. Finden Sie den wahren Engpass mit Daten – Profile, Abfragepläne, Traces – bevor Sie Code ändern. Keine spekulative Optimierung.
  • Standardmäßig paginieren. Jede Liste, die wachsen kann, wird mit einer begrenzten Seitengröße paginiert. Unbegrenzte Ergebnismengen sind ein Latenz- und Denial-of-Service-Risiko.
  • Hüten Sie sich vor N+1-Zugriffsmustern. Daten, die in einer Schleife abgerufen werden, sind der häufigste Skalierungsfehler; verwenden Sie stattdessen Batch oder Join. (In diesem Stack: Verwenden Sie die Look-Ahead/DataLoader-Schicht von GraphQL anstatt Auflösung pro Zeile.)
  • Hyrum's Law ist real: Jedes beobachtbare Verhalten einer Schnittstelle wird zu einem Vertrag, von dem jemand abhängt, sobald es genügend Konsumenten gibt – einschließlich Verhaltensweisen, die Sie nie beabsichtigt haben (Reihenfolge, Nullsetzbarkeit, Fehlerformen, Timing). Behandeln Sie öffentliche Schnittstellen (insbesondere die API/das Schema) als Verträge: Hinzufügen und als veraltet markieren, nicht stillschweigend ändern. Die Vertragstests von graphql-contract-testing fixieren die von Ihnen gewählten Verhaltensweisen; Disziplin schützt die, die Sie nicht gewählt haben.

Kurzreferenz

GeruchBehebung
Abfrage innerhalb einer SchleifeBatch oder Join; Look-Ahead verwenden
List-Endpunkt ohne LimitBegrenzte Paginierung hinzufügen
„Lass mich optimieren“ ohne MessungZuerst profilieren; den wahren Engpass finden
Typ/Nullsetzbarkeit/Reihenfolge eines Felds ändernEs ist eine Vertragsänderung – neu hinzufügen, altes als veraltet markieren
Kein Latenz- oder Bundle-ZielBudget setzen; Regressionen als Fehler behandeln

Durchsetzung: Budgets werden in CI geprüft, wo automatisierbar (Bundle-Größen-Limits, Abfragekosten-Limits); Paginierung und N+1-Vermeidung liegen im Ermessen des Reviewers, unterstützt durch Lasttests und Abfrageplan-Reviews.

Vollständige Begründung: Artikel XI der Verfassung, gebündelt unter engineering-constitution/references/engineering-constitution.md.

Individual skills in this repo

This repo contains 18 individual skills — each has its own dedicated page.

lguidolin/change-hygiene-and-code-craft

Use when writing or refactoring code, structuring a commit or PR, or deciding whether to abstract duplication. Symptoms — mixing reorg with logic changes, a PR doing several things at once, a file growing large, the second copy of similar code, or unsure whether to DRY something up.

lguidolin/cloud-delivery-aks

Use when deploying to Kubernetes or Azure Kubernetes Service (AKS), configuring cloud secrets, setting up progressive rollout/canary, per-PR ephemeral environments, or k8s health probes. Keywords — Kubernetes, AKS, Key Vault, Argo Rollouts, Flagger, canary, blue-green, liveness, readiness, PodDisruptionBudget, HPA, rollback, GHCR.

lguidolin/commit-history-rewrite

Use when an existing repository has messy commit history that needs to conform to conventional commits before adopting release-please, or when intermediate WIP/fixup/merge commits need to be cleaned up.

lguidolin/conventional-commits-and-releases

Use when committing, writing a commit message, opening a PR that will be squash-merged, or configuring automated versioning/changelogs. Keywords — conventional commits, release-please, semver, feat/fix/chore, breaking change, changelog.

lguidolin/defense-in-depth-security

Use when handling untrusted input, secrets, authentication/authorization, or dependencies — or threat-modeling a new surface. Keywords — STRIDE, threat model, least privilege, secrets management, supply chain, dependency scanning, input validation, audit log, defense in depth.

lguidolin/designing-before-building

Use when starting a feature, fixing a non-trivial bug, or about to write implementation code — before any code exists. Symptoms you need this: "this is simple, I'll just code it", reaching for the editor before a design is approved, or an idea that hasn't been turned into a spec and plan.

lguidolin/engineering-constitution

Use when starting work in a project that follows the engineering constitution, orienting to its rules, or deciding which engineering practice applies to a task — spec writing, commits, testing, security, deploys, database, or UI work.

lguidolin/graphql-contract-testing

Use when writing a GraphQL query/mutation that the UI and a test will share, or building route/schema contract or smoke tests. Symptoms — copying a query into a test, a test asserting on query text, schema change that didn't break the UI build, or RLS/permission drift. Keywords — graphql-codegen, typed document, contract test, route smoke test.

lguidolin/init-repo-CI

Use when setting up a new repository with conventional commits, release-please, and CI automation, or when retrofitting an existing repository that lacks automated versioning and PR validation workflows.

lguidolin/interface-craft-and-accessibility

Use when building or styling UI — components, layouts, forms, design tokens — or making accessibility decisions. Keywords — a11y, WCAG, keyboard navigation, focus state, contrast, design system, minimalist UI, component reuse, ARIA, semantic HTML.

lguidolin/merge-gates-and-automation

Use when setting up or changing CI, pre-push hooks, or a task runner, or deciding what must pass before merge. Symptoms — tempted to put authoritative checks only in a local hook, skip CI, bypass with --no-verify, or unsure what gates a merge vs. runs locally.

lguidolin/observability-and-slos

Use when adding logging, metrics, tracing, health checks, SLOs, or alerting — or when building a service surface that needs to be operable and debuggable. Keywords — structured logs, OpenTelemetry, correlation id, RED metrics, liveness, readiness, SLI, SLO, error budget, alerting.

lguidolin/postgres-postgraphile-rls-and-sql

Use when writing PostgreSQL, PostGraphile config, Row-Level Security policies, SQL schema files, or working on the Browser→App→PostGraphile→Postgres data path. Keywords — RLS, SECURITY DEFINER, search_path, pgSettings, grants, roles, GraphQL depth limit, query cost, statement_timeout, SQL file organization.

lguidolin/recording-decisions

Use when a design or architecture decision has been made and needs to be captured — writing a decision record or ADR, updating a decision index, noting a deferred idea, or superseding a past decision. Keywords — ADR, decision record, rationale, rejected alternatives, dependency index.

lguidolin/resilience-and-deploy-safety

Use when planning a deploy, designing a rollback, or responding to an incident or writing a postmortem. Keywords — deploy safety, rollback, immutable artifact, progressive delivery, canary, blast radius, incident response, blameless postmortem, error budget.

lguidolin/ship-it

Use when the user wants to ship work — push, PR, archive decision records, merge, and clean up. Handles the full lifecycle from committing final changes through post-merge cleanup including converting specs/plans to compact decision records.

lguidolin/tests-as-a-control

Use when writing or modifying tests, when a test breaks during a refactor, or when testing permission/role rules. Symptoms — tempted to edit a test to make it pass, testing only the happy path, a deny-test that started passing, flaky tests, or unsure what to assert.

lguidolin/zero-downtime-migrations

Use when changing a database schema where data must survive the change — adding/removing/renaming columns, constraints, indexes, or backfilling. Symptoms — a destructive migration bundled with a code deploy, a NOT NULL column with a backfill, a table-locking UPDATE, or a rename. Keywords — expand/contract, parallel change, backfill, NOT VALID, CREATE INDEX CONCURRENTLY, graphile-migrate.

Verwandte Skills