Jira es Turing-completa
(seriot.ch)- Jira Automation puede representar una máquina de Minsky con dos contadores infinitos y un estado finito de instrucciones, lo que permite demostrar la completitud de Turing de Jira
- El estado de un Epic funciona como contador de programa, y la cantidad de Bugs y Tasks enlazados actúa como los dos registros; las reglas de Automation forman la tabla de despacho por instrucción
INCyDECse implementan creando o eliminando issues enlazados, y la bifurcación condicional se decide inspeccionando la cantidad de issues enlazados mediante reglas condicionales JQL- El ejemplo de suma, con
A=2yB=3, reduce Bugs y aumenta Tasks hasta llegar a 5 Tasks y a un estado de detención en una ejecución real sobre*.atlassian.net - El ejemplo de Fibonacci reduce los bucles usando conversión de tipos de issue, y cuando alcanza el límite de profundidad de cadena de 10 de Jira Cloud, puede continuar con un re-disparo manual
Máquina de Minsky construida con automatización de Jira
- Jira Automation puede representar una Minsky register machine con dos contadores infinitos y un número finito de estados de instrucción, por lo que es posible una reducción que demuestra la completitud de Turing de Jira
- El modelo que Minsky demostró en 1967 se compone solo de
INC r; goto Syif r == 0 goto S else (DEC r; goto S') - Los componentes de Jira corresponden a cada elemento de la máquina de Minsky
- Registro A: cantidad de issues Bug enlazados
- Registro B: cantidad de issues Task enlazados
- Contador de programa: estado de un único issue Epic
- Tabla de despacho: reglas de Jira Automation por estado de instrucción
- Reloj: transición disparada por la automatización o re-disparo externo después del límite de cadena
- El estado del Epic codifica la instrucción actual, y las Automation rules inspeccionan la cantidad de issues enlazados para hacer la transición al siguiente estado
INCyDECse implementan creando y eliminando issues enlazados del tipo correspondiente, y la bifurcación condicional se maneja con reglas condicionales JQL
Ejemplos de ejecución y limitaciones
- El programa de suma se compone como un programa de Minsky que reduce
Amientras incrementaB1. if A == 0 goto 3 else (DEC A; goto 2) 2. INC B; goto 1 3. HALT - La implementación mínima se compone de un Epic, 5 issues enlazados y una regla de Automation por cada estado de instrucción
-
Flujo de trabajo y reglas
- En el Workflow de Jira se crean el estado inicial
BACKLOGy luegoTODO,DEV,PROD, configurando que todos los estados puedan transicionar entre sí - Se crea un Epic en estado
BACKLOG - La regla de
TODOimplementaDEC A; if A=0 halt, else goto DEV- Se dispara cuando el estado del Epic cambia a
TODO - Si hay al menos un Bug enlazado, elimina un Bug y transiciona el Epic a
DEV - Si no hay Bugs, transiciona el Epic a
PRODpara detenerse
- Se dispara cuando el estado del Epic cambia a
- La regla de
DEVimplementaINC B; goto TODO- Se dispara cuando el estado del Epic cambia a
DEV - Crea un nuevo Task y lo enlaza al Epic
- Transiciona el Epic a
TODO
- Se dispara cuando el estado del Epic cambia a
- En ambas reglas está activada la opción "Allow rule to trigger other rules"
- En el Workflow de Jira se crean el estado inicial
-
Valores iniciales y resultado
- Se inicializa
A=2,B=3enlazando 2 Bugs y 3 Tasks al Epic - Al transicionar el Epic a
TODO, se ejecuta en cadena el siguiente flujo(2,3) TODO → (1,3) DEV → (1,4) TODO → (0,4) DEV → (0,5) TODO → (0,5) PROD - Se ejecutó en una instancia real de
*.atlassian.net, y al final el Epic llega aPRODcon 0 Bugs y 5 Tasks enlazados - Esta ejecución es el resultado de calcular
2 + 3 = 5con la automatización de Jira
- Se inicializa
-
Configuración de Fibonacci
- Convert Issue Type puede cambiar de inmediato el tipo de un issue, por ejemplo de Bug → Story o de Story → Task
CONVERTpuede expresarse comoDEC + INC, así que no amplía la capacidad computacional, pero reduce la tabla de despacho de los bucles de movimiento y facilita manejar programas más complejos- Fibonacci se expresa como
(A, B) → (B, A+B)y se compone de tres registrosA=Bug,B=Task,C=Storyy tres estadosTODO,QA,DEVTODO: if any linked Task exists: CONVERT Task → Story INC Bug transition to TODO else: transition to QA QA: if any linked Bug exists: CONVERT Bug → Task transition to QA else: transition to DEV DEV: if any linked Story exists: CONVERT Story → Bug transition to DEV else: transition to TODO - El estado inicial es
A=1,B=1,C=0, y enB, que corresponde a la cantidad de Tasks, aparece la sucesión1, 1, 2, 3, 5, 8, 13, ... - A diferencia de la máquina de suma, la máquina de Fibonacci no tiene estado de detención y se ejecuta hasta alcanzar el límite de profundidad de cadena de 10 en Jira Cloud
- Al llegar a ese límite, un operador puede volver a disparar el Epic para continuar, y con una sola edición de estado la ejecución en cadena se reinicia
- Jira Data Center expone
automation.rule.execution.timeouty configuraciones relacionadas como propiedades configurables - Suponiendo creación infinita de issues y ejecución infinita de reglas, el lenguaje de automatización de Jira puede codificar una máquina de dos contadores, y bajo el criterio habitual de que las computadoras físicas también son finitas, las cuotas finitas de Jira Cloud no refutan esta construcción
1 comentarios
Comentarios de Hacker News
Jira es tan absolutamente terrible que tiene el potencial de transformarse en cualquier otra forma de terribilidad
Si Marx hubiera conocido Atlassian, el Grundrisse habría ardido intensamente
Basta con comparar GitHub Issues de 2014 con lo que es ahora: https://github.com/features/issues
Y siguen, siguen, agregando funciones duplicadas
Jira es popular y también tiene buenos wrappers de API para el lenguaje que prefieras
Sorprende que los desarrolladores corporativos con espíritu hacker no hayan automatizado ya la mayor parte de lo que Jira les pide hacer con algo como scripts de línea de comandos en Python
Si logro que sea más de un orden de magnitud más fácil de usar que quienes imponen Jira, el tablero se da vuelta, y Jira se convierte en una herramienta que se empuja para protegerse a sí misma
A veces he usado Jira de forma casi maliciosa, y es excelente para evadir responsabilidades
Cuando surge un problema, basta con decir: “Esto estaba claramente escrito en los cientos de actualizaciones de Jira que puse; sí las estaban leyendo, ¿verdad?”
Ahora que también hay IA, solo hay que unirlo todo con scripts personalizados y dejar que la IA haga el trabajo tedioso de Jira
Muchas veces la API puede hacer cosas que la UI no permite, y como todo el mundo se guía por la UI, uno termina en rincones raros y rotos
Por ejemplo, podrías no darte cuenta de que
custom_field_5537tiene que ir emparejado concustom_field_442para que aparezca en el dashboard de otra personaAdemás,
custom_field_10995dice ser un campo entero y también se devuelve como entero en XML, pero al crear una tarea exige usar una cadena de constante mágica no documentada, y al actualizarla ya no hace faltaLa UI web no hace eso, y en el HTML y en las solicitudes simplemente va un entero, mientras que solo el 80% de la cadena coincide con el texto mostrado en el desplegable
La automatización de Jira fue la peor experiencia de programación que he tenido
Seguro existen configuraciones más simples y hasta pueden ser bastante fáciles, pero aun así es demasiado
Tristemente, el esfuerzo sigue valiendo totalmente la pena. Lo recomiendo muchísimo
Agregábamos a cada ticket un campo de texto personalizado para una descripción legible por humanos, y cuando se desplegaba una release, el script de despliegue llenaba automáticamente la marca de tiempo
Liberábamos un ticket por unidad de trabajo y procesábamos varios tickets al día
Combinado con filtros personalizados, Jira daba un changelog legible por humanos para cada board y para toda la empresa, y esos mensajes se enviaban por Slack al lado de negocio para que todos supieran qué se estaba desplegando
También servía como un registro de auditoría de releases consultable y vinculado a cambios de código
El proceso de despliegue también cambiaba el estado de los tickets en Jira, así que el desarrollador solo tenía que hacer merge del ticket a
mainy quedaba desplegado y completado en JiraTambién había muchos scripts pequeños que generaban automáticamente tickets para trabajos repetitivos
Fue muy sólido durante años, y probablemente siga funcionando hoy
La convención de nombres de los campos personalizados no era gran cosa, pero si el equipo controlaba la configuración de Jira, no era difícil mantener el mismo criterio para todo
Al principio no me gustaba Jira y hace mucho tenía muchos problemas, pero hoy en día, si lo configuras bien, no está tan mal
No lo elegiría para mi propia empresa, pero habiéndolo usado como desarrollador, administrador, usuario final y desarrollador de herramientas internas, una vez que queda configurado y empieza a funcionar, por lo general no estorba
Si le agregas más texto, Jira de alguna manera va a intentar ejecutar automáticamente todo sobre todo ese texto, así que se volverá más lento
Si tu empresa necesita calefacción, usa Jira
Es bastante flexible, y con la IA se ha abierto todavía más
La mayoría de los procesos dependen de Jira, y ciertas transiciones disparan webhooks para automatizaciones
Una de las primeras cosas que hice en cuanto obtuve acceso a IA fue crear un Jira MCP
Ahora trato de casi no tocar Jira directamente, y le pido a Claude que cree issues de Jira, escriba comentarios, cree subtareas, vincule issues, etc.
Antes me daba miedo cada vez que tenía que investigar cómo implementar algo y dividirlo en tareas
Porque mientras más fino lo desglosara, más issues de Jira tenía que crear para contener cada tarea
Ahora simplemente lo organizo todo en un archivo y le dejo el trabajo tedioso de Jira al modelo de lenguaje grande
Volví a un lugar donde había trabajado antes y seguían usando JIRA
En la entrevista, obviamente dije: “Ah, ¿JIRA? ¿Todavía usan eso? Sí, puedo usarlo”
Y sí, realmente podía usarlo, pero ver la versión más reciente de JIRA fue un verdadero shock
Tiene como mil molestias pequeñas, y una de las peores es que cuando intentas seleccionar texto con doble clic, de repente el campo entra en modo de edición
Lo que yo recordaba era JIRA Server 4.0, y aquí se puede revivir ese recuerdo: https://www.jirastrategy.com/wp-content/uploads/2020/04/depl...
Si haces suficiente zoom, cada issue tenía título, tipo, versión corregida, versión afectada, etc., y la estructura llevaba directamente a los comentarios. Era muy simple
Es desesperante. Incluso algo tan básico como la manipulación de texto está mal hecho
Pero un gerente de proyecto dijo que le gustaba
Porque no usa doble clic y arrastre para seleccionar una palabra completa
Como siempre, por la comodidad de gente que apenas sabe usar una computadora, arrastran hacia abajo a los usuarios más hábiles
Me hace pensar si me perdí de algo o si caí en un agujero temporal
No entiendo por qué hablan de Jira como si fuera Visicalc
Ya no trabajo en una empresa de IT, así que tal vez me perdí algún cambio gigantesco en los últimos dos años
Al pasar de 4.x a 6.x, también llegaron esas pequeñas molestias, como las cajas tambaleantes de OFBiz y productos completamente distintos que solo coincidían en la apariencia externa
Esos ingenieros se fueron hace mucho, y también se llevaron sus 280 dólares por acción
El problema central de JIRA es que el poder para configurarlo bien siempre queda en manos de unos pocos, y esas personas están ocupadas, o no les importa, o no lo usan todos los días
Claro, ese no es el único problema
Es inimaginablemente lento, y también tiene restricciones rarísimas, como que un issue no pueda ser padre de otro issue
JIRA es demasiado lento, y los administradores parecían no saber cómo configurarlo bien
Solo con haberlo usado me dejó trauma
Simplemente no existe ni una sola persona en este planeta capaz de configurarla correctamente
No se puede culpar a la herramienta por la incompetencia humana
Ahora, para quién fue hecha, esa ya es una pregunta completamente distinta y no deberíamos discutirla en este momento
En esencia, un sistema de tickets no es más que una base de datos con tickets, relaciones entre tickets y estados
Claro, si tienes muchos tickets enlazados, campos personalizados y plugins, la complejidad puede explotar
Aun así, no entiendo cómo algo que maneja datos de texto simples y archivos adjuntos puede ser tan insoportablemente lento
Por fin ya se puede jugar Doom en Jira
https://mattrickard.com/accidentally-turing-complete
Así que eso explica por qué no se puede determinar si cierta tarea de Jira se va a detener o no
¿Jira también incluye una escopeta de corredera para matar a los demonios que produce como resultado?
En cambio, prueba Azure Boards y terminarás amando JIRA
Porque no existe software en el mundo que Microsoft no pueda empeorar
Me cuesta encontrar palabras que expresen de verdad mi desprecio por Outlook, y decir que “no me gusta” ni siquiera alcanza para empezar
Le cuesta hasta la tarea más básica de recibir y enviar correo
Me llega una notificación de email al celular, abro la app y no hay nada; hago pull-to-refresh y tampoco pasa nada
Normalmente aparece entre 1 y 15 minutos después
Todo lo que haces en Outlook es terriblemente engorroso
También usé Outlook hace mucho, en la época de Office 2003, y no recuerdo que fuera tan malo. No sé cómo lograron retroceder tanto
Y ni quiero empezar con Teams. Ni siquiera entiendo bien qué problema intenta resolver ese programa
Los archivos compartidos están en OneDrive, pero también en Teams y, por alguna razón, también en Outlook
Tuve que mover archivos de respaldo de la computadora, unas imágenes de CloneZilla de alrededor de 30 GB, a OneDrive/Teams/Outlook, y tardó una eternidad, mientras el ventilador de mi laptop Ryzen de 6 núcleos con Win11 estuvo girando como loco todo el tiempo
¿Cómo? ¿Por qué?
Todos los motores de flujo de trabajo y orquestación son Turing completos
Porque su propósito mismo es automatizar el flujo de ejecución
¿O ser reactivados por una persona para continuar desde el punto en que se detuvieron?
Primero, JIRA no es orquestación
Segundo, lo que un flujo de trabajo debe hacer es vincular cierto estado con información externa y facilitar la manipulación de ambas cosas
Para ser Turing completo, necesitas disparadores y reglas, algo como un contador infinito, dos pilas, o una cinta bidireccional
Demuéstrame que estoy equivocado
Me gusta la automatización de Jira
Cuando entro a un equipo nuevo que usa Jira, configuro automatizaciones para sumar automáticamente los story points de subtareas y llenar con eso los story points de la tarea padre, o para mandar automáticamente al backlog los tickets que no tienen suficientes atributos refinados
Por ejemplo, si les falta responsable, story points, prioridad o descripción
Después de un solo sprint, el tablero del equipo queda mucho más ordenado
No sé por qué no viene así por defecto, pero es fácil arreglarlo con automatización
El responsable debería asignarse a quien tome ese trabajo, no ser parte de la etapa de refinamiento