Blog / Desarrollo ·

Por Equipo Heecho

Kanban para desarrollo de software: guía práctica

Si tu equipo de desarrollo busca un sistema flexible para gestionar el trabajo sin las rigideces de los sprints, Kanban es probablemente la respuesta. Esta guía cubre desde la configuración del tablero hasta las métricas avanzadas, con ejemplos reales pensados para equipos de desarrollo de cualquier tamaño.

Kanban en desarrollo de software vs Scrum

La comparación entre Kanban y Scrum es inevitable porque son los dos marcos de trabajo ágiles más utilizados en desarrollo de software. Pero no son enemigos: son herramientas diferentes para contextos diferentes, y muchos equipos terminan adoptando elementos de ambos.

Scrum organiza el trabajo en sprints de duración fija, generalmente dos semanas. Al inicio del sprint, el equipo selecciona las tareas que se compromete a completar y, en teoría, no se añaden tareas nuevas hasta que termine el sprint. Esto funciona muy bien para equipos que desarrollan producto con un roadmap definido y relativamente estable. La predictibilidad del sprint permite planificar entregas y gestionar expectativas de los stakeholders.

Kanban, en cambio, trabaja con un flujo continuo. No hay sprints. Las tareas entran al tablero cuando están listas y se procesan en orden de prioridad. Cuando un desarrollador termina una tarea, toma la siguiente de la cola. No hay ceremonias de planificación de sprint ni compromisos de entrega por ciclo. Lo que hay es un límite de trabajo en progreso (WIP) que regula cuántas tareas puede tener el equipo en marcha simultáneamente.

Scrum

  • Sprints de duración fija (1-4 semanas)
  • Roles definidos: Scrum Master, Product Owner
  • Ceremonias: planificación, daily, review, retro
  • Compromiso de entrega por sprint
  • Cambios limitados durante el sprint
  • Ideal para desarrollo de producto planificado

Kanban

  • Flujo continuo, sin iteraciones fijas
  • Sin roles obligatorios adicionales
  • Reuniones opcionales y adaptables
  • Entrega continua según capacidad
  • Prioridades ajustables en cualquier momento
  • Ideal para mantenimiento, soporte y equipos mixtos

La diferencia práctica más importante es cómo manejan el trabajo no planificado. En Scrum, si aparece un bug crítico en producción a mitad de sprint, el equipo tiene un dilema: o lo mete en el sprint actual sacrificando otra tarea comprometida, o espera al siguiente sprint. En Kanban, simplemente se coloca la tarjeta del bug con prioridad alta al frente de la cola y el siguiente desarrollador que termine su tarea actual lo toma. Sin conflicto, sin negociación.

Por eso, Kanban es especialmente popular en equipos que combinan desarrollo de funcionalidades nuevas con mantenimiento, corrección de bugs y soporte. Si tu día a día es impredecible, si las prioridades cambian a menudo o si gestionas un producto en producción con usuarios reales que reportan problemas constantemente, Kanban te da la flexibilidad que Scrum no puede ofrecer sin forzar sus reglas.

Columnas típicas: Backlog, En desarrollo, Code review, QA, Desplegado

El tablero Kanban para un equipo de desarrollo necesita más columnas que el tablero genérico de tres columnas, porque el flujo de trabajo en software tiene fases bien definidas que vale la pena hacer visibles.

Backlog es la columna de entrada. Aquí viven todas las tareas priorizadas y listas para ser tomadas por un desarrollador. No es un vertedero de ideas: es una cola ordenada por prioridad. La tarea que está arriba del todo es la siguiente que debe tomarse. El product owner o el líder técnico es responsable de mantener esta columna priorizada y de asegurar que cada tarjeta tiene la información suficiente para que un desarrollador pueda empezar a trabajar sin necesitar una reunión de aclaración.

En desarrollo es donde ocurre la escritura de código. Cada tarjeta aquí tiene un desarrollador asignado que está trabajando activamente en ella. Esta es la columna principal donde se aplica el límite WIP. Si tu equipo tiene cuatro desarrolladores, un límite de cuatro o cinco tarjetas en esta columna asegura que cada persona se enfoca en una sola tarea a la vez, con un pequeño margen para tareas que están esperando respuesta antes de continuar.

Code review es una columna que muchos equipos subestiman pero que resulta crítica para la calidad del código y para el flujo del tablero. Cuando un desarrollador termina de escribir el código y abre un pull request, mueve la tarjeta a esta columna. Esto hace visible una realidad que a menudo se ignora: hay código terminado esperando revisión. Si esta columna acumula muchas tarjetas, el cuello de botella está claro y el equipo puede actuar, por ejemplo, dedicando un bloque de tiempo cada día a revisar pull requests antes de empezar tareas nuevas.

QA (Quality Assurance o testing) es donde las tareas esperan o están siendo probadas. Dependiendo de tu equipo, esto puede ser testing manual por un QA dedicado, testing automatizado que necesita verificación, o testing de aceptación por parte del product owner. Esta columna revela otro cuello de botella habitual: si el equipo de QA no tiene suficiente capacidad, las tarjetas se acumulan aquí y frenan las entregas al usuario final.

Desplegado marca el final del ciclo. La tarea está en producción y los usuarios pueden acceder a ella. Mover una tarjeta a esta columna es el equivalente a la definición de "hecho" del equipo. No es "hecho cuando el código está escrito", ni "hecho cuando pasa los tests". Es hecho cuando está desplegado y funcionando.

Columna opcional: Bloqueado. Algunos equipos añaden una columna o una etiqueta para tarjetas bloqueadas por dependencias externas: esperando una API de otro equipo, esperando una decisión de producto, esperando acceso a un servidor. Hacer visible el trabajo bloqueado evita que estas tarjetas se olviden en silencio mientras el desarrollador asignado pasa a otra cosa.

Cómo descomponer historias de usuario en tarjetas Kanban

Una de las habilidades más importantes para que Kanban funcione en desarrollo de software es saber descomponer el trabajo en tarjetas del tamaño adecuado. Tarjetas demasiado grandes se atascan durante días en "En desarrollo" sin aparente progreso. Tarjetas demasiado pequeñas generan un ruido visual excesivo y un overhead de gestión que no aporta valor.

El tamaño ideal de una tarjeta es una unidad de trabajo que un desarrollador pueda completar en uno a tres días. Si una tarea va a tardar más de tres días, probablemente se puede dividir. Si tarda menos de dos horas, probablemente es demasiado pequeña y debería agruparse con otras tareas relacionadas.

La técnica más útil para descomponer historias de usuario es pensar en cortes verticales. En lugar de dividir "Implementar sistema de notificaciones" en "Diseñar modelo de datos", "Crear endpoints de API", "Implementar frontend" y "Escribir tests" (corte horizontal por capas técnicas), divide por funcionalidad entregable: "Notificación cuando alguien comenta en tu tarea", "Notificación cuando te asignan una tarea", "Pantalla de historial de notificaciones". Cada corte vertical es una pieza de funcionalidad completa que puede ser desplegada y usada independientemente.

Esta forma de dividir tiene una ventaja enorme: cada tarjeta produce valor visible para el usuario cuando se completa. No necesitas esperar a que las cuatro capas técnicas estén terminadas para poder entregar algo. Y si las prioridades cambian a mitad del trabajo, tienes funcionalidades completas entregadas en lugar de cuatro capas a medio terminar que no sirven para nada por separado.

Para cada tarjeta, incluye al menos: una descripción clara de qué debe hacer (no cómo, sino qué), los criterios de aceptación que definen cuándo la tarea está terminada, y cualquier enlace a documentos de diseño, mockups o especificaciones relevantes. Cuanto más autocontenida sea la tarjeta, menos interrupciones necesitará el desarrollador para completarla.

Límites WIP en desarrollo: por qué son críticos

El límite de trabajo en progreso es el mecanismo que convierte un tablero visual en un verdadero sistema de gestión del flujo. Sin límites WIP, Kanban es simplemente una lista de tareas con un diseño bonito. Con límites WIP, es una herramienta que activamente mejora la productividad del equipo.

En desarrollo de software, el coste del cambio de contexto es especialmente alto. Cuando un desarrollador interrumpe una tarea para empezar otra, no solo pierde los 15-25 minutos de reconexión cognitiva que afectan a cualquier trabajador del conocimiento. Además tiene que reconstruir mentalmente el modelo del problema que estaba resolviendo: la estructura de datos, las interacciones entre componentes, los edge cases que había considerado, el punto exacto donde lo dejó. Esto puede tardar una hora o más para tareas complejas.

Un límite WIP de una tarea por desarrollador puede parecer extremo, pero es el ideal al que aspirar. Significa que cada persona está completamente enfocada en una sola cosa hasta terminarla. En la práctica, muchos equipos usan un límite de 1.5 por persona (redondeado hacia arriba) para permitir que un desarrollador tenga una tarea secundaria en espera cuando su tarea principal está bloqueada por una review o una dependencia.

Los límites WIP también revelan problemas sistémicos. Si el equipo tiene un límite de cuatro tarjetas en "En desarrollo" y ese límite se alcanza constantemente mientras la columna de "Code review" acumula tarjetas, el sistema te está diciendo que necesitas más capacidad de revisión, no más capacidad de desarrollo. Sin el límite WIP, los desarrolladores simplemente empezarían tareas nuevas mientras las anteriores esperan revisión, enmascarando el cuello de botella en lugar de resolverlo.

La recomendación práctica es empezar con un límite igual al número de desarrolladores del equipo y ajustar después de dos o tres semanas observando el flujo. Si las tarjetas fluyen bien y nadie está inactivo esperando capacidad, el límite es correcto. Si hay mucha inactividad, puedes subir el límite ligeramente. Si hay mucho multitasking, baja el límite.

Gestionar bugs y deuda técnica en el tablero

Uno de los retos más comunes en equipos de desarrollo es cómo manejar bugs y deuda técnica dentro del mismo tablero donde se gestionan las funcionalidades nuevas. Si los ignoras, se acumulan hasta que el producto se vuelve inmantenible. Si les das la misma prioridad que a las funcionalidades, nunca entregas nada nuevo.

La solución que mejor funciona en la práctica es tratar bugs y deuda técnica como tarjetas normales del backlog, pero con etiquetas o colores que permitan distinguirlas visualmente. Un bug se etiqueta como "Bug" con color rojo. Una tarea de deuda técnica se etiqueta como "Tech debt" con color amarillo. Las funcionalidades nuevas se etiquetan como "Feature" con color verde o azul. Esto permite que todas compitan por prioridad en la misma cola, pero que el equipo pueda ver de un vistazo la proporción de cada tipo de trabajo.

Para bugs críticos que afectan a usuarios en producción, muchos equipos establecen una regla: los bugs P0 (críticos) entran directamente en "En desarrollo" sin pasar por la cola del backlog. Esto rompe el flujo normal, pero es un compromiso necesario. Los bugs P1 y P2 se priorizan en el backlog junto con el resto del trabajo. Los bugs P3 y menores se acumulan y se abordan en bloques periódicos.

Para la deuda técnica, una estrategia probada es la regla del 20 por ciento: el equipo dedica aproximadamente una de cada cinco tarjetas a reducir deuda técnica. Esto se puede implementar de forma simple: de cada cinco tarjetas que el equipo toma del backlog, una debe ser de deuda técnica. No es una regla rígida, pero establece una expectativa clara de que la salud del código es una prioridad permanente, no algo que se aplaza indefinidamente.

El tablero Kanban hace visible la proporción real entre funcionalidades, bugs y deuda técnica. Si al final de un mes observas que el sesenta por ciento de las tarjetas completadas fueron bugs, tienes evidencia objetiva para una conversación con la dirección sobre la calidad del producto y la necesidad de invertir en estabilidad antes de seguir añadiendo funcionalidades.

Integración de Kanban con CI/CD y releases

En equipos que practican integración continua y entrega continua (CI/CD), Kanban encaja de forma natural porque ambos comparten la misma filosofía: flujo continuo de trabajo en lotes pequeños.

La integración más directa es vincular el movimiento de tarjetas en el tablero con los eventos del pipeline de CI/CD. Cuando un desarrollador abre un pull request, la tarjeta se mueve a "Code review". Cuando el PR se aprueba y se mergea, la tarjeta se mueve automáticamente a "QA" o directamente a "Desplegado" si los tests automatizados cubren la verificación necesaria. Muchas herramientas de gestión de proyectos permiten estas automatizaciones mediante integraciones con GitHub, GitLab o Bitbucket.

Para equipos que no hacen despliegue continuo sino que agrupan cambios en releases periódicas, el tablero puede incluir una columna adicional: "Listo para release". Las tarjetas que pasan QA se mueven aquí y esperan al próximo ciclo de release. Esto hace visible cuánto trabajo completado está esperando ser desplegado, lo cual es información valiosa para decidir la frecuencia de releases. Si constantemente tienes veinte tarjetas esperando en "Listo para release", quizá deberías hacer releases más frecuentes.

La relación entre Kanban y CI/CD va más allá de la automatización del tablero. Ambos incentivan tarjetas pequeñas y entregas frecuentes. Una tarjeta que representa dos semanas de trabajo es incompatible con CI/CD porque implica un branch enorme con muchos cambios que será difícil de revisar, probar e integrar. Kanban, con su énfasis en el flujo y los lotes pequeños, empuja naturalmente al equipo hacia el tipo de trabajo que CI/CD necesita para funcionar bien.

Kanban para equipos pequeños y startups

Los equipos pequeños de dos a cinco desarrolladores son donde Kanban brilla con más fuerza, porque la sobrecarga de proceso es mínima y los beneficios son inmediatos.

En una startup o un equipo pequeño, probablemente no necesitas las cinco columnas completas del tablero corporativo. Un tablero de tres o cuatro columnas suele ser suficiente: Backlog, En desarrollo, En review y Desplegado. Si no tienes un QA dedicado y los tests automatizados cubren la verificación, puedes prescindir de la columna de QA. Si el equipo es tan pequeño que las reviews se hacen al momento, puedes fusionar "En review" con "En desarrollo" usando una etiqueta para marcar las tarjetas que esperan review.

La ventaja principal de Kanban para equipos pequeños es que no requiere roles adicionales. No necesitas un Scrum Master. No necesitas un product owner a tiempo completo. El CTO o el líder técnico puede gestionar el backlog en diez minutos al día, y el tablero se encarga del resto. Para una startup donde cada persona cuenta, no dedicar una persona a un rol de proceso es una ventaja competitiva real.

Otra ventaja crucial es la capacidad de cambiar de dirección rápidamente. Las startups pivotean, experimentan y reaccionan al feedback del mercado constantemente. Un sprint de dos semanas con compromisos fijos es un lujo que muchas startups no se pueden permitir. Kanban permite repriorizar el backlog cada mañana si hace falta, sin romper ninguna regla ni generar frustración en el equipo.

El consejo más importante para equipos pequeños es mantener el tablero simple. Resiste la tentación de añadir columnas, etiquetas, swim lanes y automatizaciones desde el primer día. Empieza con lo mínimo, usa el tablero durante un mes, y después añade complejidad solo donde la necesites. La complejidad innecesaria es el enemigo de la adopción, y en un equipo pequeño, si una persona deja de usar el tablero, el sistema entero pierde valor.

Métricas: lead time, cycle time, throughput

Kanban genera métricas de flujo que son extraordinariamente útiles para equipos de desarrollo, y la buena noticia es que surgen de forma natural del uso del tablero, sin necesidad de tracking manual.

Lead time mide el tiempo total desde que una tarjeta entra al backlog hasta que se despliega en producción. Es la métrica que importa al usuario y al negocio: cuánto tarda una petición en convertirse en funcionalidad disponible. Un lead time largo no significa necesariamente que el equipo sea lento. Puede significar que las tarjetas pasan mucho tiempo en el backlog esperando ser priorizadas, o que el proceso de review es lento, o que las releases son infrecuentes. El lead time te da el número; el tablero te dice dónde está el problema.

Cycle time mide el tiempo desde que un desarrollador empieza a trabajar en una tarjeta hasta que está desplegada. Es la métrica que importa al equipo: cuánto tarda una tarea en cruzar las columnas activas del tablero. Si tu lead time es de quince días pero tu cycle time es de tres, sabes que las tarjetas pasan doce días esperando en el backlog antes de que alguien las toque. Eso no es un problema de velocidad de desarrollo, es un problema de priorización o de capacidad.

Throughput es simplemente cuántas tarjetas completa el equipo por unidad de tiempo, generalmente por semana. Es la métrica de capacidad del equipo. Si tu throughput es de ocho tarjetas por semana consistentemente, puedes usarlo para estimar cuánto tardará completar un backlog de veinticuatro tarjetas: aproximadamente tres semanas. No es una estimación perfecta, pero es mucho más fiable que las estimaciones puntuales que hacemos al principio de un proyecto, porque está basada en datos reales de rendimiento del equipo.

La combinación de estas tres métricas te da una imagen completa del rendimiento del equipo. Un throughput alto con un cycle time bajo indica un equipo sano que mueve trabajo rápidamente. Un throughput alto con un cycle time alto puede indicar que el equipo tiene muchas cosas en marcha pero tarda en terminar cada una, lo cual sugiere que el límite WIP es demasiado alto o que hay demasiados bloqueos.

Consejo práctico: no intentes optimizar las tres métricas a la vez. Empieza midiendo el cycle time y concéntrate en reducirlo. Cuando el cycle time baja, el throughput tiende a subir naturalmente porque las tarjetas cruzan el tablero más rápido y se libera capacidad para tomar nuevas.

Retrospectivas y mejora continua

Kanban no tiene ceremonias obligatorias como Scrum, pero hay una práctica que todo equipo de desarrollo debería adoptar: la retrospectiva periódica centrada en el flujo del tablero.

La frecuencia ideal depende del equipo. Para equipos que están empezando con Kanban, una retrospectiva semanal de treinta minutos permite ajustar rápido. Para equipos maduros, una vez cada dos semanas o una vez al mes puede ser suficiente. Lo importante es que sea un espacio dedicado a observar el tablero con perspectiva y hacerse preguntas concretas.

Las preguntas que guían una buena retrospectiva Kanban son:

La mejora continua en Kanban es incremental por diseño. No se trata de hacer grandes cambios cada retrospectiva, sino de identificar un ajuste pequeño, implementarlo, observar el efecto y repetir. Con el tiempo, estos pequeños ajustes acumulados producen mejoras sustanciales en la capacidad del equipo para entregar software de forma predecible y sostenible.

Ejemplo real: sprint de un equipo de cuatro desarrolladores

Veamos cómo funciona Kanban en la práctica diaria de un equipo de cuatro desarrolladores en una startup de producto SaaS. El equipo está formado por Ana (frontend senior), Carlos (backend senior), Lucía (fullstack junior) y David (fullstack mid). No tienen QA dedicado; los tests automatizados y las reviews cruzadas cubren la calidad.

Su tablero tiene cuatro columnas: Backlog, En desarrollo (límite WIP: 5), Code review (límite WIP: 4) y Desplegado. Despliegan a producción varias veces al día con un pipeline de CI/CD automatizado.

Lunes por la mañana. El equipo hace una sincronización de diez minutos frente al tablero. El backlog tiene catorce tarjetas priorizadas por el CTO. En desarrollo hay tres tarjetas del viernes: Ana está terminando un componente de notificaciones en el frontend, Carlos trabaja en un endpoint de API para exportar datos, y Lucía tiene un bug de rendimiento en la página de dashboard. David terminó su tarea el viernes y la movió a Code review. Hoy empieza con la siguiente tarjeta del backlog: integración con un servicio de email.

Martes a mediodía. Ana termina su componente y abre un pull request. Mueve su tarjeta a "Code review". Carlos, que tiene experiencia en frontend, revisa el PR durante su pausa antes de comer. Encuentra un problema de accesibilidad en los colores de los estados, deja un comentario y sigue con su tarea. Ana corrige el problema en veinte minutos, Carlos lo aprueba, y los tests automatizados pasan. La tarjeta se mueve a "Desplegado". Ana toma la siguiente tarjeta del backlog.

Miércoles. La columna de "Code review" tiene tres tarjetas: la de Carlos (que terminó ayer), la de Lucía (que resolvió el bug) y la de David (que avanzó rápido con la integración de email). El equipo nota en la sincronización matutina que hay un cuello de botella en review. Deciden que Ana y David dedican la primera hora del día a revisar PRs antes de empezar cualquier tarea nueva. Para las once de la mañana, dos de las tres tarjetas están aprobadas y desplegadas.

Jueves. Un usuario reporta un bug crítico: las notificaciones por email se envían duplicadas. El CTO lo clasifica como P0 y lo coloca al frente del tablero. David, que implementó la integración de email, deja su tarea actual (que no es urgente) temporalmente bloqueada y toma el bug P0. Como conoce el código, lo diagnostica y corrige en tres horas. Carlos revisa el fix inmediatamente, pasa los tests y se despliega antes de terminar la jornada. David vuelve a su tarea anterior.

Viernes. El equipo hace una mini retrospectiva de quince minutos. Observan que completaron nueve tarjetas esta semana (buen throughput), que el cuello de botella de reviews del miércoles se resolvió bien con la regla de "reviews primero" y deciden adoptarla permanentemente como práctica del equipo. El cycle time medio de la semana fue de 2.1 días, ligeramente mejor que las 2.4 días de la semana anterior. Lucía comenta que le resulta difícil revisar el código de backend de Carlos porque no conoce bien esa parte del sistema. Deciden que Carlos hará pair programming con Lucía una hora a la semana para transferir conocimiento.

Este ejemplo ilustra lo que Kanban hace bien en desarrollo de software: flujo continuo con visibilidad total, detección temprana de cuellos de botella, capacidad de absorber trabajo urgente sin desmontar la planificación y mejora incremental basada en datos reales.

Si tu equipo de desarrollo quiere probar Kanban con un tablero sencillo y colaborativo, Heecho te permite crear tu tablero en minutos, con columnas personalizables, temas para diferentes proyectos y colaboración en tiempo real. Es gratuito y no requiere configuración compleja.