YAGNI, KISS y DRY: 3 principios que deberías aplicar siempre

KISS, DRY y YAGNI son tres principios aplicables al diseño y desarrollo de software. Aunque los tratemos juntos en esta entrada, no están relacionados entre sí, más allá de la claridad y simplicidad que transmiten sus mensajes.

YAGNI – You Aren’t Gonna Need It

Este principio se resume en:

No implementes hoy algo que no necesitas hoy.

Es muy común intentar dejar el código “preparado para el futuro”, pero en la práctica ese futuro casi nunca llega… o cuando llega, los requisitos han cambiado.

❌ Sin aplicar YAGNI

class NotificationService {  

  sendNotification(
    userId: string,
    options?: {
      byEmail?: boolean;
      bySMS?: boolean;
      byPush?: boolean;
    }
  ) {    
    if (options?.byEmail) {
      this.sendEmail(userId);
    }
    if (options?.bySMS) {
      this.sendSMS(userId);
    }
    if (options?.byPush) {
      this.sendPush(userId);
    }
  }}

Aquí estamos desarrollando tres posibles canales de notificación que nadie ha pedido todavía.

✅ Aplicando YAGNI

class NotificationService {  
  sendEmailNotification(userId: string) {
    this.sendEmail(userId);
  }
}

Cuando realmente necesites SMS o Push, los implementas en ese momento.


KISS – Keep It Simple

KISS trata de evitar soluciones innecesariamente complejas.

Cuanto más complejo es el código, más difícil es:

  • entenderlo
  • testearlo
  • modificarlo
  • detectar errores

❌ Sin KISS

function getFullName(user: { name?: string; surname?: string }): string {  

  if (
    user.name !== undefined &&
    user.name !== null &&
    user.surname !== undefined &&
    user.surname !== null
  ) {
    return `${user.name} ${user.surname}`;
  }  return '';
}

✅ Aplicando KISS

function getFullName(user: { name?: string; surname?: string }): string {
return `${user.name ?? ''} ${user.surname ?? ''}`.trim();
}

Mismo resultado, menos ruido mental.


DRY – Don’t Repeat Yourself

DRY busca evitar duplicar lógica en distintas partes del sistema.

Cuando repites código:

  • aumentas el riesgo de errores
  • haces más difícil el mantenimiento
  • complicas cambios futuros

❌ Sin aplicar DRY

function calculatePriceWithVAT(price: number): number {
  return price + price * 0.21;
}
function calculateDiscountedPriceWithVAT(price: number): number {
  const discounted = price - 10;
  return discounted + discounted * 0.21;
}
function calculateShippingCostWithVAT(cost: number): number {
  return cost + cost * 0.21;
}

El cálculo del IVA está repetido en varios sitios.

✅ Aplicando DRY

const VAT = 0.21;

function addVAT(amount: number): number {
  return amount * VAT;
}
function calculatePriceWithVAT(price: number): number {
  return price + addVAT(price);
}
function calculateDiscountedPriceWithVAT(price: number): number {
  const discounted = price - 10;
  return discounted + addVAT(discounted);
}
function calculateShippingCostWithVAT(cost: number): number {
  return cost + addVAT(cost);
}

Si mañana el IVA cambia, solo tendrás que modificar un único lugar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir