Por qué personalizar la constitución
La plantilla por defecto de Spec Kit genera una constitución con principios genéricos que funcionan como punto de partida. Sin embargo, cada proyecto tiene un contexto único: un stack tecnológico concreto, convenciones de equipo heredadas, restricciones organizacionales y decisiones arquitectónicas que no pueden capturarse en una plantilla universal.
Una constitución genérica produce un efecto paradójico: principios tan amplios que el agente IA los interpreta de formas diferentes en cada ejecución. Un principio como "el código debe ser mantenible" no proporciona una guía accionable. El agente puede interpretar "mantenible" como añadir comentarios en cada línea, crear abstracciones para todo o simplificar hasta el punto de perder funcionalidad.
La personalización convierte principios genéricos en reglas específicas que el agente IA aplica de forma determinista, reduciendo la variabilidad entre ejecuciones.
El objetivo de la personalización no es reescribir la constitución desde cero, sino adaptar los principios a la realidad del proyecto. Esto implica tres operaciones: modificar artículos existentes para hacerlos más específicos, eliminar artículos que no aplican al contexto del proyecto y añadir artículos nuevos que cubran aspectos no contemplados en la plantilla por defecto.
Adaptar artículos al stack tecnológico
La personalización más directa consiste en concretar los principios genéricos con las tecnologías reales del proyecto. Un principio como "Library-First" tiene implicaciones diferentes en un proyecto Python que en uno TypeScript o Go.
Ejemplo: proyecto Python con FastAPI
Para un proyecto backend en Python con FastAPI, la constitución podría adaptar los principios de la siguiente forma:
/speckit.constitution
@pyproject.toml
Adaptar los principios al stack Python + FastAPI:
- Library-First: cada feature se implementa como un módulo
Python independiente en el directorio libs/. Los módulos
exponen funciones puras que no dependen de FastAPI.
Los routers de FastAPI son una capa fina de adaptación.
- Test-First: usar pytest con pytest-asyncio para tests
async. Fixtures compartidas en conftest.py. Tests de
integración con httpx.AsyncClient contra la app real.
- Simplicity: usar Pydantic para validación de entrada,
dataclasses estándar para modelos internos. No crear
clases base abstractas para los schemas.
- Integration-First: usar testcontainers-python para
PostgreSQL y Redis en tests de integración. No mockear
la base de datos.
Al ejecutar este comando, el agente transforma los principios genéricos en reglas que mencionan herramientas, librerías y patrones concretos. Cada vez que el agente genere código para este proyecto, aplicará pytest (no unittest), usará Pydantic (no validación manual), y estructurará el código en libs/ (no en una estructura monolítica).
Ejemplo: proyecto TypeScript con Next.js
Para un proyecto frontend con Next.js, la adaptación sería diferente:
/speckit.constitution
@package.json @tsconfig.json
Principios para un proyecto Next.js con App Router:
- Library-First: la lógica de negocio va en lib/ como
funciones puras TypeScript. Los componentes de React
solo manejan UI y estado. No lógica de negocio en
componentes.
- Test-First: vitest para tests unitarios de lib/.
Playwright para tests e2e de flujos completos.
Testing Library para tests de componentes.
- Simplicity: usar los patrones nativos de Next.js
(Server Components, Server Actions) antes de añadir
librerías externas de estado o data fetching.
- Anti-Abstraction: no crear HOCs ni wrappers sobre
componentes de Next.js. Usar composición directa.
No crear un "design system" propio si se usa una
librería de componentes existente.
La diferencia entre ambos ejemplos ilustra por qué la personalización es necesaria. Los principios genéricos ("Library-First", "Test-First") se mantienen, pero sus reglas concretas cambian según el ecosistema tecnológico.
Eliminar artículos innecesarios
No todos los artículos de la plantilla por defecto son relevantes para todos los proyectos. Un artículo sobre CLI Interface tiene poco sentido en una aplicación web sin componentes de línea de comandos. Un artículo sobre Integration-First puede ser excesivo para un proyecto que no tiene dependencias externas.
Eliminar artículos innecesarios no es pereza, es higiene de la constitución. Cada artículo que no aplica añade ruido que el agente IA debe procesar e interpretar. En el peor de los casos, un artículo irrelevante puede provocar que el agente genere código innecesario para "cumplir" con un principio que no debería existir.
/speckit.constitution
Este es un proyecto de librería Python sin interfaz
de usuario ni servicios externos.
Eliminar los siguientes principios:
- CLI Interface: no es una herramienta de línea de
comandos
- Integration-First: no hay bases de datos ni APIs
externas
Mantener y reforzar:
- Library-First: es el principio central del proyecto
- Test-First: cobertura al 90% con pytest
- Simplicity: API pública mínima, sin clases cuando
una función baste
Una constitución con cinco artículos precisos es más efectiva que una con diez artículos genéricos. Cada artículo debe ganarse su lugar con una justificación concreta.
Añadir artículos propios
La parte más valiosa de la personalización es la capacidad de crear principios nuevos que reflejen las necesidades específicas del equipo o la organización. Estos principios no están en la plantilla por defecto porque son particulares de cada contexto.
Principios de equipo
Los equipos desarrollan convenciones propias a lo largo del tiempo que conviene codificar en la constitución:
/speckit.constitution
Añadir los siguientes principios específicos del equipo:
- Error Handling: todos los errores se gestionan con
un tipo Result[T, Error] personalizado. No usar
excepciones para flujo de control. Las excepciones
solo capturan errores inesperados del runtime.
- API Versioning: todas las rutas de la API incluyen
el prefijo /api/v1/. Los breaking changes requieren
una nueva versión. Las versiones anteriores se
mantienen durante 6 meses tras el deprecation.
- Naming Conventions: módulos en snake_case, clases
en PascalCase, constantes en UPPER_SNAKE_CASE.
Los nombres de funciones empiezan con verbo:
get_, create_, update_, delete_, validate_, parse_.
Principios organizacionales
En entornos corporativos, la constitución puede incluir restricciones que vienen de la organización, no del equipo de desarrollo:
/speckit.constitution
Restricciones organizacionales:
- Cloud Provider: todo el despliegue se realiza en
AWS. No usar servicios de otros cloud providers.
Preferir servicios serverless (Lambda, DynamoDB,
SQS) sobre instancias EC2.
- Compliance: los datos personales (PII) se cifran
en reposo con AES-256 y en tránsito con TLS 1.3.
Los logs no deben contener datos personales.
- Dependency Policy: solo se permiten dependencias
con licencia MIT, Apache 2.0 o BSD. Las
dependencias con licencia GPL requieren aprobación
del equipo legal.
Principios de dominio
Para proyectos con lógica de dominio compleja, la constitución puede incluir reglas que reflejen las restricciones del negocio:
/speckit.constitution
Reglas de dominio financiero:
- Monetary Precision: todos los cálculos monetarios
usan Decimal con 4 decimales de precisión. No
usar float ni double para cantidades monetarias.
- Audit Trail: cada operación que modifica datos
financieros genera un registro de auditoría
inmutable con timestamp, usuario, operación y
valores antes/después.
- Idempotency: todas las operaciones de pago son
idempotentes. Cada petición incluye un
idempotency_key que previene duplicados.
Buenas prácticas de personalización
La personalización efectiva de la constitución sigue un conjunto de criterios que maximizan la utilidad de cada artículo:
Ser específico y verificable: cada principio debe poder verificarse con un test o una revisión de código. "El código debe ser limpio" no es verificable. "Cada función pública tiene un docstring con al menos un ejemplo de uso" sí lo es.
Evitar contradicciones: los artículos no deben contradecirse entre sí. Si un artículo dice "preferir funciones puras" y otro dice "usar clases para todo", el agente IA no puede cumplir ambos simultáneamente.
Proporcionar contexto de archivos: al ejecutar /speckit.constitution, incluir archivos del proyecto como contexto (@pyproject.toml, @package.json, @tsconfig.json) permite al agente generar principios coherentes con las decisiones técnicas ya tomadas.
Iterar en lugar de definir de golpe: no es necesario definir todos los principios en la primera ejecución. Se puede empezar con los tres o cuatro principios más importantes y añadir el resto a medida que el equipo descubre qué reglas necesita codificar.
flowchart TB
V1["Constitución v1<br>3-4 principios básicos"] --> USO["Uso en specs,<br>planes y tareas"]
USO --> DESC["Descubrir que<br>falta o sobra"]
DESC --> V2["Constitución v2<br>Principios ajustados"]
V2 --> USO2["Uso continuado"]
USO2 --> DESC2["Nuevos<br>descubrimientos"]
DESC2 --> V3["Constitución v3<br>Principios maduros"]
No duplicar lo que dice la especificación: la constitución define principios transversales que aplican a todo el proyecto. Los requisitos específicos de una funcionalidad pertenecen a la especificación de esa feature, no a la constitución. Un principio como "la pantalla de login debe tener validación client-side" no pertenece a la constitución porque es un requisito de una feature concreta.
Documentar la razón de cada principio: cuando un artículo incluye una breve explicación del porqué (su rationale), el agente IA puede tomar mejores decisiones en situaciones no contempladas. Si el principio dice "no usar ORMs" pero no explica por qué, el agente no sabe si la razón es rendimiento, control sobre las queries o preferencia del equipo. Si el principio dice "no usar ORMs porque necesitamos control total sobre las queries SQL para optimizar tiempos de respuesta", el agente tiene contexto para tomar decisiones coherentes cuando surjan situaciones nuevas.
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, GitHub Spec Kit es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de GitHub Spec Kit
Explora más contenido relacionado con GitHub Spec Kit y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
Aprender a adaptar la constitución por defecto de Spec Kit a las necesidades concretas de un equipo, stack tecnológico y restricciones organizacionales, creando principios propios que el agente IA respetará.
Cursos que incluyen esta lección
Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje