Concepto: Enfocarse en articular la arquitectura
Articular las decisiones técnicas escenciales a traves de una arquitectura creciente.
Relaciones
Descripción principal

Introducción

Sin una fundamento arquitectónico, un sistema evolucionará en una forma ineficiente y casual. Tal sistema frecuentemente presenta dificultades para evolucionar, reutilizarse o integrarse sin una reconstrucción sustancial. Esto también dificulta organizar el equipo o comunicar las ideas sin el enfoque técnico común que la arquitectura proporciona.

Por consiguiente, use la arquitectura como un punto focal para que los desarrolladores alineen sus intereses e ideas, articulando las decisiones técnicas escenciales a traves de una arquitectura creciente.

Prácticas

La siguiente sección describe las prácticas asociadas con este principio.

Cree la arquitectura para lo que usted conoce hoy

Como Albert Einstein dijo, haga cada cosa tan simple como sea posible pero no más simple. Los proyectos de software tienen recursos restringidos, y el deseo de los desarrolladores por crear soluciones elegantes podría llevar a un sistema de mayor complejidad de la que los stakeholders solicitan. Los esfuerzos de correguir en un futuro un sistema en un ambiente turbulento o incierto probablemente condicirá a un código sobrecargado, mientras se aumentan los sobrecostos con poco beneficio real que mostar por esto.

Por consiguiente, cree arquitecturas que se orienten a las necesidades reales de los stakeholders y provean la flexibilidad apropiada y apresurece por los requisitos como se conocen hoy. Evite el deseo, sin importar que tan bien intencionado sea, de especular sobre requisitos futuros y por eso sobre dimensionar la arquitectura: si usted tiene la habilidad para hacer la arquitectura de algo hoy, entonces claramente usted podrá tambien tener la habilidad de hacer esta arquitectura mañana cuando usted realmente necesite hacerla.

Sobrelleve la complejidad elevando el nivel de abstracción

El software es complejo, y las personas tienen una capacidad limitada para sobrellevar la complejidad. A medida que un sistema se hace grande, empieza a ser dificil para el equipo desarrollar una comprensión común del sistema, porque es difícil ver todo el panorama completo.

Por consiguiente, use modelos que eleven el nivel de abstracción enfocandose en problemas importantes de alto nivel, tales como relaciones y patrones, en lugar de sumerguirse en los detalles. Modelar realza el nivel de abstracción y permite al sistema ser más fácil de entender desde diferentes perspectivas.

Permita al problema diriguir la solución

La arquitectura podría empezar a ser difícil de mantener y adaptar a las nuevas necesidades de los stakeholders cuando la tecnología, en lugar del problema, dirije la solución

Por consiguiente, permita que las necesidades de los stakeholders guíen la arquitectura. 

Organice la arquitectura con bajo acoplamiento, componentes altamente cohesionados

Un alto acoplamiento entre componentes hace un sistema fragil y dificil de entender. El software es costoso de crear, de modo que si existen componentes que pueden ser reutilizados, estos pueden reducir el esfuerzo requerido para crear el sistema.

Por consiguiente, organice la arquitectura del sistema en los componentes que maximizan la cohesión y minimizan el acoplamiento. Esto mejora la comprensión, incrementa la flexibilidad e incrementa las oportunidades de reutilización.

Reutilice resursos existentes

Es malgastador construir lo que usted puede simplemente reutilizar, descargar o aún comprar.

Por consiguiente, haga cada esfuerzo para reutilizar recursos existentes. Los desarrolladores son frecuentemente renuentes a reutilizar recursos, porque estos recursos no se ajustan exactamente a sus necesidades o esos recursos tienen poca calidad. Este preparado para balancear el ahorro que usted puede realizar usando un recurso existente, aún si el recurso requiere cambiar la arquitectura o suavizar una restrición.

Apalanque la arquitectura como una herramienta colaborativa

La falta de un entendimiento común de los desarrolladores acerca de un sistema, conduce a la indecisión y a opiniones contrarias entre los desarrolladores y se puede paralizar el proyecto rápidamente. Los desarrolladores pueden tener diferentes modelos mentales del sistema y trabajar propósitos cruzados el uno del otro.

Por consiguiente, cree y evolucione la arquitectura del sistema con la intención de usarla para alinear los modelos mentales encontrados de los desarrolladores del sistema. Una buena arquitectura facilita la colaboración manteniendo un vocabulario común para todas las discuciones con respecto al sistema en desarrollo.