Communitygithub.com

lguidolin/rendimiento-y-escala

Útil al trabajar en rutas críticas, listas de endpoints, paginación, acceso a datos en bucles o interfaces/esquemas públicos. Síntomas: consultas sin límite, acceso N+1, sin presupuesto de latencia, optimizar sin medir, o cambiar una interfaz de la que dependen muchos consumidores. Palabras clave: paginación, N+1, Ley de Hyrum, presupuesto de rendimiento, tamaño del bundle.

¿Qué es rendimiento-y-escala?

Esta habilidad define los principios y prácticas para garantizar el rendimiento y la escalabilidad en sistemas de software. Se enfoca en la importancia de establecer presupuestos de rendimiento medibles, como objetivos de latencia o tamaño del bundle, y tratar cualquier regresión como un error. Promueve la optimización basada en datos (perfiles, planes de consulta, trazas) en lugar de optimizaciones especulativas, y establece la paginación como práctica predeterminada para cualquier lista que pueda crecer, evitando riesgos de latencia y denegación de servicio. También aborda patrones de acceso N+1, abogando por operaciones por lotes o joins, y recuerda la Ley de Hyrum: cualquier comportamiento observable de una interfaz se convierte en un contrato del que dependen los consumidores, por lo que los cambios en interfaces públicas deben hacerse añadiendo y deprecando, no modificando silenciosamente. La habilidad es aplicable en revisiones de código, CI y pruebas de carga, y se complementa con los estándares de observabilidad y pruebas de contrato GraphQL.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Rendimiento y Escala

Resumen

El rendimiento es una característica con un presupuesto. Mídelo, delimítalo y respeta que los comportamientos de hoy se convierten en los contratos de mañana. Los sistemas rara vez fallan con el rendimiento para el que fueron diseñados; fallan por la consulta que no indexaste y la lista que no paginaste.

Los Principios

  • Establece presupuestos y mide contra ellos. Objetivos de latencia (vinculados a los SLOs de observability-and-slos) y presupuestos del cliente (p. ej., tamaño del bundle). Una regresión por encima del presupuesto es un error.
  • Mide antes de optimizar. Encuentra el cuello de botella real con datos (perfiles, planes de consulta, trazas) antes de cambiar código. Sin optimización especulativa.
  • Pagina por defecto. Cualquier lista que pueda crecer debe paginarse con un tamaño de página limitado. Los conjuntos de resultados sin límite son un riesgo de latencia y denegación de servicio.
  • Cuidado con los patrones de acceso N+1. Los datos obtenidos en un bucle son la falla de escalabilidad más común; usa operaciones por lotes o joins en su lugar. (En esta pila: usa la capa de GraphQL con look-ahead/DataLoader en lugar de resolución por fila).
  • La Ley de Hyrum es real: todo comportamiento observable de una interfaz se convierte en un contrato del que alguien depende una vez que tiene suficientes consumidores, incluidos comportamientos que nunca planeaste (orden, nulabilidad, formas de error, temporización). Trata las interfaces públicas (especialmente la API/esquema) como contratos: añade y depreca, no cambies en silencio. Las pruebas de contrato de graphql-contract-testing fijan los comportamientos que elegiste; la disciplina protege los que no elegiste.

Referencia Rápida

SíntomaSolución
Consulta dentro de un bucleOperación por lotes o join; usa look-ahead
Endpoint de lista sin límiteAñade paginación con tope

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.

Skills relacionados