Cómo dirijo este producto
Soy desarrollador, tech lead y diseñador, y me he movido al lado de la mesa donde se toman las decisiones. Este es el producto que dirijo: el catálogo público de un pintor en activo y la tubería privada que lo alimenta. Cada requisito dice por qué existe y qué demuestra que sigue funcionando, y la compilación falla cuando una de esas pruebas deja de ser cierta.
- 147
- requisitos, cada uno con un motivo y una prueba
- 180
- versiones publicadas, una línea cada una
- 25
- de ellos admiten no tener prueba automática
- 1
- persona opera todo el sistema
Qué es el producto
Un catálogo de 192 pinturas, escrito como 400 páginas estáticas en inglés y español, de modo que todas se leen sin una sola línea de JavaScript. Detrás, un servicio prepara las fotografías, redacta y traduce un ensayo para cada cuadro, renderiza vídeo para las redes y registra cada obra en Ethereum.
Lo opera una sola persona. Esa restricción decide todo lo que hay en esta página: no hay equipo que absorba una mala decisión, ni QA que atrape una regresión, y nada puede exigir a un humano a las tres de la mañana.
Requisitos que no pueden pudrirse en silencio
Un changelog es un registro del pasado y no puede volverse falso. Un documento de requisitos es una afirmación sobre el presente, y sí puede: en silencio, y casi siempre lo hace.
Por eso cada entrada nombra aquello que la demuestra. Un script lee el archivo antes de cada despliegue y rechaza la compilación si un número se usa dos veces, si una entrada no tiene prueba, si una prueba nombra un archivo borrado o si cita un test que se ha renombrado.
Existe porque cuatro requisitos pasaron quince versiones marcados como «cumplido · demostrado por» unas pruebas borradas varias versiones antes. Nadie mintió. Nadie se dio cuenta. Ese es exactamente el fallo que un documento de requisitos debería impedir y el que peor impide.
También informa —sin tumbar la compilación— de los requisitos cuya única prueba es prosa. Veinticinco de los ciento uno del sitio están en esa lista. Esta página lo dice porque la herramienta lo dice.
Decisiones, y lo que cuestan
No publicar ningún precio
- Elegí
- Una consulta, que responde el artista
- En vez de
- Una lista de precios pública, o una cifra bajo petición
- Lo que cuesta
- Fricción para quien quiere un número ya. Un precio publicado es además un ancla mucho más fácil de poner que de mover. Hay un test que falla si un precio aparece alguna vez en el marcado.
Los ensayos los escribe el modelo más barato
- Elegí
- El modelo que cuesta una quinta parte por ensayo
- En vez de
- El que escribe mejor, medido entre tres y cuatro veces más caro
- Lo que cuesta
- Una prosa que exige más edición. El camino bueno y su plan B se conservaron, así que revertir la decisión es cambiar una variable y no reescribir nada.
Un vídeo cada noche: resolví el extremo equivocado
- Elegí
- Duplicar la frecuencia con que se produce un vídeo
- En vez de
- Mirar qué pasaba con los que ya estaban hechos
- Lo que cuesta
- Nada, y ese es el asunto: seis vídeos terminados esperaban a un humano y solo uno se había publicado nunca. El cuello de botella estaba aguas abajo todo el tiempo. Vale más en esta página que una decisión que salió bien.
Nada irreversible ocurre sin preguntar
- Elegí
- Preguntar siempre, y entender el silencio como un no
- En vez de
- Un ajuste, o una confirmación que se aprende a saltar
- Lo que cuesta
- Una pregunta que el operador responderá cientos de veces. Algunos registros de este producto no se pueden deshacer; una pregunta es más barata que cualquiera de ellos.
Ninguna clave de firma en el servidor
- Elegí
- Firmar cada registro a mano, desde el móvil
- En vez de
- Firma automática, que la tubería podría hacer sola
- Lo que cuesta
- Un paso manual por registro y una cola que lo espera. Un servidor que no puede firmar no puede ser obligado a firmar por quien llegue hasta él.
Medido, no discutido
Las instrucciones para los ensayos se reescribieron este mes a partir de datos y no de gusto. Veintidós ensayos se habían reescrito a mano antes de publicarlos; ciento treinta y seis no. Comparados entre sí, los editados iban de 188 a 633 palabras, mediana 442. Los intactos iban de 613 a 874, mediana 748. Los dos rangos apenas se solapan, y no se diferenciaban en nada más: misma longitud de frase, misma estructura, mismo argumento. Las instrucciones pedían entre 650 y 900 palabras. Ahora piden entre 380 y 560.
Una decisión anterior se corrigió igual. Una búsqueda se relanzaba en cada lectura, así que compilar 186 páginas eran 186 llamadas facturadas a una API de pago, y unos días de compilaciones sumaron unos noventa euros antes de que nadie mirara el contador. Aquello dejó de hacerse, y ahora una comprobación tumba cualquier compilación que llame a una API de pago: el gasto ya no puede repetirse por accidente.
Encontrar el cuello de botella real
157 ensayos escritos. 20 revisados. Solo un ensayo revisado puede publicarse, así que todo lo anterior está automatizado y produciendo mientras todo lo posterior espera a un único paso humano, y el trabajo se había estado yendo en hacer más rápido lo anterior.
Darse cuenta de eso, y decirlo en voz alta en lugar de sacar la siguiente funcionalidad, es el trabajo.
Lo que sigue abierto
- La cola de revisión que lo desbloquearía está diseñada y sin construir.
- 137 ensayos terminados están sin leer, y por tanto sin publicar.
- Veinticinco requisitos no tienen prueba automática y salen listados en cada compilación.
Cómo está hecho esto, sin rodeos
Casi todo el código lo escribe un agente de IA, a partir de una especificación que escribo yo y una revisión que hago yo. Eso es lo importante, no una nota al pie.
Un agente deja encantado que un requisito se pudra, que una abstracción se extienda, que un coste se dispare o que aparezca una funcionalidad que nadie pidió. El archivo de requisitos, las pruebas nombradas y las comprobaciones que tumban una compilación son lo que hace que trabajar así sea seguro. Mi parte es decidir qué se construye, por qué, en qué orden y qué no merece la pena, y poder enseñar el razonamiento después.
Las pruebas
El servicio que hay detrás del catálogo vive en un repositorio privado y, deliberadamente, ni se enlaza ni se describe aquí.