0

Cómo aprovechar diferentes herramientas para escribir código con tu equipo sin conflictos

Aprende cómo optimizar la colaboración y mantener la calidad del código usando Git flow, ESLint, Prettier, pre-commit hooks y verificaciones CI/CD.

Construyendo armonía en los flujos de trabajo de código en equipo

La colaboración en desarrollo de software es desafiante.
Los conflictos en los flujos de trabajo, estilos de código inconsistentes y problemas de integración pueden interrumpir la productividad del equipo y causar frustración.

¿La buena noticia? Con las herramientas y prácticas correctas, tu equipo puede transformar el caos en armonía.


🛠️ Herramientas esenciales para la colaboración en equipo

Para asegurar una colaboración fluida, tu equipo necesita herramientas que mejoren la visibilidad, hagan cumplir estándares y automaticen tareas tediosas. Así es como usarlas efectivamente:


1️⃣ Git Flow — Estructurando tu trabajo

Git Flow es un modelo de ramificación diseñado para organizar los esfuerzos de desarrollo:

  • Ramas de características: Aíslan el trabajo en nuevas funcionalidades.
  • Rama develop: Integra características completadas para pruebas.
  • Rama release: Prepara versiones estables para producción.
  • Rama hotfix: Soluciona rápidamente problemas críticos en producción.

💬 Comentario: Git Flow da visibilidad y estructura. Cada miembro del equipo sabe dónde trabajar sin colisionar con otros, reduciendo el riesgo de conflictos de merge e historiales desordenados.

💡 Consejo pro: Usa convenciones de nombres para las ramas (ej., feature/login-page, hotfix/payment-crash) para mantener claridad.
📚 Recurso relacionado: Documentación de Git Flow


2️⃣ ESLint — Hacer cumplir la calidad del código

El código inconsistente y propenso a errores ralentiza el desarrollo. ESLint asegura que tu equipo se adhiera a estándares de coding consistentes al:

  • Detectar errores de sintaxis.
  • Hacer cumplir buenas prácticas.
  • Resaltar posibles bugs.

🧩 Ejemplo de configuración:

{
  "extends": "eslint:recommended",
  "rules": {
    "semi": ["error", "always"],
    "quotes": ["error", "single"]
  }
}

💬 Comentario: ESLint mantiene a todos alineados con los mismos estándares. No importa quién escriba el código, el resultado se siente unificado y predecible.

💡 Consejo pro: Extiende ESLint con plugins como eslint-plugin-react para reglas específicas del framework.


⚙️ Reglas y Plugins Avanzados de ESLint

Más allá de la sintaxis y el estilo, ESLint ofrece un amplio ecosistema de reglas y plugins que ayudan a mantener un proyecto limpio y performante.
Cada regla puede configurarse con diferentes niveles — off, warn, o error — y tu CI/CD puede configurarse para rechazar builds o pull requests si se encuentran ciertos errores.

🔍 Plugins y Reglas Comunes

  • react-hooks — Reglas como react-hooks/rules-of-hooks y react-hooks/exhaustive-deps verifican el uso de hooks y arrays de dependencias para evitar condiciones de carrera y bugs de lógica.
    (Puedes deshabilitar una verificación de dependencia específica en un comentario useEffect si es necesario.)

  • plugin-no-inline-styles — Los estilos inline en React Native a menudo se vuelven difíciles de mantener. Este plugin ayuda a hacer cumplir la organización de estilos.
    Personalmente, mantengo bloques StyleSheet en el mismo archivo (para contexto y limpieza) para que la regla pueda rastrear estilos no utilizados de manera eficiente.

  • no-barrel-files — Los archivos barrel (exports index.js) pueden dañar el rendimiento y ocultar imports.
    Esta regla ayuda a identificarlos y eliminarlos cuando sea posible.

  • @typescript-eslint/no-unused-vars — Resalta variables no utilizadas para mantener el código limpio.
    Puedes prefijar una variable con _ para ignorarla de manera segura cuando sea intencional.

  • react-native/no-inline-styles — Los estilos inline causan re-renders y impactos en el rendimiento.
    Herramientas como React Native Style Generator (plugin de VS Code) ayudan a refactorizar estos rápidamente.

  • import/order + sort-imports — Mantén una estructura de imports clara y agrupada para mejorar la legibilidad y acelerar la comprensión.

    💡 Consejo: Organiza los imports por grupo:
    react, react-native, librerías externas, alias del proyecto (@/), padres, hermanos.

    Ejemplo (bloque único):

    import React, { useState } from 'react';
    import { Keyboard, Platform, StyleSheet, View } from 'react-native';
    import Animated from 'react-native-reanimated';
    import { MyText } from '@/components';
    import { colors } from '@/styles';
    import { ParentComponent } from '../Parent';
    import { SiblingComponent } from './Sibling';
    

    Ejemplo (con newlines-between):

    import React, { useState } from 'react';
    import { Keyboard, Platform, StyleSheet, View } from 'react-native';
    
    import Animated from 'react-native-reanimated';
    
    import { MyText } from '@/components';
    import { colors } from '@/styles';
    
    import { ParentComponent } from '../Parent';
    import { SiblingComponent } from './Sibling';
    

💬 Comentario: Comienza con estas reglas en modo warn para evaluar el impacto en el proyecto. Una vez que tu repositorio esté limpio, aplícalas como error para bloquear regresiones durante commits o builds de CI.


3️⃣ Prettier — Formatear código automáticamente

Las discusiones sobre el estilo del código son una pérdida de tiempo. Prettier elimina estos debates formateando automáticamente el código para que coincida con un estilo definido.

🔧 Integración con ESLint:

{
  "extends": ["eslint:recommended", "plugin:prettier/recommended"]
}

💬 Comentario: Deja que Prettier maneje el formateo — no se trata de "estilo personal", se trata de consistencia y legibilidad para todos.

💡 Consejo pro: Habilita Prettier para autoformatear el código al guardar en tu IDE.


4️⃣ Pre-commit hooks — Detectar problemas temprano

Los pre-commit hooks automatizan verificaciones localmente antes de que tu código sea incluso enviado.
Usa herramientas como Husky para hacer cumplir:

  • Ejecutar ESLint y Prettier.
  • Verificar que pasen las pruebas.
  • Verificar archivos o código no utilizados con npx unimported.
  • Asegurar que los mensajes de commit sigan las guías.

🧩 Ejemplo con Husky:

npx husky add .husky/pre-commit "npm run lint && npm run test && npx unimported"

💬 Comentario:
Los pre-commit hooks se ejecutan en tu rama local, antes de que el código llegue a remote.
Herramientas como unimported ayudan a mantener el proyecto limpio detectando código o assets no utilizados — esto reduce el tamaño binario y evita enviar archivos muertos.

💡 Consejo pro: Puedes configurar unimported para ignorar directorios específicos (como plantillas o archivos de configuración) que se requieren pero no se importan directamente.


5️⃣ Verificaciones CI/CD — Automatizando verificaciones de calidad

Las pipelines CI/CD aseguran que cada cambio de código sea probado y verificado antes de llegar a producción.
Los pasos típicos incluyen:

  • Linting: Verificaciones de ESLint y Prettier.
  • Testing: Ejecutar pruebas unitarias y de integración.
  • Limpieza de código: Usar npx unimported para verificar que el repositorio no contenga código o assets no utilizados.
  • Building: Verificar que la app compile exitosamente.

🧩 Ejemplo de pipeline CI (GitHub Actions):

name: CI
on:
  pull_request:
    branches: ["*"]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
      - run: npm ci
      - run: npm run lint
      - run: npm run test
      - run: npx unimported

💬 Comentario:
En CI/CD, las verificaciones se ejecutan en tu Pull Request, combinando tu rama con la rama base (usualmente develop o main).
Esto asegura que tu código no solo funcione en aislamiento — también se integra limpiamente con el resto del proyecto.
Ejecutar unimported aquí previene que el código muerto viva en tu línea principal, manteniendo los builds ligeros y eficientes.

💡 Consejo pro: Usa ramas como develop o release para probar funcionalidades en staging antes de hacer merge a main.


💪 Los beneficios de usar estas herramientas juntas

Al integrar estas herramientas en tu flujo de trabajo, tu equipo puede:

  • 🚫 Reducir conflictos: El formateo automático y el linting aseguran código consistente.
  • 🧹 Mantener el proyecto limpio: Herramientas como unimported eliminan el desorden y reducen el tamaño del bundle.
  • ⚙️ Hacer cumplir estándares: Los plugins de ESLint y reglas avanzadas previenen regresiones antes de que se envíen.
  • ⏱️ Ahorrar tiempo: Automatiza verificaciones tediosas con pre-commits y pipelines CI/CD.
  • Mejorar la calidad: La detección temprana de problemas previene problemas en producción.
  • 🤝 Mejorar la colaboración: Una estructura clara de Git Flow simplifica el trabajo en equipo.

🎯 La conclusión

Escribir código en equipo no tiene que ser caótico.
Con Git Flow, ESLint, Prettier, pre-commit hooks y verificaciones CI/CD, tu equipo puede enfocarse en construir gran software sin preocuparse por conflictos o problemas de calidad.

Comienza pequeño — adopta una herramienta a la vez — y construye gradualmente un flujo de trabajo que se ajuste a las necesidades de tu equipo.
La colaboración funciona mejor cuando está apoyada por las herramientas correctas.

Happy coding! 💻