Arquitectura de software. Rememorando…

Al hablar de la arquitectura de software, no puedo evitar recordar mis primeros semestres de universidad. Mientras veíamos los conceptos básicos para algunas materias de ingeniería de sistemas, los profesores y algunos autores en sus libros hacían comparaciones entre el desarrollo de software y la arquitectura civil, por ejemplo, hacer la casa de Rocco (el mejor amigo del hombre) vs hacer un edificio. Aunque hacer la casa del Rocco no parezca algo muy complejo, si en un inicio no se planea bien, terminara cayéndose o en un estado pésimo para nuestra mascota. 

Expectativa vs realidad

Los roles de un arquitecto civil y de un arquitecto de software de cierta manera son muy similares, y se pueden llegar a enfrentar a los mismos retos. Por ende, para poder construir software/edificios se necesitan conocimientos y habilidades básicas dependiendo del caso. Porque si algo está claro es que esto:


No es lo mismo que esto:


Pero también es claro que en ninguno de los casos queremos que se caigan. Entonces, ¿Qué herramientas, personas, presupuesto, conocimiento y tiempo necesitamos para cada escenario? Pues bien, es importante recalcar que estas mismas consideraciones (las que se tendrán para definir la arquitectura del edificio), deberán ser tenidas en cuenta al momento de desarrollar software y definir su arquitectura.

Otro ejemplo que no podré olvidar de aquellas primeras clases es el de la Mansión Winchester (No olvido la historia, pero definitivamente el nombre de la mansión siempre se escabulle, por más famosos que sean los rifles). En resumen, la historia nos cuenta que una viuda con mucho dinero en su poder, y de la que se podría desconfiar de su cordura, durante 38 años mando a realizar construcciones y remodelaciones a su mansión. Como resultado se obtuvo una mansión con “160 cuartos, incluyendo 40 habitaciones, 7 pisos, 476 puertas, 6 cocinas, 52 tragaluces y 2 vestíbulos. También incluía 47 chimeneas (2 encontradas), 10.000 ventanas con paneles, 2 sótanos, 3 ascensores y lámparas de gas que se encendían con un botón. Contaba con sólo una bañera y dos espejos en toda la casa…”.


Hasta ahí la historia no parece tan mal, una viuda que mando a construir una casa enorme, el problema es que al parecer no contaba con un muy buen arquitecto ya que algunas ventanas y puertas dan a paredes, las escaleras no llevan a ninguna parte, puertas en medio de ventanas, entre otras peculiaridades. Si me llego a equivocar con algunos datos de la mansión me corrigen o las omiten, ya que así el ejemplo para este caso sale a la perfección 😅😅.


La construcción de software puede llegar tener estos mismos problemas si no se cuenta con un buen arquitecto de software en el proyecto y peor aún, cuando a un desarrollador le asignan mejorar o corregir un proyecto del que no se cuenta documentación y en su momento su arquitectura tenía fallas. Este desarrollador/arquitecto elegirá reconstruir algunas partes del código o crear nuevas extensiones sin tener en cuenta lo que ya existía. Al final esa aplicación de software se convertirá en la unión de diferentes retazos, algo similar a la Mansión Winchester.

“Programar sin una arquitectura en mente es como explorar una gruta sólo con una linterna: no sabes dónde estás, dónde has estado ni hacia dónde vas” - Danny Thorpe

Con esto podemos entender que la arquitectura de software es la base de un proyecto de software. Esta arquitectura debe ser construida pensando en satisfacer las necesidades actuales, sin dejar de lado las posibles evoluciones o mantenimientos que se requiera, según el modelo de negocio y/o solicitudes de los clientes.

Línea de aprendizaje del Arquitecto de Software.

Mientras que un arquitecto civil puede ser muy bueno en su trabajo sin saber fundir unas bases, levantar una pared o un techo, un arquitecto de software si debió pasar por este proceso y haber programado alguna vez, ser coordinado por un arquitecto y haber ganado algo de experiencia de él. En la arquitectura de software no vale solo tener la teoría sin haber realizado algo de práctica.

De la experiencia como desarrollador le debe quedar a este futuro arquitecto, cual es la mejor manera de realizar un desarrollo en equipo y cuál era el mejor método que seguía el equipo para cumplir las indicaciones del arquitecto. Siempre buscando el éxito del proyecto.

Algunas consideraciones…

  • En la arquitectura de software, siempre se debe dar prioridad a lo crítico e importante del proyecto. Las necesidades generales del sistema serán resueltas en ultimo.
  • Un Arquitecto de Software, se encarga de elegir las estrategias y herramientas necesarias para satisfacer los requerimientos funcionales y no funcionales del sistema.
  • Un Arquitecto de Software, debe ser capaz de identificar las necesidades del negocio.
  • Un Arquitecto de Software, debe ser capaz de identificar las habilidades de su equipo de trabajo.
  • Un Arquitecto de Software, debe ser capaz de identificar la viabilidad de las tecnologías disponibles.
  • Un Arquitecto de Software, debe ser capaz de identificar las condiciones a las que será sometido su sistema y pensar en las posibles soluciones para cada escenario. 

El ámbito de la arquitectura de software es mucho más amplio de lo que logro expresar en esta entrada de Blog, pero considero que puede transmitir una idea general y llegar a dejar una pisca de curiosidad en quien lo lea. Quizás en una entrada futura profundice en un capítulo específico de este mundo, por ahora espero lograra mi cometido y generarles más consultas sobre el tema. 

Comentarios

Entradas populares