Koyere Solutions
Dev Standards · v1.1.0

Git Team
Workflow
Guide

Normas, procesos y buenas prácticas para equipos de desarrollo que trabajan con Git y Trello.

versión 1.1.0
idioma Español
stack Git + Trello

Flujo General del Equipo

Todo trabajo nace en Trello y termina en producción vía Pull Request. Ningún cambio al código llega a main sin haber pasado por este pipeline completo.

Trello📋 Backlog
Trello🔍 En análisis
Trello⚡ En desarrollo
Git🌿 Feature branch
Git🔀 Pull Request
Trello👀 En revisión
Git✅ Merged a main
ℹ️

Principio base: el estado de la tarjeta en Trello debe reflejar siempre el estado real del trabajo. Si una tarea está en desarrollo, la tarjeta está en "En desarrollo". Si está en PR abierto, pasa a "En revisión".


Integración con Trello

Trello es el punto de partida y cierre de todo trabajo. El tablero tiene columnas fijas que representan el ciclo de vida de cada tarea.

Columnas del tablero

ColumnaSignificadoResponsable
BacklogIdeas y tareas pendientes de priorizarPM / Lead
En análisisTarea siendo estimada o con dudas por resolverDev asignado
ReadyTarea clara, estimada y lista para desarrollarsePM / Lead
En desarrolloDev trabajando activamente. Ya existe su branchDev asignado
En revisiónPR abierto esperando aprobaciónReviewer
QA / TestingMergeado a develop, en pruebasQA / Dev
DoneMergeado a main y en producción

Reglas de las tarjetas

Naming convention de tarjetas

Formato del ID

Configura el prefijo del proyecto en Trello (ej: KY para Koyere) y usa numeración incremental: KY-1, KY-2, etc. Para obtener IDs numéricos automáticos en Trello, activa el Power-Up Card Numbers desde el menú del tablero. Este ID es la referencia que une Trello ↔ Git.


Etiquetas de Trello

Cada etiqueta responde una pregunta distinta de un vistazo. Si dos etiquetas dicen lo mismo, una sobra. Se usan en combinación: tipo + prioridad + estado especial.

Por tipo de trabajo — ¿qué es esto?

EtiquetaColorCuándo usarla
feature🔵 AzulNueva funcionalidad para el usuario
bug🔴 RojoAlgo roto que hay que arreglar
hotfix🟠 NaranjaBug crítico que está afectando producción ahora
refactor🟣 MoradoMejora interna sin cambio visible al usuario
docs⚪ GrisDocumentación, README, guías internas
design🩷 RosaTarea de UI/UX previa al desarrollo
devops🟡 AmarilloInfraestructura, CI/CD, Docker, servidores
chore⬛ NegroDependencias, limpieza, configuración general

Por prioridad — ¿qué tan urgente es?

EtiquetaColorCriterio
🔥 crítico🔴 RojoBloquea el negocio o afecta producción. Máximo 1 a la vez.
alta prioridad🟠 NaranjaDebe entrar en el sprint actual
normal🔵 AzulPrioridad estándar, entra cuando haya espacio
cuando haya tiempo⚫ GrisNice-to-have, no bloquea nada
⚠️

Regla de prioridades: si hay más de 2 tarjetas con 🔥 crítico al mismo tiempo, el sistema de prioridades perdió sentido. Hay que re-evaluar en equipo.

Por estado especial — ¿hay algo que me detenga?

EtiquetaSignificado
🚧 bloqueadoDepende de otra tarea, persona externa o decisión pendiente
⏳ esperando clienteEl dev terminó su parte, falta respuesta o aprobación del cliente
🔁 revisión técnicaNecesita discusión de arquitectura antes de arrancar
⚠️ deuda técnicaSe sabe que la solución no es ideal; hay que volver a esto

Por módulo o contexto

Para proyectos con múltiples áreas o clientes en el mismo tablero, agregar etiquetas de contexto de color neutro:

Ejemplos por proyecto

auth pagos api mobile backend frontend infra cliente-ukri cliente-xyz

Sistema recomendado — set mínimo

# Una tarjeta bien etiquetada combina máximo 3 etiquetas:
TIPO       → feature | bug | hotfix | refactor | chore
PRIORIDAD  → 🔥 crítico | alta prioridad | normal
ESTADO     → 🚧 bloqueado | ⏳ esperando cliente  (solo si aplica)
MÓDULO     → según el proyecto

# Ejemplo visual de una tarjeta:
🔵 feature · 🟠 alta prioridad · pagos
# → feature nueva, urgente, en el módulo de pagos

Lo que NO hacer con etiquetas


Checklists Base para Tarjetas

Cada tipo de tarjeta tiene su propio checklist. Se agrega al crear la tarjeta y sirve como contrato entre el dev y el equipo sobre qué significa "terminado".

✅ Checklist: Feature nueva

## Análisis
- [ ] Los criterios de aceptación están claros
- [ ] Se identificaron dependencias con otras tareas o módulos
- [ ] Se estimó el tiempo de desarrollo

## Desarrollo
- [ ] Branch creado con el ID de esta tarjeta (feature/KY-XX-nombre)
- [ ] El código sigue las convenciones del proyecto
- [ ] No hay console.log, comentarios de debug ni código muerto
- [ ] No se comitearon secrets ni archivos .env
- [ ] Manejo de errores implementado (no solo el happy path)

## Testing
- [ ] Probado localmente en todos los casos de uso
- [ ] Casos borde identificados y probados
- [ ] Tests unitarios agregados o actualizados (si aplica)

## Pull Request
- [ ] Rebase con develop hecho, sin conflictos
- [ ] CI pasa en verde
- [ ] PR abierto con link a esta tarjeta
- [ ] Screenshots adjuntos en el PR (si hay cambios visuales)
- [ ] Tarjeta movida a "En revisión"

🐛 Checklist: Bug fix

## Diagnóstico
- [ ] El bug está reproducido localmente
- [ ] Se identificó la causa raíz (no solo el síntoma)
- [ ] Se documentó cómo reproducirlo en la descripción de la tarjeta

## Desarrollo
- [ ] Branch creado: fix/KY-XX-descripcion
- [ ] El fix resuelve la causa raíz, no solo oculta el síntoma
- [ ] No se introdujeron cambios no relacionados al bug

## Validación
- [ ] El bug ya no se reproduce
- [ ] La funcionalidad existente no se rompió (regression check)
- [ ] Test agregado que cubre el caso del bug (para evitar regresión futura)

## Pull Request
- [ ] CI pasa en verde
- [ ] PR abierto con descripción clara del before/after
- [ ] Tarjeta movida a "En revisión"

🚨 Checklist: Hotfix en producción

## Respuesta rápida
- [ ] Impacto evaluado: ¿cuántos usuarios afecta? ¿pérdida de datos?
- [ ] Equipo notificado en el canal de comunicación
- [ ] Branch creado desde main: hotfix/KY-XX-descripcion

## Fix
- [ ] Solución mínima y quirúrgica (no refactorizar en un hotfix)
- [ ] Probado localmente

## Deploy
- [ ] PR aprobado (revisión express, mínimo 1 aprobación)
- [ ] Mergeado a main + tag de versión
- [ ] Mergeado de vuelta a develop
- [ ] Verificado en producción post-deploy
- [ ] Post-mortem breve documentado en la tarjeta (qué pasó, por qué, cómo evitarlo)

🔧 Checklist: Refactor / Deuda técnica

## Alcance
- [ ] Justificación documentada: ¿por qué refactorizar esto ahora?
- [ ] Alcance delimitado: qué entra y qué NO entra en este refactor
- [ ] Equipo avisado si se tocan módulos compartidos

## Desarrollo
- [ ] El comportamiento externo no cambió (misma API, mismos outputs)
- [ ] Tests existentes siguen pasando sin modificación
- [ ] No se mezclaron features ni fixes con el refactor

## Validación
- [ ] Code review con foco en que la lógica sea equivalente
- [ ] Performance no degradó (si aplica, benchmark antes/después)

🚀 Checklist: Release

## Pre-release
- [ ] Todas las tarjetas del sprint están en "Done"
- [ ] develop está estable (CI verde, sin conflictos)
- [ ] CHANGELOG actualizado con los cambios de esta versión
- [ ] Versión bumpeada según semver (MAJOR.MINOR.PATCH)

## Deploy
- [ ] Branch release/vX.X.X creado y testeado
- [ ] Mergeado a main con tag de versión
- [ ] Mergeado de vuelta a develop
- [ ] Deploy ejecutado y verificado en producción

## Post-release
- [ ] Cliente/stakeholder notificado
- [ ] Monitoreo activo las primeras 2 horas post-deploy
- [ ] Todas las tarjetas del release movidas a "Done"
💡

Tip: en Trello puedes guardar estos checklists como plantillas reutilizables. Ve a cualquier tarjeta → Checklist → "Copiar items de…" y selecciona la tarjeta plantilla. Crea una tarjeta oculta por tipo (Feature template, Bug template, etc.) con el checklist vacío y reutilízalas cada vez.


Modelo de Ramas

Se usa un modelo simplificado de Git Flow adaptado a equipos pequeños. Solo existen dos ramas permanentes; el resto son temporales.

🔒 main

Código en producción. Solo recibe merges desde develop en forma de releases. Nadie pushea directo aquí, jamás.

🔧 develop

Rama de integración continua. Todas las features y fixes se mergean aquí primero. Debe estar siempre en estado funcional.

Ramas temporales

TipoFormatoEjemplo
feature feature/KY-42-nombre-descriptivo feature/KY-42-login-google
fix fix/KY-55-descripcion-bug fix/KY-55-error-webhook-pago
hotfix hotfix/KY-60-descripcion hotfix/KY-60-crash-produccion
release release/v1.2.0 release/v2.0.0
chore chore/descripcion chore/actualizar-dependencias
⚠️

Vida corta: una rama de feature no debe vivir más de 3 días hábiles. Si una tarea es demasiado grande, hay que dividirla en subtareas en Trello.

Crear una rama correctamente

# Siempre partir desde develop actualizado
git checkout develop
git pull origin develop

# Crear la rama con el ID de la tarjeta Trello
git checkout -b feature/KY-42-login-google

# Al terminar, sincronizar antes del PR
git fetch origin
git rebase origin/develop

Estándar de Commits

Se usa Conventional Commits con el ID de la tarjeta Trello obligatorio. Esto permite trazar cualquier cambio de código a su tarjeta original.

Formato

tipo(scope): descripción en imperativo [KY-42]

# Cuerpo opcional: explica el POR QUÉ, no el qué
# El qué ya lo dice el diff del código

Tipos de commit

TipoCuándo usarlo
featNueva funcionalidad para el usuario
fixCorrección de un bug
refactorCambio de código que no agrega ni corrige nada
docsSolo cambios en documentación
testAgregar o modificar tests
choreBuild, dependencias, configuración de herramientas
styleFormato, espacios, comas — sin cambio de lógica
perfMejoras de rendimiento

Ejemplos correctos

feat(auth): agregar login con Google OAuth [KY-42]
fix(api): corregir error 500 en webhook de Wompi [KY-55]
refactor(pagos): extraer lógica de validación a servicio propio [KY-61]
docs: actualizar README con instrucciones de instalación [KY-30]
chore: actualizar dependencias a versiones estables

Ejemplos incorrectos

arregle cosas — no dice qué ni por qué
WIP — trabajo en progreso no debe comitearse (usa git stash)
fix fix fix — no es descriptivo
feat: nuevo login con Google que permite que los usuarios puedan autenticarse usando su cuenta de Google mediante OAuth 2.0 — demasiado largo (máx 72 chars)

Reglas adicionales


Pull Requests

El PR es la unidad de entrega del equipo. Representa una tarea de Trello completada y lista para integrar.

Cuándo abrir un PR

Template del PR

## ¿Qué hace este PR?
Descripción clara y concisa del cambio.

## Trello
https://trello.com/c/xxxxx/KY-42-login-google

## Tipo de cambio
- [ ] Nueva feature
- [ ] Bug fix
- [ ] Refactor
- [ ] Documentación

## Checklist
- [ ] Mi código sigue las convenciones del proyecto
- [ ] Hice auto-review de mis cambios
- [ ] No hay secrets ni datos sensibles
- [ ] El CI pasa en verde
- [ ] Agregué/actualicé tests si aplica

## Screenshots (si aplica)

Tamaño del PR

TamañoLíneas cambiadasEvaluación
✅ Ideal< 200 líneasFácil de revisar, merge rápido
⚠️ Aceptable200 – 500 líneasJustificar por qué no se dividió
❌ Problemático> 500 líneasDividir en subtareas antes de continuar
💡

Un PR grande es señal de que la tarjeta de Trello fue mal estimada o mal dividida. El problema se resuelve en la planificación, no en el merge.

Draft PRs

Si necesitas feedback temprano antes de terminar, abre un Draft PR. Esto comunica al equipo que el trabajo está en progreso y no está listo para merge. Convierte a PR normal cuando esté listo.


Code Review

El code review protege la calidad del código y distribuye el conocimiento del proyecto en el equipo. Nadie aprueba su propio PR.

Responsabilidades del reviewer

Tipos de comentario

🔴 BLOCKER

El PR no puede mergearse hasta resolverlo. Bug, security issue, violación de arquitectura, etc.

🟡 SUGGESTION

Mejora recomendada. El autor puede aplicarla o justificar por qué no. No bloquea el merge.

🔵 NIT

Detalle menor de estilo o preferencia. El autor decide si lo aplica. Nunca bloquea.

🟢 PRAISE

Reconocer buenas decisiones o código bien escrito. El feedback positivo también importa.

Cómo dar feedback

Bien: "SUGGESTION: Podríamos extraer esta función a un helper para reutilizarla en el módulo de pagos también."

Mal: "Esto está mal hecho" — sin contexto, sin solución propuesta, actitud negativa.

El autor ante los comentarios


Merge y Release

Estrategia de merge

TipoEstrategiaPor qué
feature/fix → develop Squash merge Un commit limpio por feature en develop
develop → main Merge commit (--no-ff) Preserva el historial de releases
hotfix → main Merge commit Trazabilidad del hotfix

Proceso de release

# 1. Crear rama de release desde develop
git checkout develop && git pull
git checkout -b release/v1.2.0

# 2. Actualizar versión y CHANGELOG
#    (actualiza package.json o version.txt según el proyecto)
git commit -m "chore: bump version to 1.2.0"

# 3. Mergear a main
git checkout main
git merge --no-ff release/v1.2.0

# 4. Taggear la versión
git tag -a v1.2.0 -m "Release v1.2.0"
git push origin main --tags

# 5. Mergear de vuelta a develop para sincronizar
git checkout develop
git merge --no-ff release/v1.2.0
git push origin develop

# 6. Eliminar la rama de release
git branch -d release/v1.2.0

Hotfixes en producción

# Los hotfix nacen desde main, no desde develop
git checkout main && git pull
git checkout -b hotfix/KY-99-crash-login

# Fix, commit, PR → aprobación rápida
# Merge a main + tag
# Luego sincronizar develop también
git checkout develop
git merge --no-ff hotfix/KY-99-crash-login

Versionado semántico

v1.0.0 → formato

MAJOR.MINOR.PATCH

Cuándo incrementar

MAJOR: cambios que rompen compatibilidad
MINOR: features nuevas
PATCH: bug fixes


Las 10 Reglas de Oro

Estas reglas no son opcionales. Son el acuerdo del equipo.

🎯

Recuerda: estas reglas no existen para complicar el trabajo, sino para que el equipo pueda moverse rápido sin romperse entre sí. Un proceso claro reduce conflictos, reuniones y tiempo perdido arreglando errores que se pudieron evitar.


Herramientas del Equipo

Git hooks con Husky

# Instalar
npm install --save-dev husky commitlint @commitlint/config-conventional

# commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'] }

# Hook: rechaza commits mal formateados automáticamente

Alias útiles de Git

git config --global alias.lg "log --oneline --graph --all --decorate"
git config --global alias.st "status -sb"
git config --global alias.undo "reset --soft HEAD~1"
git config --global alias.save "stash push -m"

.gitignore base

# Entorno
.env
.env.local
.env.*.local

# Dependencias
node_modules/
vendor/

# Builds
dist/
build/
*.jar
*.class

# IDE
.idea/
.vscode/
*.iml

# OS
.DS_Store
Thumbs.db