Normalmente no me gusta piratearme post de otros blogs y na mas hacer copy&paste, pero este merece la pena, ya que habla sobre una pirámide muy especial: la piramide de CALIDAD de código. Porque es importante para mi?, trabaje casi un año con un tipo el cual su calidad de código estaba en los suelos, a tal grado era que sus variables eran simples "asdqwrffafasd" (no es broma), y eso retrasaba extremadamente el desarrollo de la aplicación, porque había que corregir sus errores, básicamente era borrar todo y volverlo a hacer. Resumiré el post para que sea mas directo el asunto y añadiré comentarios basados en mi experiencia (que realmente no es mucha).

figura 1
La base de la piramide debe de ser formada por la caracteristicas que hacen el codigo robusto. La cúspide (apex) esta representada por la cantidad de funcionalidad y fiabilidad del código.
Asi que si quieres que la cúspide sea mas alta (mas funcionalidad y fiabilidad), mas grande la base tiene que ser.
Legibilidad (Readability)Esta característica mide que tan facil es de leer y entender el codigo y su proposito. Los principales factores que afectar la legibilidad son:
- Buenos comentarios.
- Buen nombramiento de variables, funciones, clases, etc.
- Uso consistente de estándares.
- Lógica clara.
Algo importante: mientras mas legible sea el código, menos tiempo un nuevo developer tardara en entender que es lo que el código hace.
Expansibilidad (Extensibility)
Esta característica mide que tan fácil es añadir una nueva funcionalidad, un buen diseño proveerá gran expansibilidad. Mientras mas expansibilidad tenga, menos tiempo y menos cambios en el código, le tomara a a un desarrollador añadir funcionalidad .
Atomicidad (Atomicity)
Esta característica mide como las diferentes unidades de lógica de la aplicación están separadas, así cuando un cambio es necesario solo se realiza en un lugar en el código. Una gran atomicidad es alcanzada siguiendo los siguientes principios al codificar como:
- Principios SÓLIDOS.
- DRY (Dont Repeat Yourself).
- Continuo mejoramiento del código.
Pruebas (Testability)
Esta característica mide que tan automatizado y que tanto cubre las pruebas de código que tengas. Esto no solo cubre las pruebas unitarias, si no también las pruebas de integración y las pruebas de E2E.
Bien, como verán algunas características son muy lógicas y las hacemos por default, otras tantas las omitimos (como lo de testing) y otras realmente no tenia idea de que eran parte de la calidad de código, e igual las omitimos.
Basándome en mi experiencia, el orden de importancia de las caracterizas va a si: legibilidad atomicidad, expansibilidad y pruebas. Independientemente del orden que le demos las 4 son la base de la pirámide y las cuatro se deben de realizar.
Según Alberto G. (el autor del post del cual me estoy basando) existen 3 tipos pirámides (puedes verlas aquí), pero al final (y como el también el lo dice) no existe alguna aproximación o alguna manera científica de poder medir estas características, solo podemos imaginarnos (o dibujar) la pirámide de nuestro proyecto y así ajustarla para que esta este balanceada. Al final lo que deseamos es tener una buena (y grande) base para tener una gran cuspide :P.
Saludos
-r2d2