Os arquitetos devem tomar decisões de design no início de um ciclo de vida do projeto. Muitas destas decisões são difíceis de serem validadas e testadas até que o sistema, ou pelo menos parte do sistema, seja efetivamente construída. Realizar a prototipação criteriosa de componentes chaves para a arquitetura pode ajudar a aumentar a confiança em uma determinada abordagem de design, mas às vezes ainda é difícil ter certeza do sucesso de uma escolha de design especial em um determinado contexto de aplicação.
Os padrões são uma representação abstrada de uma arquitetura, uma vez que eles podem ser atingidos de várias formas durante a implementação. Por exemplo, a arquitetura padrão de publicação-assinatura (publish—subscribe) descreve um mecanismo abstrato de baixo acoplamento, comunicações muitos-para-muitos (many-to-many) entre editores de mensagens e assinantes que desejam receber mensagens. No entanto, não especificam como publicações e assinaturas são gerenciadas, que protocolos de comunicação são utilizados, quais os tipos de mensagens podem ser enviados, e assim por diante. Estes são todos considerados detalhes de implementação.
Em virtude deste nível abstrato, no meio acadêmico, há uma série de discussões a respeito de modelos arquiteturais. Alguns destes modelos nem mesmo são capazes de serem implementados de forma concreta pelos engenheiros de software.
Felizmente, a indústria de software teve um direcionamento mais prático. Padrões de arquitetura amplamente utilizados são suportados em uma variedade de estruturas pré-construídas e disponíveis, seja através de tecnologia comercial, seja por meio de tecnologia open source. Saiba+
De qualquer forma, se um projeto necessita de uma estrutura de publicação-assinatura (publish—subscribe) de mensagens, broker de mensagem ou de uma arquitetura de três camadas, as opções de tecnologia disponíveis são muitas e variadas. Este é um exemplo de tecnologias que fornecem infraestruturas de software reutilizáveis e comprovadas tecnologicamente.
X