La Creatividad en el desarrollo de software

código

código

¿Qué es la creatividad?

La creatividad según la Real Academia Española de la lengua, es la facultad de crear o capacidad de creación. Así que como esto no nos dice mucho, veamos qué significa el verbo crear (proviene del latín creāre) según la misma fuente:

  1. Producir algo de la nada
  2. Establecer, fundar, introducir por vez primera algo; hacerlo nacer o darle vida, en sentido figurado. Crear una industria, un género literario, un sistema filosófico, un orden político, necesidades, derechos, abusos.

Esta definición ya sí que nos ofrece un detalle aplicable 100% a nuestra profesión de desarrollo de software. Cualquier ingeniería otorga al estudiante unos mínimos conocimientos y capacidades para resolver problemas, además de ofrecer las herramientas básicas para que se ejecute la implementación de un proceso creativo.

creatividad

creatividad

Porque el desarrollo de software es algo muy creativo y debemos convencernos de ello.

Realmente esto enlaza directamente con lo que llamamos innovación y aquí está una de las claves de la creatividad. Puede haber muchas ideas, productos, servicios, programas o aplicaciones nuevas pero pocas de ellas pueden ser innovadores.

Por otro lado, a veces pasa lo contrario y es que realmente la innovación no se encuentra en la creación en sí, sino en la ejecución, implementación y desarrollo de algo ya conocido o implementado por otro. En este último caso se puede ofrecer un valor añadido difícil de superar en el mercado aplicando la excelencia en la implementación en algún aspecto realmente diferencial.

Un ejemplo de sobra conocido son los productos de Apple, ensalzados por unos y criticados por otros: en muchos casos la creatividad e innovación que aportan es básicamente, la excelente implementación de un valor añadido que es clave: la experiencia de usuario.

En el diseño de la arquitectura de los sistemas a alto nivel siempre hay que tener en cuenta el estudio previo de soluciones exitosas que se han aplicado con anterioridad. Es decir, antes de poder innovar y ser creativos en aspectos de diseño tiene que existir un estudio previo de otras arquitecturas que hayan funcionado no solo sobre el papel (por ejemplo, patrones de diseño).

Como se dice mucho en el mundo del desarrollo “hacer cajas es muy fácil”. Desde mi punto de vista es muy importante que las personas encargadas de realizar los diseños hayan experimentado el esfuerzo del desarrollo de software para tener conciencia de las implicaciones en cambios de diseño y esa experiencia debe haber sido real, con productos que han estado en producción en los que hayan surgido problemas reales, urgencias, cambios de requisitos, etc.

Todos tendemos a olvidar el esfuerzo necesario para realizar trabajos pasados y esta experiencia ayuda a recordar que las elecciones en el diseño pueden tener consecuencias de peso en nuestros productos.

Además, estas elecciones permiten tomar conciencia de la deuda técnica en la que se suele incurrir al diseñar y no implementar ciertas características técnicas necesarias en nuestros productos.

Características que por cuestiones de priorización a veces se relegan a un segundo o tercer plano y no se implementan. Esto es un riesgo real que aumenta con el tiempo y crecimiento del producto y nueva funcionalidad.

Por otro lado, a nivel de diseño de software, constantemente hay nuevas tendencias y un error muy común por querer construir algo novedoso a nivel técnico es el adoptar para todo las tecnologías que están en boga en un momento determinado.

La creatividad en el diseño de software tiene que ir de la mano de los requisitos del producto. Es decir, podemos pensar en un diseño muy creativo y novedoso pero no olvidar ciertas restricciones en relación a la implementación del producto que invalidan dicha solución en un momento dado.

Un ejemplo muy claro es la necesidad de tener en cuenta la variable tiempo. Habitualmente el éxito en el lanzamiento de un producto depende entre otros factores del momento de oportunidad. La ventana de oportunidad en el tiempo es crucial y está marcada por nuestros compañeros de marketing y negocio, cuyo conocimiento debe estar compartido con el equipo técnico para que todos los implicados en la construcción del producto tengan conciencia del time to market (el tiempo que se tarda en llegar al mercado).

También para ser creativo en relación al diseño creo importante lo que comúnmente se llama tener la mente abierta. Parece algo obvio, pero con el trabajo diario, tendemos a especializarnos y profundizar en tecnologías y en diseños, de forma que retrasamos los cambios sin poder evitarlo.

De alguna forma hay que abstraerse de nuestra experiencia pasada y pensar en cómo podríamos resolver esos mismos problemas cambiando el foco. Esto no quiere decir que siempre sea necesario realizar cambios en el diseño para cosas que funcionan demostradamente.

Pero en cualquier caso ese ejercicio de análisis cambiando el foco es muy valioso pues puede aportarnos puntos de vista que anteriormente no habíamos tenido en cuenta. Como decía Albert Einstein: “Si quieres resultados distintos, no hagas siempre lo mismo”.

Actualmente está en auge en psicología lo que se conoce como PNL (programación neuro-lingüística). Básicamente permite reeducar ciertos comportamientos no muy asertivos para cambiar y obtener mejores resultados a todos los niveles. Relacionado con estos temas recuerdo hace unos años el libro Quién se ha llevado mi queso que permite extraer conclusiones sobre cómo enfrentarnos al cambio constante y lo que aporta tener esa predisposición al mismo (ya que la vida es un cambio constante).

Por último, resaltar que la toma de conciencia creativa en todos los aspectos de un producto, desde su concepción hasta su implementación tiene mucha importancia. La implementación a veces despreciada, muchas veces es más creativa y constructiva que la propia definición del producto.

Todos sabemos que a veces llegan requisitos indefinidos al equipo de desarrollo. Por tanto, el desarrollador en este caso, conociendo las tripas del producto se pone en el rol del creador del producto para concretar ese requisito. Se trata de una mezcla entre dar la mejor solución técnica proporcionando una creatividad extra para contemplar además de los requisitos funcionales los requisitos técnicos.

Así que es un trabajo complejo que requiere un esfuerzo intelectual muy importante. Por este motivo se entiende que los programadores rehúyen las reuniones, evitan las interrupciones y necesitan mucha concentración para su trabajo. La pérdida de esa concentración implica perder y olvidar cosas que tienen en la cabeza y que pueden tener impacto en la implementación.

La tendencia actual de trabajar en espacios abiertos para este tipo de tareas tan intensas – intelectualmente hablando – desde luego que no son un beneficio para el desarrollador en este aspecto y es algo que debe considerarse con la perspectiva adecuada.