Es el diseño de más alto nivel compuesto por una serie de patrones que buscan satisfacer los requerimientos funcionales y no funcionales de un sistema.
La arquitectura debe definir la comunicación entre cada uno de sus componentes.
Existen una serie de patrones y estilos arquitectónicos que nos ayudan a dar solución a diferentes problemas.
Es el rol que se desempeña dentro de un equipo de TI para proponer, diseñar y trabajar en conjunto con el equipo de desarrollo las decisiones de diseño, definiciones de los atributos de calidad, lineamientos y los elementos fundamentales para la arquitectura (lenguajes de programación, infraestructura, QA e integraciones).
Debe conocer los requerimientos funcionales.
Se debe involucrar en la creación del diseño.
Debe pedir que lo involucren en tareas pequeñas de código.
Se puede involucrar de 3 maneras:
Desarrollar componentes pequeños
Pair programing
Code review
Plataformas cloud.
Tecnologías.
Lenguajes de programación.
Patrones de arquitectura y diseño
CI/CD
Experiencia como desarrollador (full stack)
Habilidades blandas
Agilidad
Confiabilidad
Despliegue
Disponibilidad
Escalabilidad
Facilidad de desarrollo
Interoperabilidad
Mantenibilidad
Testing
Seguridad
Usabilidad
Rigidez (hacer un cambio toma mucho trabajo)
Fragilidad (un cambio daña otros módulos - acoplamiento)
Inmovilidad (no se pueden reutilizar componentes en diferentes sistemas)
Viscosidad (cuando hacer las cosas mal es más fácil)
Complejidad innecesaria (no anticiparse a problemas que aún no existen)
Repetición innecesaria (código repetido)
Opacidad (el código no te dice que está pasando)
Experiencia