El Diseño de Software

El diseño de software es mágico. Según cómo lo mires puede ser artesanía, o por qué no, ingeniería, o filosofía, o incluso un juego, o una actividad social, o todo a la vez.

Cuanto más aprendes sobre diseño, más te das cuenta de lo poco que sabes, y por mucho que intentes domarlo, el diseño siempre va un paso por delante para demostrarte que lo que pensabas que era adecuado hasta el momento ya no lo es.

El Diseño de Software

Aprender a diseñar software te da la habilidad de hacer más con menos, de mantenerte motivado incluso en circunstancias en las que no conoces la solución y en general de mejorar el impacto de tus decisiones.

Pero abordar toda la complejidad que supone diseñar software en un post es algo imposible, así que de forma introductoria intentaré transmitirte algunas ideas que sirvan para abrir este camino.

El diseño de software

Puedes escribir infinitas bases de código diferentes para solventar el mismo problema, es decir, que cuando se ejecute, cubra las mismas necesidades.

Dentro de ese conjunto infinito, encontrarás bases de código que son fáciles de cambiar, y otras en las que necesitarías varias vidas para hacer un pequeño cambio. Diseñar software es tener la aspiración de acercarnos a las primeras.

Dicho de una forma más formal, el diseño de software es el proceso continuo, colaborativo e iterativo de decidir la estructura interna del software, con el fin de cubrir tanto las necesidades de quienes lo usan, como de quienes lo adaptan y lo operan.

El arte de diseñar

Si bien diseñar es una actividad dinámica, colaborativa, continua e iterativa, observar la resolución de un problema de diseño de forma estática nos puede ayudar a entender mejor en qué consiste diseñar.

En este sentido, solventar un problema de diseño consiste en determinar la estructura interna del software, es decir, determinar: - Los elementos de software que intervienen en la solución (funciones, clases, módulos, etc.). - La forma que tienen dichos elementos. - La relación de dependencia entre ellos.

Existen muchas ideas, reglas, heurísticas y principios que nos ayudan a tomar estas decisiones de diseño: Cohesión, Acoplamiento, Separation of Concerns, Open/Closed Principle, Economía de Software, etc.

Pero antes de adentrarte en todos estos aspectos, te quiero compartir una poderosa pregunta que te llevará a diseñar mejor software.

La gran pregunta

Una forma de iniciarse en esta actividad es hacerse una y otra vez la siguiente pregunta: ¿Puedo cambiar la estructura interna del software para hacer que sea más fácil cambiar?

Esta misma pregunta toma formas diferentes en función del contexto, pero en el fondo es siempre la misma:

  • Esta función me ha costado entenderla ¿Debería refactorizar los nombres? ¿Debería partirla?
  • He tenido que introducir el mismo código en varias partes ¿Debería compartir código o mantener la duplicidad?
  • Cada vez que hago este cambio, tengo que cambiar 20 funciones. ¿Cómo puedo hacer para no tener que hacerlo?
  • Cada vez que hacemos este cambio, 2 equipos tenemos que coordinar varios cambios en 4 servicios ¿Cómo salimos de este embrollo?

A menudo no tendremos la respuesta a estas preguntas, a veces simplemente percibiremos que un cambio nos cuesta, pero no sabemos exactamente por qué o cómo solucionarlo.

Aquí la paciencia es una gran aliada, ya que no tienes por qué encontrar un buen diseño a la primera; muchas veces es cuestión de tiempo, colaboración y conocimiento el encontrar una idea que haga engranar todo mejor.

Pero todo empieza ahí, en cuestionar constantemente el diseño, y es esa aspiración de creer que puede existir una forma mejor la que nos empuja a encontrarla.

Esto es solo el inicio

He visto cómo mis ideas de diseño han evolucionado a lo largo de los años, por lo que ¿cómo puedo estar seguro de que mis ideas actuales son adecuadas?.

Como desarrollador de software, mantengo una mente abierta, con una gran curiosidad por descubrir, escuchando y aprendiendo de otros, y preparado para aceptar que, con alta probabilidad, mi forma de diseñar a día de hoy es errónea.

Pese a ello, sé que el diseño tiene el potencial de impactar los resultados, nuestra salud y las organizaciones, por lo que a riesgo de equivocarme, seguiré compartiendo ideas de diseño, para que si así lo deseas, podamos seguir creciendo juntos.

Cuestión de preguntar

Hoy hemos abierto boca con algunas ideas para iniciarse en la exploración del vasto universo del diseño de software.

Transmitir ideas al respecto es igual o más complejo que el diseño en sí mismo. Por eso, si tienes cualquier pregunta sobre la temática de este post, envíamela e intentaré darle respuesta.

Y recuerda que todo buen diseño empieza con esta simple pregunta: ¿Es suficientemente bueno?

Dani Santamaría

Dani Santamaría

Software Developer & Technical Coach

[🐦]

Comparte el artículo

{🐦}
Flecha

👷 Por aquí irán los comentarios y esas cosas. Mientras tanto puedes: