1. KISS (Keep It Simple, Stupid): Diseña soluciones simples y directas, evitando complejidades innecesarias.
  2. DRY (Don't Repeat Yourself): Elimina la duplicación de código y lógica, asegurando que cada funcionalidad tenga una única implementación.
  3. YAGNI (You Aren't Gonna Need It): No implementes funcionalidades que no sean necesarias en este momento.
  4. Separation of Concerns (SoC): Divide el sistema en secciones independientes, cada una con una responsabilidad específica.
  5. Single Responsibility Principle (SRP): Cada clase o módulo debe tener una única responsabilidad bien definida.
  6. Open/Closed Principle (OCP): Diseña entidades abiertas a la extensión pero cerradas a modificaciones.
  7. Liskov Substitution Principle (LSP): Las subclases deben sustituir a sus clases base sin alterar el comportamiento esperado.
  8. Interface Segregation Principle (ISP): Divide interfaces grandes en pequeñas y específicas para cada cliente.
  9. Dependency Inversion Principle (DIP): Los módulos deben depender de abstracciones, no de implementaciones concretas.
  10. Dependency Injection: Proporciona dependencias desde el exterior para reducir el acoplamiento entre módulos.
  11. Alta Cohesión y Bajo Acoplamiento: Los módulos deben estar bien enfocados y tener mínimas dependencias entre sí.
  12. Encapsulación: Oculta detalles internos y expón solo lo necesario mediante interfaces bien definidas.
  13. Principio de Menor Sorpresa: Diseña sistemas que se comporten de forma predecible para usuarios y desarrolladores.
  14. Favor Composition Over Inheritance: Usa composición de objetos en lugar de herencia para agregar funcionalidades.
  15. Clean Code: Escribe código claro, legible y fácil de mantener, con nombres significativos y funciones cortas.
  16. Código Auto-Documentado: El código debe explicarse por sí mismo sin necesidad de comentarios extensivos.
  17. Refactorización Continua: Mejora constantemente el diseño del código sin alterar su funcionalidad.
  18. Desarrollo Basado en Pruebas (TDD): Escribe pruebas antes del código funcional para garantizar el comportamiento esperado.
  19. Single Source of Truth (SSOT): Mantén una única fuente de información para datos o configuraciones críticas.
  20. Fail Fast: Detecta errores lo antes posible para evitar estados inconsistentes.