StackPractices
beginner Por Mathias Paulenko

Plantilla de Especificación de Funcionalidad

Una plantilla para escribir especificaciones de funcionalidades claras y accionables que alineen ingeniería, producto y diseño antes de que comience el desarrollo.

Descripción General

Una especificación de funcionalidad (o feature spec) es un documento que alinea a producto, diseño e ingeniería sobre qué construir, por qué importa y cómo saber que está terminada. Evita las conversaciones de «yo pensé que te referías a…» que descarrilan sprints y generan retrabajo. Una buena spec no es un contrato: es un entendimiento compartido que evoluciona a medida que el equipo aprende.

Los problemas de requisitos salen caros: el hallazgo clásico sobre el coste de los defectos dice que un error de requisitos detectado durante la implementación cuesta aproximadamente un orden de magnitud más que uno detectado durante la especificación, y el retrabajo suele estimarse entre el 30 y el 50 % del esfuerzo de un proyecto de software (Standish CHAOS Report). Diez páginas de spec cuestan menos que diez días rehaciendo lo que no era.

Las specs también se están convirtiendo en la entrada de los agentes de código con IA. Una spec bien estructurada —requisitos explícitos, criterios de aceptación, plan de rollout— es exactamente el tipo de entrada que herramientas como GitHub Spec Kit o los flujos de trabajo con agentes aprovechan mejor: la misma estructura que ayuda a las personas ayuda a los agentes a implementar lo que realmente querías decir.

Cuándo Usar

Usa esta plantilla cuando:

  • Una funcionalidad toca varios sistemas, equipos o recorridos de usuario
  • Los responsables de producto y los ingenieros entienden cosas distintas del requisito
  • La funcionalidad tiene casos borde, dependencias o complejidad de rollout no obvios
  • Necesitas estimar el esfuerzo antes de comprometer un sprint
  • Afecta a usuarios, datos o facturación y necesita aprobación explícita
  • Planeas alimentar con la spec a un agente de código y quieres una estructura que pueda seguir

Para etapas previas del ciclo, usa la plantilla de solicitud de funcionalidad para capturar la idea y las historias de usuario para dar forma a los requisitos. Para el diseño de ingeniería que sigue a la aprobación, consulta la plantilla de especificación técnica.

Prerrequisitos

Antes de escribir una especificación de funcionalidad:

  • El objetivo de producto está claro: ¿qué problema resolvemos y para quién?
  • Los stakeholders (producto, ingeniería, diseño, QA) están identificados
  • Las métricas de éxito están definidas: ¿cómo sabremos que la funcionalidad funcionó?
  • Las restricciones están documentadas: tiempo, presupuesto, cumplimiento o limitaciones técnicas
  • Has revisado specs relacionadas para no duplicar ni contradecir trabajo existente

Solución

# Especificación de Funcionalidad: `<Nombre de la Funcionalidad>`

> Autor: ______ | Responsable de producto: ______ | Estado: Borrador / En revisión / Aprobada
> Creada: AAAA-MM-DD | Última actualización: AAAA-MM-DD | Versión objetivo: ______
> Registro de cambios: AAAA-MM-DD — [qué cambió y por qué]

## 1. Resumen

**Problema:** [¿Qué dolor de usuario u oportunidad de negocio aborda?]

**Solución propuesta:** [Descripción de la funcionalidad en un párrafo]

**Criterios de éxito:** [Cómo medimos si la funcionalidad resolvió el problema]

## 2. Objetivos y No Objetivos

### Objetivos
- [Objetivo 1: qué conseguiremos]
- [Objetivo 2]
- [Objetivo 3]

### No Objetivos
- [Lo que explícitamente no haremos en esta versión]
- [Lo que queda fuera de alcance]

## 3. Historias de Usuario

| Usuario | Necesidad | Para que | Prioridad |
|---------|-----------|----------|-----------|
| [Persona] | [Acción] | [Resultado] | P0 / P1 / P2 |
| ______ | ______ | ______ | ______ |

## 4. Requisitos Funcionales

### 4.1 [Área de Requisitos 1]
- **RF-1.1:** [Requisito específico y verificable]
- **RF-1.2:** [Requisito específico y verificable]

### 4.2 [Área de Requisitos 2]
- **RF-2.1:** [Requisito específico y verificable]

## 5. Requisitos No Funcionales

- **Rendimiento:** [ej., tiempo de respuesta p99 < 200 ms]
- **Escalabilidad:** [ej., soportar 10x la carga actual]
- **Disponibilidad:** [ej., 99,9 % durante el rollout]
- **Seguridad:** [ej., datos cifrados en tránsito y en reposo]
- **Accesibilidad:** [ej., conformidad WCAG 2.1 AA]
- **Cumplimiento:** [ej., derecho de borrado GDPR]

## 6. Diseño y UX

- **Figma / mockups:** [Enlace]
- **Copy y localización:** [Enlace o notas]
- **Flujo de interacción:** [Paso a paso o diagrama]
- **Casos borde:** [Estados vacíos, errores, carga, sin conexión]

## 7. Enfoque Técnico

### Arquitectura
[Diagrama o descripción de cómo encaja la funcionalidad en los sistemas existentes]

### Cambios en el Modelo de Datos
[Tablas, campos o cambios de esquema nuevos]

### Cambios de API
[Endpoints nuevos, payloads modificados, plan de compatibilidad hacia atrás]

### Dependencias
[Servicios, librerías o equipos de los que depende la funcionalidad]

### Estrategia de Rollout
- **Fase 1:** [Pruebas internas / alpha]
- **Fase 2:** [Beta con usuarios limitados]
- **Fase 3:** [Disponibilidad general]
- **Plan de rollback:** [Cómo revertir si algo sale mal]

## 8. Criterios de Aceptación

- [ ] [Criterio 1: condición específica y verificable para darlo por terminado]
- [ ] [Criterio 2]
- [ ] [Criterio 3]

## 9. Preguntas Abiertas

| Pregunta | Responsable | Fecha límite |
|----------|-------------|--------------|
| ______ | ______ | ______ |

## 10. Aprobaciones

| Rol | Nombre | Decisión | Fecha |
|-----|--------|----------|-------|
| Producto | ______ | Aprobada / Rechazada | ______ |
| Ingeniería | ______ | Aprobada / Rechazada | ______ |
| Diseño | ______ | Aprobada / Rechazada | ______ |
| QA | ______ | Aprobada / Rechazada | ______ |

## 11. Apéndice

- **Specs relacionadas:** [Enlaces]
- **Contexto histórico:** [Intentos previos, decisiones relacionadas]
- **Glosario:** [Términos que necesitan definición]

Explicación

La plantilla está organizada por audiencia: producto posee el resumen y los objetivos, diseño posee la sección de UX, ingeniería posee el enfoque técnico y QA posee los criterios de aceptación. Separar los requisitos funcionales de los no funcionales evita el error habitual de acordarse del rendimiento, la seguridad o la accesibilidad cuando el desarrollo ya está avanzado. La sección de no objetivos es tu mejor defensa contra el crecimiento de alcance: deja explícito lo que queda fuera antes de que alguien dé por sentado lo contrario.

El ciclo de vida importa tanto como las secciones. Una spec pasa por estados —borrador, revisión, aprobada— pero nunca se congela. Cuando cambia el alcance o una decisión, la spec se actualiza y el cambio queda registrado. Eso es lo que significa en la práctica «documento vivo»:

Ciclo de vida de una spec: Borrador → En revisión → Aprobada → Documento vivo, con vuelta a En revisión cuando cambia el alcance, derivación a la spec técnica tras la aprobación y retirada cuando queda obsoleta.

La aprobación es donde la mayoría de las specs fallan en silencio: una funcionalidad construida sobre consentimiento implícito se convierte en problema del responsable de producto la primera vez que un stakeholder dice «eso no es lo que pedí». La tabla de Aprobaciones obliga a un sí o un no explícito de cada disciplina antes de pasar el estado a Aprobada.

Cómo Rellenar la Plantilla

Recorre las secciones en orden, pero redacta el resumen al final: no puedes comprimir lo que aún no has resuelto.

Resumen (§1). Dos o tres frases para el problema, un párrafo para la solución y criterios de éxito medibles. «Reducir un 30 % los tickets de soporte sobre X» sirve; «mejorar la experiencia de usuario», no. Un stakeholder ocupado debería entender la funcionalidad en sesenta segundos.

Objetivos y no objetivos (§2). Tres objetivos suelen bastar: si hay más, probablemente son dos funcionalidades. Los no objetivos deben nombrar las peticiones que alguien acabará pidiendo; decir ahora que «las notificaciones push móviles son otra funcionalidad» ahorra la discusión después.

Historias de usuario (§3). Mantén el formato Como [persona], quiero [acción] para [resultado] y prioriza sin piedad. P0 significa que la funcionalidad fracasa sin ella. Si todo es P0, nada lo es.

Requisitos (§4–§5). Los requisitos funcionales van numerados y verificables: un ingeniero de QA debe poder derivar un caso de prueba de cada RF sin preguntarte. Los no funcionales no son «nice to have»: palabras vagas como «rápido» se convierten en objetivos medibles como «p99 < 200 ms».

Diseño y enfoque técnico (§6–§7). Enlaza los artefactos de diseño en lugar de incrustarlos, para que se mantengan sincronizados. El enfoque técnico se queda a nivel de arquitectura; el diseño detallado pertenece a la spec técnica que sigue a este documento.

Criterios de aceptación (§8). Cada criterio debe ser binario: un probador puede marcarlo como cumplido o no sin interpretar nada. «El usuario completa el checkout en menos de 3 clics» pasa ese examen; «funciona como se espera», no.

Preguntas abiertas y aprobaciones (§9–§10). Toda pregunta abierta necesita un responsable y una fecha límite; sin ellos, es un riesgo abierto. Rellena la tabla de Aprobaciones en una reunión de revisión: recorre en voz alta el resumen, los objetivos y los requisitos clave, y recoge la aprobación explícita de cada disciplina.

Ejemplo de Especificación de Funcionalidad

# Spec: Notificaciones de Pedido en Tiempo Real

## Resumen
Añadir notificaciones del estado del pedido en tiempo real al
panel del usuario mediante conexiones WebSocket. Los usuarios
verán las actualizaciones del pedido al instante, sin recargar
la página.

## Objetivos
- Reducir un 30 % los tickets de soporte sobre el estado del pedido
- Aumentar la participación del usuario con el panel
- Entregar notificaciones en menos de un segundo

## No Objetivos
- Notificaciones push móviles (funcionalidad aparte)
- Notificaciones por correo (ya implementado)
- Búsqueda en el historial de pedidos (funcionalidad aparte)

## Historias de Usuario
1. Como comprador, quiero ver las actualizaciones del estado del
   pedido en tiempo real para no tener que recargar la página.
2. Como vendedor, quiero saber cuándo se realiza un pedido para
   preparar el envío de inmediato.
3. Como agente de soporte, quiero ver las mismas notificaciones
   para responder con precisión las preguntas de los clientes.

## Requisitos Funcionales
- Conexión WebSocket al cargar el panel
- Reconexión con backoff exponencial al desconectarse
- El payload de la notificación incluye: ID de pedido, estado, fecha y hora
- Las notificaciones aparecen como mensajes toast y en un panel

## Requisitos No Funcionales
- Latencia de entrega de notificaciones: p95 < 500 ms
- Conexiones WebSocket: 10.000 concurrentes
- Fallback a polling si WebSocket falla tras 3 reintentos
- Accesibilidad: notificaciones anunciadas con región ARIA live

## Enfoque Técnico
- Gateway WebSocket: AWS API Gateway WebSocket
- Broker de mensajes: Redis Pub/Sub
- Autenticación: token JWT en los query params de conexión
- Frontend: API WebSocket nativa con wrapper de reconexión

## Cambios de API
- Nuevo endpoint: GET /api/v1/notifications/stream (upgrade WebSocket)
- Nuevo endpoint: GET /api/v1/notifications (fallback REST, polling)
- Sin cambios disruptivos en endpoints existentes

## Estrategia de Rollout
- Fase 1: pruebas internas con 10 usuarios (1 semana)
- Fase 2: beta con el 5 % de usuarios (2 semanas)
- Fase 3: disponibilidad general (monitorizar 1 semana)
- Rollback: desactivar el feature flag de WebSocket; los usuarios vuelven a polling

## Criterios de Aceptación
- [ ] El WebSocket se conecta al cargar el panel
- [ ] Los cambios de estado del pedido aparecen en menos de 500 ms
- [ ] La conexión se recupera sola tras una interrupción de red
- [ ] Las notificaciones son accesibles con lector de pantalla
- [ ] El sistema soporta 10.000 conexiones concurrentes en pruebas de carga

Variantes

ContextoAjustesNotas
Funcionalidad solo de APISustituir la sección de UX por diseño de endpoints, esquemas de payload y plan de versionadoLas API internas también necesitan historias de usuario (el usuario es otro desarrollador)
Funcionalidad de datos / MLAñadir fuentes de datos, pipeline de entrenamiento y métricas de evaluaciónLas specs de ML necesitan seguimiento de experimentos y reproducibilidad
Funcionalidad de seguridadAmpliar los requisitos de seguridad; añadir modelo de amenazas y mapeo de cumplimientoLas de seguridad requieren aprobación explícita del equipo de seguridad
Funcionalidad de plataforma / infraestructuraSustituir historias de usuario por equipos afectados y requisitos de migraciónEl trabajo de plataforma tiene usuarios, pero son equipos internos
Experimento / A/B testAñadir hipótesis, métricas de éxito, tamaño de muestra y criterios de rollbackLos experimentos necesitan criterios de cierre claros
Spec para agentes de código IAEnfatizar RF numerados, criterios de aceptación explícitos y rutas de archivos frente a prosaLos flujos con agentes (p. ej., GitHub Spec Kit) implementan lo que la spec dice literalmente: la ambigüedad se compila

Lo que Funciona

  1. Escribe la spec antes de empezar a programar — el objetivo es un entendimiento compartido, no documentación a posteriori
  2. Mantén el resumen en una página — un stakeholder ocupado debería captar la funcionalidad en 60 segundos
  3. Haz los requisitos verificables — requisitos vagos como «rápido» se convierten en «p99 < 200 ms»
  4. Incluye los no objetivos explícitamente — es tu mejor defensa contra el crecimiento de alcance a mitad de sprint
  5. Revisa la spec con ingeniería antes de estimar — los ingenieros detectan casos borde que producto pasa por alto

Errores Comunes

  1. Escribir la spec en solitario — una spec escrita por producto sin aportación de ingeniería se vuelve ficción
  2. Saltarse los requisitos no funcionales — rendimiento, seguridad y accesibilidad no son opcionales; son requisitos
  3. Dejar criterios de aceptación vagos — «funciona como se espera» no es un criterio; «el usuario completa el checkout en menos de 3 clics» sí lo es
  4. No actualizarla cuando cambia el alcance — las specs que divergen de la realidad despistan a QA, soporte y futuros mantenedores
  5. Olvidar el rollout y el rollback — la funcionalidad no está terminada cuando el código se integra; está terminada cuando los usuarios la usan con éxito
  6. Sin responsable ni cadencia de revisión — una spec huérfana envejece rápido; asigna un responsable y revísala al final de cada sprint que toque la funcionalidad
  7. Prescindir de la aprobación — construir sobre aprobación implícita hace que el primer «eso no es lo que pedí» caiga sobre quien escribió el código

Resolución de Problemas

Estos son los modos de fallo reales de las specs —no son bugs, son problemas de proceso—:

  • Nadie lee la spec. Recorre el documento en una reunión de revisión de 30 minutos en lugar de pegar un enlace. Guárdala donde el equipo ya mira —la wiki del proyecto o enlazada desde el ticket— y referénciala en cada PR que la implemente.
  • La spec y la implementación divergen en silencio. Exige una entrada en el registro de cambios cada vez que cambie el alcance, y convierte «comprobar que la spec sigue coincidiendo con el código» en parte de la definición de terminado.
  • La aprobación se eterniza. Las preguntas abiertas sin responsable ni fecha límite mueren en la tabla. Acota la revisión a una reunión; si un stakeholder falta, recoge su aprobación por escrito esa misma semana.
  • El alcance crece a mitad de sprint. Señala la sección de no objetivos —para eso está. Si el añadido es de verdad necesario, actualiza la spec, vuelve a estimar y registra el cambio en lugar de dejarlo pasar.
  • La spec se escribe después del código. Eso es documentación, no especificación. Sigue teniendo valor para soporte y onboarding, pero programa una spec de verdad la próxima vez: el coste retrospectivo es real.

Puntos Clave

  • El trabajo de una spec es el entendimiento compartido, no el papeleo: escríbela antes de programar y mantenla viva mientras se desarrolla.
  • Los no objetivos y las aprobaciones explícitas son las dos secciones que más discusiones caras evitan.
  • Los requisitos numerados y verificables y los criterios de aceptación binarios son lo que hace una spec útil para QA, para la estimación y para los agentes de código IA.
  • Una spec viva con registro de cambios gana a una spec perfecta que envejece.

Véase También

Preguntas frecuentes

¿Qué extensión debería tener una spec?

La suficiente para eliminar ambigüedad y la suficientemente corta para que la lean. Una funcionalidad simple puede ocupar dos páginas; un cambio de plataforma complejo, diez. El resumen debería caber siempre en una página. Si la spec completa es larga, añade una tabla de contenidos.

¿Quién es el responsable de la spec?

Producto es responsable del problema, los objetivos y los criterios de éxito. Ingeniería, del enfoque técnico y la viabilidad. Diseño, de la UX. El autor —normalmente producto o el tech lead— coordina las revisiones. La aprobación debería requerir la firma de las tres disciplinas antes de pasar el estado a Aprobada.

¿Qué ocurre si los requisitos o el alcance cambian durante el desarrollo?

Actualiza la spec, registra el cambio en el registro de cambios y avisa a los stakeholders. Si el cambio es significativo —requisitos nuevos, otro plazo, otro enfoque—, vuelve a estimar y a priorizar, y confirma la spec actualizada con ingeniería, producto y diseño. La spec es un documento vivo, no un contrato; lo peligroso es la divergencia silenciosa entre lo que hace el código y lo que dice la spec.

¿Cuál es la diferencia entre una spec de funcionalidad, un PRD y una spec técnica?

El PRD es el documento de mayor nivel: oportunidad de mercado, necesidades del usuario, objetivos de negocio y panorama competitivo. La spec de funcionalidad es táctica: enfoque de implementación, requisitos, cambios de API y criterios de aceptación. La spec técnica baja un nivel más: decisiones de arquitectura, modelos de datos y diseño interno, escrita sobre todo por ingeniería. En resumen: el PRD responde «¿por qué construir esto?», la spec de funcionalidad «¿qué vamos a construir?» y la spec técnica «¿cómo funcionará por dentro?». Las funcionalidades grandes pueden tener los tres documentos.

¿Cómo estimamos el trabajo a partir de una spec?

Divide la spec en tareas de ingeniería durante la planificación. Estima cada tarea, identifica dependencias y añade tiempo para pruebas, revisión de código e integración. Añade un margen para imprevistos —normalmente un 20 %— y compara el total con la velocidad del equipo. Si la estimación supera la capacidad del sprint, divide la funcionalidad en incrementos entregables más pequeños. Compara la estimación con lo real tras la entrega para afinar estimaciones futuras.

¿Deberían las specs incluir wireframes o mockups?

Sí, para funcionalidades con cambios de UI orientados al usuario. Los wireframes aclaran la experiencia y evitan malentendidos entre diseño e ingeniería. Enlaza a archivos de Figma o de diseño en lugar de incrustar imágenes, para que se mantengan sincronizados. Para funcionalidades solo de API o backend, incluye esquemas de API y diagramas de secuencia.

¿Cómo conseguimos que los stakeholders lean y aprueben la spec?

Revísala en una reunión con todos los stakeholders antes de empezar la implementación: recorre en voz alta el resumen, los objetivos y los requisitos clave. Tras la reunión, recoge la confirmación explícita de cada disciplina en la tabla de Aprobaciones. Guarda la spec donde el equipo ya mira a diario y referénciala en los pull requests que la implementen.

¿Puedo alimentar con esta spec a un agente de código IA?

Sí, y funciona mejor que los requisitos en prosa suelta. Los flujos de trabajo con agentes implementan lo que el documento dice literalmente, así que los requisitos funcionales numerados, los no objetivos explícitos y los criterios de aceptación binarios de esta plantilla reducen la ambigüedad que un agente rellenaría con suposiciones. Apunta al agente a la spec más las convenciones de tu código, y trata la spec como la fuente de verdad desde la que se genera el código.