🗺️ El Mapa de Estrategia: GitHub Projects y Kanban

“El general que ve el campo de batalla desde arriba vence antes de luchar. En desarrollo, GitHub Projects es tu vista estratégica.” - El Arte de la Gestión de Proyectos

🎯 La Filosofía del Tablero de Batalla

Un proyecto sin visualización es un caos. GitHub Projects transforma issues dispersas en un tablero organizado tipo Kanban:

  • Columnas: Fases del trabajo (To Do, In Progress, Done)
  • Cards: Issues, PRs o notas
  • Movimiento: Arrastrar y soltar entre columnas

Metodologías soportadas:

  • Kanban: Flujo continuo, sin sprints fijos
  • Scrum: Sprints de 2 semanas con milestones
  • Híbrido: Mezcla personalizada

📜 El Camino del Conocimiento

Parte 1: Crear tu Primer Project Board

Desde la interfaz web:

  1. Ve a tu repositorio
  2. Pestaña “Projects” > “New project”
  3. Elige plantilla:
    • Board: Vista Kanban clásica (recomendado para empezar)
    • Table: Vista de hoja de cálculo (para datos densos)
    • Roadmap: Timeline con fechas (para planificación a largo plazo)

Configuración inicial:

Nombre: Sprint 5 - Implementar Dashboard
Descripción: Objetivos del sprint del 1 al 14 de abril
Visibilidad: Private (solo el equipo) o Public

Estructura Kanban básica:

┌─────────────┬─────────────┬─────────────┬──────────┐
│  📥 Backlog │ 🔵 To Do    │ 🟡 In Prog  │ ✅ Done  │
├─────────────┼─────────────┼─────────────┼──────────┤
│ Issue #45   │ Issue #42   │ Issue #38   │ Issue #35│
│ Issue #47   │ Issue #43   │ PR #40      │ PR #36   │
│ Issue #50   │             │             │          │
└─────────────┴─────────────┴─────────────┴──────────┘

Añadir columnas personalizadas:

  • Backlog: Ideas sin priorizar
  • Ready: Listo para tomar (con specs completas)
  • In Progress: Alguien trabajando
  • Code Review: PR abierto, esperando aprobación
  • Testing/QA: Funciona pero necesita validación
  • Done: Fusionado y desplegado

Parte 2: Gestionar Cards (Tarjetas)

Añadir issues existentes:

  1. En el Project, click ”+ Add item”
  2. Selecciona issues del repo
  3. O pega URL de issue: https://github.com/user/repo/issues/42

Crear card directamente:

  1. Click ”+” en cualquier columna
  2. Escribe título rápido: “Investigar bug de cache”
  3. Presiona Enter
  4. Convertir a issue: Click en la card > “Convert to issue”

Metadata en cards:

Cada card puede tener:

Title: Implementar autenticación JWT
Status: In Progress
Assignees: @abraham, @maria
Labels: backend, high-priority
Milestone: v1.0 Launch
Priority: P0
Size: Large (8 story points)
Sprint: Sprint 5

Campos personalizados:

Projects (beta) permite añadir columnas extras:

  • Priority: Dropdown (P0, P1, P2, P3)
  • Size: Number (puntos de historia: 1, 2, 3, 5, 8)
  • Sprint: Text (Sprint 5, Sprint 6)
  • Due Date: Date
  • Owner: Person

Añadir campo custom:

Settings del Project > ”+ New field”

  • Name: Priority
  • Type: Single select
  • Options: P0-Critical, P1-High, P2-Medium, P3-Low

Parte 3: Automatización de Workflows

Automatizaciones nativas de GitHub Projects:

1. Auto-añadir issues nuevas:

Settings > Workflows > “Auto-add to project”

When: An issue is created in this repository
Then: Add to this project in column "Backlog"

2. Auto-mover cuando se cierra issue:

When: Issue is closed
Then: Move to column "Done"

3. Auto-mover cuando se abre PR:

When: Pull request is opened
Then: Move to column "Code Review"

4. Auto-archivar después de X días:

When: Card is in "Done" for 7 days
Then: Archive card

Automatización avanzada con GitHub Actions:

# .github/workflows/project-automation.yml
name: Project Card Automation

on:
  issues:
    types: [opened, assigned]
  pull_request:
    types: [opened, ready_for_review]

jobs:
  add-to-project:
    runs-on: ubuntu-latest
    steps:
      - name: Add issue to project
        uses: actions/add-to-project@v0.3.0
        with:
          project-url: https://github.com/users/abraham/projects/1
          github-token: ${{ secrets.PROJECT_TOKEN }}

Integración con Slack:

# Notificar en Slack cuando card se mueve a "Done"
- name: Notify Slack
  if: github.event.project_card.column_name == 'Done'
  uses: slackapi/slack-github-action@v1.24.0
  with:
    channel-id: '#dev-team'
    slack-message: "✅ Task completada: ${{ github.event.issue.title }}"

Parte 4: Metodologías Ágiles en GitHub

Flujo Kanban (continuo):

Backlog → To Do → In Progress → Review → Done

      Pull diario

Reglas:

  • WIP limit: Máximo 3 cards en “In Progress” por persona
  • Pull, don’t push: Los devs toman tareas cuando terminan
  • Priorizar por columna izquierda (las más viejas primero)

Flujo Scrum (sprints de 2 semanas):

Sprint Planning (Lunes semana 1):
  - Mover cards de Backlog a "Sprint 5"
  - Estimar story points
  - Asignar tareas

Daily Standup (cada mañana):
  - ¿Qué hice ayer? (mover cards)
  - ¿Qué haré hoy? (self-assign)
  - ¿Tengo bloqueos? (añadir label "blocked")

Sprint Review (Viernes semana 2):
  - Demo de features completadas
  - Cerrar sprint milestone

Sprint Retro (Viernes tarde):
  - ¿Qué salió bien? ¿Qué mejorar?
  - Crear issues de mejora de proceso

Vista de Sprint en GitHub:

┌──────────────────────────────────────┐
│ Sprint 5: Dashboard Implementation  │
│ 📅 Apr 1 - Apr 14                    │
│ ⚡ Velocity: 32 / 40 story points   │
│ 🎯 Burndown: On track               │
├──────────────────────────────────────┤
│ □ Issue #42 (5 pts) - In Progress   │
│ ✓ Issue #38 (3 pts) - Done          │
│ □ Issue #45 (8 pts) - To Do         │
└──────────────────────────────────────┘

Parte 5: Vistas y Filtros Avanzados

Filtrar por assignee:

is:issue assignee:@abraham state:open

Filtrar por label:

is:issue label:"high priority" label:bug

Crear vistas guardadas:

  1. Vista “Mis Tareas”:

    Filter: assignee:@me is:open
    Sort: Priority descending
    Group by: Status
  2. Vista “Bugs Críticos”:

    Filter: label:bug label:p0-critical
    Sort: Created (oldest first)
  3. Vista “Este Sprint”:

    Filter: milestone:"Sprint 5"
    Group by: Status

Uso de Insights (Analytics):

Projects (beta) incluye gráficos:

  • Burndown Chart: Progreso del sprint día a día
  • Velocity Chart: Story points completados por sprint
  • Cumulative Flow: Distribución de tareas en columnas
  • Cycle Time: Tiempo promedio desde “To Do” a “Done”

Parte 6: Projects de Organización vs Repositorio

Project de Repo:

  • Solo issues/PRs de ESE repositorio
  • Ideal para proyectos pequeños/individuales

Project de Organización:

  • Agrega issues de MÚLTIPLES repos
  • Ideal para equipos grandes

Crear Project de Organización:

  1. En tu perfil de GitHub > “Organizations”
  2. Elige org > “Projects” > “New project”
  3. Ahora puedes añadir issues de cualquier repo de la org

Ejemplo de uso:

Project: Q1 2026 Roadmap
├─ Repo: frontend-app
│  ├─ Issue #10: Rediseñar navbar
│  └─ PR #12: Migrar a React 18
├─ Repo: backend-api
│  ├─ Issue #5: Optimizar endpoint /users
│  └─ Issue #7: Añadir rate limiting
└─ Repo: mobile-app
   └─ Issue #3: Fix crash en iOS 17

💡 Jutsu Secreto: GitHub CLI para Projects

# Listar projects
gh project list --owner @me

# Ver items de un project
gh project item-list 1 --owner abraham

# Añadir issue a project
gh project item-add 1 --owner abraham --url https://github.com/user/repo/issues/42

# Crear project desde CLI
gh project create --owner abraham --title "Sprint 6"

# Editar campo de un item
gh project item-edit --id ITEM_ID --project-id PROJECT_ID --field-id FIELD_ID --text "In Progress"

Integración con scripts:

#!/bin/bash
# Script: add-all-open-issues-to-project.sh

PROJECT_ID="PVT_123abc"
REPO="abraham/mi-repo"

# Listar issues abiertas
gh issue list --repo $REPO --json number --jq '.[].number' | while read issue_num; do
  issue_url="https://github.com/$REPO/issues/$issue_num"
  gh project item-add $PROJECT_ID --url $issue_url
  echo "Añadido: $issue_url"
done

🎯 Reto Ninja del Tema

Misión: Crear un tablero de proyecto completo

  1. Crea un Project llamado “Ninja Dashboard MVP”
  2. Configura columnas:
    • Backlog
    • Ready (specs completas)
    • In Progress (WIP limit: 3)
    • Code Review
    • Testing
    • Done
  3. Añade 12 issues del repositorio que creaste en módulo 3.4
  4. Distribuye issues:
    • 4 en Backlog
    • 3 en Ready
    • 2 en In Progress
    • 1 en Code Review
    • 2 en Done
  5. Añade campos personalizados:
    • Priority (P0-P3)
    • Size (1, 2, 3, 5, 8 story points)
  6. Configura 2 automatizaciones:
    • Auto-añadir issues nuevas a Backlog
    • Auto-mover a Done cuando issue se cierra
  7. Crea una vista filtrada “High Priority” que muestre solo P0 y P1

Criterios de éxito:

  • ✅ Tienes 6 columnas configuradas
  • ✅ Al menos 10 cards distribuidas
  • ✅ Campos personalizados funcionando
  • ✅ Automatizaciones activas
  • ✅ Vista filtrada guardada

📚 Recursos Adicionales


Siguiente Pergamino: 3.7 Jutsus Automatizados - GitHub Actions

¿Organizaste tu proyecto? Comparte una captura de tu tablero en Discord con #KanbanNinja! 📊🥷