DEV Community

🌟 La Regla del Boy Scout en Desarrollo de Software: Mejora Continua en Cada Paso 🌟

En el desarrollo de software, hay una regla que nunca pasa de moda y que puede marcar la diferencia entre un proyecto sostenible y uno lleno de problemas: la regla del Boy Scout.

Esta regla, sencilla pero poderosa, establece que "siempre debes dejar el código mejor de lo que lo encontraste". Ya sea que estés corrigiendo un bug, añadiendo una nueva funcionalidad o simplemente navegando por el código, es una oportunidad para mejorar.

¿Por qué es tan importante? Especialmente en las primeras etapas de un proyecto, cuando las bases aún se están construyendo, la calidad del código es la clave para evitar un crecimiento desordenado y caótico. En este punto, cada mejora tiene un impacto exponencial en el futuro del desarrollo.

🔑 Beneficios de aplicar la regla del Boy Scout:

Reducción de deuda técnica: Cada pequeño cambio mejora la calidad general, evitando que se acumulen problemas difíciles de resolver más adelante.
Facilidad de mantenimiento: Un código más limpio y organizado es más fácil de entender, depurar y ampliar.
Cultura de calidad: Fomenta un equipo que valora y prioriza la excelencia técnica.

🎯 Cómo aplicar la regla del Boy Scout:

Refactoriza pequeños detalles: nombres de variables más claros, simplificación de lógica, eliminación de código redundante.
Documenta mejor: añade comentarios útiles o actualiza la documentación técnica.
Mejora las pruebas: añade o corrige tests para asegurar la estabilidad del código.
Revisa dependencias o configuraciones que puedan optimizarse.

Ejemplo Práctico

Supongamos que estás trabajando en una función que calcula descuentos. Te encuentras con este fragmento de código:

func CalculateDiscount(price float64, discountRate float64) float64 {
    return price - (price * discountRate / 100)
}
Enter fullscreen mode Exit fullscreen mode

El código funciona, pero tiene algunas áreas de mejora:

  • Falta de claridad en los nombres: price y discountRate son claros, pero podrían ser más descriptivos.
  • Ausencia de validaciones: No maneja casos donde discountRate es negativo o mayor a 100.
  • Código acoplado a cálculos específicos: Si más adelante se requiere un nuevo tipo de descuento, tendríamos que modificar esta función.

Aplicando la Regla del Boy Scout

Después de realizar mejoras pequeñas pero significativas, el código queda así:

func CalculateDiscount(originalPrice float64, discountPercentage float64) (float64, error) {
    // Validar inputs
    if originalPrice < 0 {
        return 0, fmt.Errorf("original price cannot be negative")
    }
    if discountPercentage < 0 || discountPercentage > 100 {
        return 0, fmt.Errorf("discount percentage must be between 0 and 100")
    }

    // Calcular el descuento
    discount := originalPrice * discountPercentage / 100
    finalPrice := originalPrice - discount

    return finalPrice, nil
}

Enter fullscreen mode Exit fullscreen mode

Además, añadimos pruebas unitarias para garantizar el correcto funcionamiento:

func TestCalculateDiscount(t *testing.T) {
    tests := []struct {
        name          string
        price         float64
        discount      float64
        expectedPrice float64
        expectError   bool
    }{
        {"Valid discount", 100, 10, 90, false},
        {"No discount", 100, 0, 100, false},
        {"Full discount", 100, 100, 0, false},
        {"Negative price", -50, 10, 0, true},
        {"Invalid discount > 100", 100, 110, 0, true},
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            price, err := CalculateDiscount(tt.price, tt.discount)
            if (err != nil) != tt.expectError {
                t.Errorf("expected error: %v, got: %v", tt.expectError, err)
            }
            if price != tt.expectedPrice {
                t.Errorf("expected price: %.2f, got: %.2f", tt.expectedPrice, price)
            }
        })
    }
}
Enter fullscreen mode Exit fullscreen mode

¿Por qué se realizó este cambio?

  • Claridad y legibilidad: Los nuevos nombres (originalPrice, discountPercentage) son más descriptivos, lo que facilita entender la función.

  • Manejo de errores: Ahora validamos que los inputs sean válidos, evitando errores silenciosos que podrían causar problemas en producción.

  • Extensibilidad: Separar el cálculo del descuento y el precio final hace que esta función sea más fácil de adaptar si necesitamos manejar nuevos tipos de descuentos en el futuro.

  • Confiabilidad: Añadimos pruebas unitarias para cubrir los casos de uso normales y extremos, garantizando que la función se comporte correctamente.

En resumen, no importa si estás desarrollando el próximo unicornio tecnológico o un pequeño proyecto interno, cada línea que toques es una oportunidad para dejar un impacto positivo. Al final del día, un código mejor significa un producto más sólido, un equipo más eficiente y un cliente más satisfecho.

¿Qué opinan? ¿Han aplicado esta regla en sus proyectos? 🚀

Top comments (0)