Blog / Desarrollo

Kanban para desarrollo de software: guia practica

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 guia cubre desde la configuracion del tablero hasta las metricas avanzadas, con ejemplos reales pensados para equipos de desarrollo de cualquier tamano.

Kanban en desarrollo de software vs Scrum

La comparacion entre Kanban y Scrum es inevitable porque son los dos marcos de trabajo agiles mas 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 duracion fija, generalmente dos semanas. Al inicio del sprint, el equipo selecciona las tareas que se compromete a completar y, en teoria, no se anaden 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 estan listas y se procesan en orden de prioridad. Cuando un desarrollador termina una tarea, toma la siguiente de la cola. No hay ceremonias de planificacion de sprint ni compromisos de entrega por ciclo. Lo que hay es un limite de trabajo en progreso (WIP) que regula cuantas tareas puede tener el equipo en marcha simultaneamente.

Scrum

  • Sprints de duracion fija (1-4 semanas)
  • Roles definidos: Scrum Master, Product Owner
  • Ceremonias: planificacion, 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 segun capacidad
  • Prioridades ajustables en cualquier momento
  • Ideal para mantenimiento, soporte y equipos mixtos

La diferencia practica mas importante es como manejan el trabajo no planificado. En Scrum, si aparece un bug critico en produccion 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 negociacion.

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

Columnas tipicas: Backlog, En desarrollo, Code review, QA, Desplegado

El tablero Kanban para un equipo de desarrollo necesita mas columnas que el tablero generico 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. Aqui 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 esta arriba del todo es la siguiente que debe tomarse. El product owner o el lider tecnico es responsable de mantener esta columna priorizada y de asegurar que cada tarjeta tiene la informacion suficiente para que un desarrollador pueda empezar a trabajar sin necesitar una reunion de aclaracion.

En desarrollo es donde ocurre la escritura de codigo. Cada tarjeta aqui tiene un desarrollador asignado que esta trabajando activamente en ella. Esta es la columna principal donde se aplica el limite WIP. Si tu equipo tiene cuatro desarrolladores, un limite de cuatro o cinco tarjetas en esta columna asegura que cada persona se enfoca en una sola tarea a la vez, con un pequeno margen para tareas que estan esperando respuesta antes de continuar.

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

QA (Quality Assurance o testing) es donde las tareas esperan o estan siendo probadas. Dependiendo de tu equipo, esto puede ser testing manual por un QA dedicado, testing automatizado que necesita verificacion, o testing de aceptacion 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 aqui y frenan las entregas al usuario final.

Desplegado marca el final del ciclo. La tarea esta en produccion y los usuarios pueden acceder a ella. Mover una tarjeta a esta columna es el equivalente a la definicion de "hecho" del equipo. No es "hecho cuando el codigo esta escrito", ni "hecho cuando pasa los tests". Es hecho cuando esta desplegado y funcionando.

Columna opcional: Bloqueado. Algunos equipos anaden una columna o una etiqueta para tarjetas bloqueadas por dependencias externas: esperando una API de otro equipo, esperando una decision 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.

Como descomponer historias de usuario en tarjetas Kanban

Una de las habilidades mas importantes para que Kanban funcione en desarrollo de software es saber descomponer el trabajo en tarjetas del tamano adecuado. Tarjetas demasiado grandes se atascan durante dias en "En desarrollo" sin aparente progreso. Tarjetas demasiado pequenas generan un ruido visual excesivo y un overhead de gestion que no aporta valor.

El tamano ideal de una tarjeta es una unidad de trabajo que un desarrollador pueda completar en uno a tres dias. Si una tarea va a tardar mas de tres dias, probablemente se puede dividir. Si tarda menos de dos horas, probablemente es demasiado pequena y deberia agruparse con otras tareas relacionadas.

La tecnica mas util para descomponer historias de usuario es pensar en cortes verticales. En lugar de dividir "Implementar sistema de notificaciones" en "Disenar modelo de datos", "Crear endpoints de API", "Implementar frontend" y "Escribir tests" (corte horizontal por capas tecnicas), divide por funcionalidad entregable: "Notificacion cuando alguien comenta en tu tarea", "Notificacion 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 tecnicas esten 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 descripcion clara de que debe hacer (no como, sino que), los criterios de aceptacion que definen cuando la tarea esta terminada, y cualquier enlace a documentos de diseno, mockups o especificaciones relevantes. Cuanto mas autocontenida sea la tarjeta, menos interrupciones necesitara el desarrollador para completarla.

Limites WIP en desarrollo: por que son criticos

El limite de trabajo en progreso es el mecanismo que convierte un tablero visual en un verdadero sistema de gestion del flujo. Sin limites WIP, Kanban es simplemente una lista de tareas con un diseno bonito. Con limites 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 reconexion cognitiva que afectan a cualquier trabajador del conocimiento. Ademas tiene que reconstruir mentalmente el modelo del problema que estaba resolviendo: la estructura de datos, las interacciones entre componentes, los edge cases que habia considerado, el punto exacto donde lo dejo. Esto puede tardar una hora o mas para tareas complejas.

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

Los limites WIP tambien revelan problemas sistemicos. Si el equipo tiene un limite de cuatro tarjetas en "En desarrollo" y ese limite se alcanza constantemente mientras la columna de "Code review" acumula tarjetas, el sistema te esta diciendo que necesitas mas capacidad de revision, no mas capacidad de desarrollo. Sin el limite WIP, los desarrolladores simplemente empezarian tareas nuevas mientras las anteriores esperan revision, enmascarando el cuello de botella en lugar de resolverlo.

La recomendacion practica es empezar con un limite igual al numero de desarrolladores del equipo y ajustar despues de dos o tres semanas observando el flujo. Si las tarjetas fluyen bien y nadie esta inactivo esperando capacidad, el limite es correcto. Si hay mucha inactividad, puedes subir el limite ligeramente. Si hay mucho multitasking, baja el limite.

Gestionar bugs y deuda tecnica en el tablero

Uno de los retos mas comunes en equipos de desarrollo es como manejar bugs y deuda tecnica 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 solucion que mejor funciona en la practica es tratar bugs y deuda tecnica 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 tecnica 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 proporcion de cada tipo de trabajo.

Para bugs criticos que afectan a usuarios en produccion, muchos equipos establecen una regla: los bugs P0 (criticos) 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 periodicos.

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

El tablero Kanban hace visible la proporcion real entre funcionalidades, bugs y deuda tecnica. Si al final de un mes observas que el sesenta por ciento de las tarjetas completadas fueron bugs, tienes evidencia objetiva para una conversacion con la direccion sobre la calidad del producto y la necesidad de invertir en estabilidad antes de seguir anadiendo funcionalidades.

Integracion de Kanban con CI/CD y releases

En equipos que practican integracion continua y entrega continua (CI/CD), Kanban encaja de forma natural porque ambos comparten la misma filosofia: flujo continuo de trabajo en lotes pequenos.

La integracion mas 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 automaticamente a "QA" o directamente a "Desplegado" si los tests automatizados cubren la verificacion necesaria. Muchas herramientas de gestion 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 periodicas, el tablero puede incluir una columna adicional: "Listo para release". Las tarjetas que pasan QA se mueven aqui y esperan al proximo ciclo de release. Esto hace visible cuanto trabajo completado esta esperando ser desplegado, lo cual es informacion valiosa para decidir la frecuencia de releases. Si constantemente tienes veinte tarjetas esperando en "Listo para release", quiza deberias hacer releases mas frecuentes.

La relacion entre Kanban y CI/CD va mas alla de la automatizacion del tablero. Ambos incentivan tarjetas pequenas 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 sera dificil de revisar, probar e integrar. Kanban, con su enfasis en el flujo y los lotes pequenos, empuja naturalmente al equipo hacia el tipo de trabajo que CI/CD necesita para funcionar bien.

Kanban para equipos pequenos y startups

Los equipos pequenos de dos a cinco desarrolladores son donde Kanban brilla con mas fuerza, porque la sobrecarga de proceso es minima y los beneficios son inmediatos.

En una startup o un equipo pequeno, 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 verificacion, puedes prescindir de la columna de QA. Si el equipo es tan pequeno 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 pequenos es que no requiere roles adicionales. No necesitas un Scrum Master. No necesitas un product owner a tiempo completo. El CTO o el lider tecnico puede gestionar el backlog en diez minutos al dia, 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 direccion rapidamente. 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 manana si hace falta, sin romper ninguna regla ni generar frustacion en el equipo.

El consejo mas importante para equipos pequenos es mantener el tablero simple. Resiste la tentacion de anadir columnas, etiquetas, swim lanes y automatizaciones desde el primer dia. Empieza con lo minimo, usa el tablero durante un mes, y despues anade complejidad solo donde la necesites. La complejidad innecesaria es el enemigo de la adopcion, y en un equipo pequeno, si una persona deja de usar el tablero, el sistema entero pierde valor.

Metricas: lead time, cycle time, throughput

Kanban genera metricas de flujo que son extraordinariamente utiles 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 produccion. Es la metrica que importa al usuario y al negocio: cuanto tarda una peticion 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 numero; el tablero te dice donde esta el problema.

Cycle time mide el tiempo desde que un desarrollador empieza a trabajar en una tarjeta hasta que esta desplegada. Es la metrica que importa al equipo: cuanto tarda una tarea en cruzar las columnas activas del tablero. Si tu lead time es de quince dias pero tu cycle time es de tres, sabes que las tarjetas pasan doce dias esperando en el backlog antes de que alguien las toque. Eso no es un problema de velocidad de desarrollo, es un problema de priorizacion o de capacidad.

Throughput es simplemente cuantas tarjetas completa el equipo por unidad de tiempo, generalmente por semana. Es la metrica de capacidad del equipo. Si tu throughput es de ocho tarjetas por semana consistentemente, puedes usarlo para estimar cuanto tardara completar un backlog de veinticuatro tarjetas: aproximadamente tres semanas. No es una estimacion perfecta, pero es mucho mas fiable que las estimaciones puntuales que hacemos al principio de un proyecto, porque esta basada en datos reales de rendimiento del equipo.

La combinacion de estas tres metricas te da una imagen completa del rendimiento del equipo. Un throughput alto con un cycle time bajo indica un equipo sano que mueve trabajo rapidamente. 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 limite WIP es demasiado alto o que hay demasiados bloqueos.

Consejo practico: no intentes optimizar las tres metricas a la vez. Empieza midiendo el cycle time y concentrate en reducirlo. Cuando el cycle time baja, el throughput tiende a subir naturalmente porque las tarjetas cruzan el tablero mas rapido y se libera capacidad para tomar nuevas.

Retrospectivas y mejora continua

Kanban no tiene ceremonias obligatorias como Scrum, pero hay una practica que todo equipo de desarrollo deberia adoptar: la retrospectiva periodica centrada en el flujo del tablero.

La frecuencia ideal depende del equipo. Para equipos que estan empezando con Kanban, una retrospectiva semanal de treinta minutos permite ajustar rapido. 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 guian una buena retrospectiva Kanban son:

La mejora continua en Kanban es incremental por diseno. No se trata de hacer grandes cambios cada retrospectiva, sino de identificar un ajuste pequeno, implementarlo, observar el efecto y repetir. Con el tiempo, estos pequenos 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 como funciona Kanban en la practica diaria de un equipo de cuatro desarrolladores en una startup de producto SaaS. El equipo esta formado por Ana (frontend senior), Carlos (backend senior), Lucia (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 (limite WIP: 5), Code review (limite WIP: 4) y Desplegado. Despliegan a produccion varias veces al dia con un pipeline de CI/CD automatizado.

Lunes por la manana. El equipo hace una sincronizacion de diez minutos frente al tablero. El backlog tiene catorce tarjetas priorizadas por el CTO. En desarrollo hay tres tarjetas del viernes: Ana esta terminando un componente de notificaciones en el frontend, Carlos trabaja en un endpoint de API para exportar datos, y Lucia tiene un bug de rendimiento en la pagina de dashboard. David termino su tarea el viernes y la movio a Code review. Hoy empieza con la siguiente tarjeta del backlog: integracion con un servicio de email.

Martes a mediodia. 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.

Miercoles. La columna de "Code review" tiene tres tarjetas: la de Carlos (que termino ayer), la de Lucia (que resolvio el bug) y la de David (que avanzo rapido con la integracion de email). El equipo nota en la sincronizacion matutina que hay un cuello de botella en review. Deciden que Ana y David dedican la primera hora del dia a revisar PRs antes de empezar cualquier tarea nueva. Para las once de la manana, dos de las tres tarjetas estan aprobadas y desplegadas.

Jueves. Un usuario reporta un bug critico: las notificaciones por email se envian duplicadas. El CTO lo clasifica como P0 y lo coloca al frente del tablero. David, que implemento la integracion de email, deja su tarea actual (que no es urgente) temporalmente bloqueada y toma el bug P0. Como conoce el codigo, 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 miercoles se resolvio bien con la regla de "reviews primero" y deciden adoptarla permanentemente como practica del equipo. El cycle time medio de la semana fue de 2.1 dias, ligeramente mejor que las 2.4 dias de la semana anterior. Lucia comenta que le resulta dificil revisar el codigo de backend de Carlos porque no conoce bien esa parte del sistema. Deciden que Carlos hara pair programming con Lucia 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, deteccion temprana de cuellos de botella, capacidad de absorber trabajo urgente sin desmontar la planificacion y mejora incrementar 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 colaboracion en tiempo real. Es gratuito y no requiere configuracion compleja.