Saltar al contenido principal

Minimizando la carga cognitiva en el desarrollo de software

¿Sabías que los desarrolladores pasan más tiempo leyendo código que escribiéndolo? Optimizar cómo presentamos la información en nuestro software es vital para reducir la carga cognitiva.

Esta carga es el esfuerzo mental necesario para una tarea. Se divide en intrínseca (inherente a la dificultad, no reducible) y extrínseca (causada por la presentación de la información, ¡y sí podemos mejorarla!).

¿Qué aumenta la carga cognitiva en nuestros desarrollos?

  • 1️⃣ Condicionales complejos e if anidados.
  • 2️⃣ Herencia excesiva.
  • 3️⃣ Métodos, clases o módulos demasiado superficiales (¡a veces menos es más!).

Módulos Profundos vs. Superficiales

La clave está en preferir módulos profundos (interfaz simple, funcionalidad compleja) sobre los “superficiales”.

Un módulo superficial es como una caja con mil botones: muchas funciones pequeñas que requieren entender infinidad de conexiones. Aumenta la carga cognitiva al forzarnos a memorizar una interfaz compleja para poca funcionalidad.

Un módulo profundo, en cambio, es como una caja con pocos botones claros que al pulsarlos hacen algo complejo y útil internamente. Su interfaz simple reduce la carga cognitiva, ya que no necesitas entender su funcionamiento interno para usarlo. Los mejores módulos ocultan gran complejidad tras una interfaz simple.

Repensando el Principio de Responsabilidad Única (SRP)

Otra forma de reducir la carga cognitiva es replantear el SRP. Tradicionalmente, se entiende como “una sola razón para cambiar”. Esto a menudo lleva a crear muchísimas clases/módulos pequeños que hacen “una sola cosa”, causando fragmentación y aumentando la carga cognitiva.

Una mejor visión: un módulo debe satisfacer una necesidad completa para un usuario o stakeholder específico. Así, un módulo puede hacer varias “cosas” internamente, siempre que todas contribuyan a esa responsabilidad. Por ejemplo, en lugar de módulos separados para “guardar datos de usuario” y “validar datos de usuario”, un “gestor de perfil de usuario” centraliza todas esas operaciones para el usuario final.

En resumen: simplificar deliberadamente el código y reducir los modelos mentales necesarios para entender un proyecto son vitales. Esto acelera la integración de nuevos miembros y dispara la productividad.

¡Menos es más cuando se trata de la complejidad cognitiva en el desarrollo!

Este artículo se publicó primero en LinkedIn