jueves, 30 de septiembre de 2010

¡Complica lo complicado!


Imaginemos el siguiente escenario: Un arquitecto de software presentando su flamante y enmarañado diseño ante el jefe de una empresa, el cual se queda impactado al ver tantos símbolos en tan poco espacio, definitivamente nunca había visto un diseño tan 'completo', 'novedoso' y 'admirable'. Es más, desea que dicho modelo se presente ante el cliente en la reunión de avance del proyecto de esta semana y exclama exaltado: 'Definitivamente los clientes quedarán muy impresionados al ver este diseño, y así entenderán lo complicado de nuestro trabajo. Felicidades Arquitecto'.
¿Ya se lo imaginaron? pues ahora analicemos como este comportamiento nos ayuda a lograr nuestro objetivo del blog. Ciertamente en muchas ocasiones nos complicamos demasiado la vida, somos adictos a la complejidad, lo complejo nos atrae, ver algo complejo nos seduce y nos hace pensar 'eso debe ser muy bueno, porque se ve bastante complejo'.
El manejar un automóvil es algo muy sencillo, la abstracción es muy adecuada a la naturaleza humana, no nos preocupamos de como funciona, simplemente lo utilizamos (por ello ruego que nunca me falle el carro ya que no sabría que hacer, a duras penas sé como llenar el tanque de gasolina y ni siquiera sé calibrar una llanta). En un software el nivel de abstracción debe ser de la misma manera, el cliente debería operar la interfaz de usuario de una manera natural, sin preocuparse de como fue construida, pero regresando al tema, el hecho de tener un diseño exageradamente complejo, aparte de apantallar al cliente (y a uno que otro jefe) va a provocar muchos problemas en el desarrollo del software y verdaderos dolores de cabeza a lo largo del proyecto.
Un diseño demasiado complejo nos va a retrasar en la mayoría de nuestras actividades, inclusive en aquellas de planeación y control, ya que nos va a orillar a las prisas y posiblemente dejemos de realizar ciertas actividades (pruebas, SQA por mencionar algunas) para poder cumplir con la fecha de entrega y conforme al diseño. Por naturaleza todas las decisiones de diseño son ya de por si complejas, existen demasiadas cosas que debemos considerar y debemos de tener en cuenta que estas decisiones afectaran a todo el proyecto (y al costo del mismo). La misma arquitectura puede incluso disminuir o incrementar los riesgos de un proyecto, es por ello que la elección de buenas decisiones es vital. Un diseño demasiado complejo se verá reflejado en un esfuerzo mayor de desarrollo, y por lo tanto todo lo que conlleva: pruebas, integración, mantenimiento, etc. El costo ni se diga, veremos como se eleva rápidamente hacia las fases finales del proyecto (al igual que el riesgo).
El tener buenas decisiones de diseño nos traerán beneficios, y las malas decisiones consecuencias. Entonces es un hecho que tenemos que administrar la complejidad, y sobre todo, definir nuestras abstracciones adecuadamente, ya que en una aplicación a gran escala la complejidad se eleva exponencialmente y se convierte en un factor crítico para el éxito de nuestro proyecto.
Lo anterior me hace pensar en la verdadera importancia y responsabilidad de un arquitecto de software y la importancia de las decisiones de diseño que va tomando a lo largo del proyecto, ya que deberá estar administrando la complejidad durante todo el ciclo de vida. Y también me hace pensar en la responsabilidad que tiene el administrador del proyecto de conocer y estar consciente de la complejidad del diseño, ya que esta influirá directamente sobre los recursos que se necesitaran durante el proyecto, tales como personas, tiempo y presupuesto.
Cabe recalcar la importancia de la abstracción, ya que esta nos llevará a tener interfaces más simples, y la falta de la misma nos llevará a una complejidad excesiva del sistema y muy posiblemente al fracaso de nuestro proyecto, por lo tanto... ¡Vamos a complicar lo complicado!

No hay comentarios:

Publicar un comentario