Complejidad esencial y complejidad adicional

Cuando desarrollamos software, podemos decir que nos enfocamos principalmente en resolver problemas y al resolver dichos problemas nos podemos encontrar con dos tipos de complejidad: la complejidad esencial y la complejidad adicional.

Complejidad esencial

Se refiere a la complejidad propia de construir una característica del software

Complejidad adicional

Se refiere a la complejidad que agregamos por nuestra cuenta mientras construimos la característica del software, complicando la resolución del problema por distintos factores.

Al inicio de la construcción de un sistema, su complejidad suele ser igual a la complejidad esencial y conforme pasa el tiempo la complejidad del sistema es el resultado de la suma de la complejidad esencial y complejidad adicional.

Una buena arquitectura de software debe pretender que el peso de la complejidad adicional no se incremente en demasía.

Como ejemplos podemos pensar imaginar:

  • una aplicación que como backend tiene un solo endpoint, su complejidad adicional será menor que una que tenga un backend con muchos endpoints acoplados
  • una organización en la cual durante un sprint se desarrollen varias reuniones poco productivas le agrega complejidad adicional al desarrollo.
  • evitar implementar un correcto sistema de despliegue en un inicio por ganar tiempo agrega complejidad adicional cuando el desarrollo involucre a muchos desarrolladores desplegando código.

Como podemos observar, la complejidad adicional no solo tiene que ver con el código que escribimos, la misma incluye todo el entorno en el cual desarrollamos el software, sin embargo en cuanto a código también podemos agregar gratuitamente complejidad adicional cuando el mismo no incluye mejores prácticas, estándares de desarrollo o el uso de clean code.

Deja un comentario

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

Blue Captcha Image
Refrescar

*