Estabelecendo a estratégia arquitetural

Entendemos que o arquiteto de software é o estrategista técnico do produto de software. O arquiteto de software (ou time de arquitetura) deve ser capaz de estabelecer, planejar e executar uma estratégia técnica para o software para atingir a visão do produto. Neste post, iremos discutir sobre o desenvolvimento da estratégia arquitetural.

Do desenvolvimento da estratégia à execução

Do desenvolvimento da estratégia à execução

Há algum tempo discutimos sobre a necessidade de definir uma visão da arquitetura do software, isto é, onde a arquitetura pretende chegar e como ela irá contribuir para concretizar a visão do produto. A visão arquitetural declara os objetivos pretendidos com a arquitetura. Também é interessante que a visão contemple princípios arquiteturais a serem seguidos, norteando os arquitetos e disciplinando suas atividades. A visão deve ser suficiente para provar que a equipe é capaz de desenvolver o projeto e conseguir o patrocínio.

 

Em seguida, convém que o time de arquitetura realize uma análise estratégica e descubra quais são as questões-chave para a arquitetura – as quais chamaremos de diretrizes arquiteturais. O time deve promover discussões com os stakeholders, investigando os interesses envolvidos, e analisar o contexto do projeto e organizacional de forma a revelar todas as forças quem podem influenciar o produto. Nesta análise, é imprescindível identificar e tratar riscos técnicos – cuja mitigação deve envolver o gerente do projeto. Invariavelmente o contexto dos projetos de desenvolvimento de software é permeado por oportunidades e ameaças como, por exemplo, prazos políticos, restrições tecnológicas, expertise do time de desenvolvimento, patrocínio, etc. Ao final desta atividade, o time deve contar com um conjunto de diretrizes arquiteturais. Ou, até mesmo, indicar que um projeto é inviavel tecnicamente dentro de tal contexto.

De posse das diretrizes arquiteturais, o time de arquitetura deve formular a estratégia. Atualmente a formulação de uma estratégia arquitetural pode ser considerada uma arte, dependendo muito da experiência da equipe. De uma forma geral, é importante identificar uma estratégia que atenda às diretrizes. Ao formular a estratégia, o arquiteto de software ou o time de arquitetura deve levar em consideração as experiências pregressas e se perguntar “qual estratégia melhor poderá responder às diretrizes arquiteturais?”  Estilos e padrões arquiteturais, sejam públicos ou de conhecimento do arquiteto, podem conduzir a escolha pois aproveitam experiências bem sucedidas. O principal produto desta atividade é a escolha dos principais mecanismos arquiteturais seguida de orientações sobre como desenvolvê-los.

O planejamento da definição arquitetural permite que a estratégia seja traduzida em ações culminando em um plano detalhado. O plano de definição arquitetural organiza a decomposição dos subsistemas, módulos ou componentes do sistema de software. Este plano deve ser fomentar à Estrutura Analítica do Projeto (EAP ou WBS, em inglês), auxiliando o gerente de projeto à organizar as atividades de um projeto dirigido pela arquitetura.

Enfim, a execução da estratégia arquitetural é caracterizada pelas atividades de gestão de requisitos arquiteturais, modelagem arquitetural e avaliação de arquiteturas. Note que o ciclo formado tem forte relação com o ciclo de PDCA. Na execução, o emprego de táticas arquiteturais – sejam de mercado, acadêmicas ou conhecidas pelo arquiteto – consolida a definição arquitetural. Mas isto já é uma outra (longa) história…

Planejamento e execução arquiteturais

Planejamento e execução arquiteturais

Referências:

  1. What is Strategy? - Michael Porter
  2. The Execution Premium – Kaplan e Norton 
  3. Creating An Architectural Vision – Malan e Bredemeyer
  4. The customer objectives view – Gerrit Muller
  5. System Architecting – Gerrit Muller

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>