Decisiones y desarrollo de software

El desarrollo de software es quizá un 90% de diseño. Cada nombre de variable, es una decisión de diseño. Cada elemento visual y cada posición del mismo en la interfaz responden de un modo u otro a una decisión de diseño. Cada dato introducido, comprobación y bucle utilizados son fruto de una decisión de diseño. Y hablo de diseño entendido como diseño en general (ingeniería, arte, artesanía…), diseño como forma de denominar a la toma de decisiones sobre la estructura, comportamiento y aspecto, orientadas a cumplir unos objetivos concretos. Es por tanto un trabajo no solo analítico y formal como se nos intenta hacer creer muchas veces, sino un trabajo sobretodo creativo. Y esta orientación al diseño obliga al equipo (cuando lo hay) de desarrollo a tomar una enorme cantidad de decisiones al cabo del día.

Puede objetarse que el diseño no es eso, que el diseño es una actividad artística relacionada con las emociones, pero entonces estaríamos ignorando unos principios esenciales del diseño, como el de anteponer la función a la forma.

Es el equipo de desarrollo en última instancia el que adapta la forma (el producto o prototipo) a la función. Entendiendo que la función puede ser múltiple: atraer visualmente, funcionar con cierto rendimiento, aguantar según que errores, etc…

Ya sea un CRM o una web presencial, cada elemento que produce el equipo de desarrollo debe estar donde está para que el producto cumpla su cometido.

Puede objetarse de nuevo que con un diseño lo suficientemente detallado realizado por el cliente, el arquitecto, analista o diseñador (sic), el equipo de desarrollo (programadores, desarrolladores, o como quiera llamárselos) debería poder reducir las decisiones al mínimo, pues estas ya habrían sido tomadas, pero…

  1. Un diseño completamente detallado, es de hecho el producto final (el código como proceso de diseño). Si tenemos un diseño de la aplicación con todos sus detalles, este diseño/descripción deberían incluir los detalles de implementación: tecnologías a usar, configuración de estas, algoritmos de funcionamiento, funciones, variables… un absurdo. Y ojo que esto lo he vivido: un diseño en papel que incluía el código a escribir y un montón de picateclas para ponerlo (¡de nuevo!) en el ordenador.
  2. Un diseño menos detallado, es una abstracción y las abstracciones fugan. Se abstrae el producto de la máquina en que se ejecutará, de las redes, de la implementación de los subsistemas asociados (base de datos, usuarios, etc). Por tanto, los diseños de alto nivel aunque sean muy bonitos, son mucho más incompletos de lo que parece y contienen no solo inexactitudes y ambigüedades, sino errores (el papel todo lo aguanta) que deben subsanarse durante la implementación.

Por este segundo punto me parece una pésima idea poner a unos juniors (todos lo hemos sido) a implementar diseños de papel, especialmente de aquellos diseños que se entregan a clientes, dado que suelen ser versiones específicas para verse bien, no para ser de utilidad en las siguientes fases.

Por otro lado, al tener equipos de “programadores” de bajo coste que implementen diseños de perfiles caros (comerciales y analistas estrella) en la enésima demostración de que no se sabe diferenciar el rango del rol, (confundiendo valor y precio como decía Machado) denota una concepción del desarrollo de software como una actividad de bajo nivel, y eso lleva inevitablemente a construir un producto de mierda, como cualquiera que haya sido becario de un proyecto mediano podrá corroborar si ha llegado a ganar 3 o 4 años de experiencia y sigue interesado en su trabajo.

¿A donde quiero llegar con todo esto? A ninguna parte en realidad. Solo estaba pensando de nuevo por escrito sobre el desarrollo de software, las posibles mejoras en sus procesos y en como la orientación ágil tiene mucho más sentido que cualquier otra cosa que haya visto hasta ahora.


Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s