Estratégia e Tática em Arquitetura de Software

Por que tantos projetos de software não dão o retorno de investimento esperado, mesmo contando com equipes bem capacitadas e gestores competentes? A resposta pode estar na confusão entre Estratégia e Tática.

Neste artigo defendo a tese de que software é apenas uma tática empregada por organizações para atingir seus objetivos estratégicos. Quando este princípio é esquecido, diversos problemas podem acontecer.

Definindo Estratégia e Tática

A Wikipedia define Estratégia como "um plano em alto nível para atingir um ou mais objetivos em condições de incerteza".  Já o termo Tática é definido de forma menos tangível como "uma ação conceitual implementada como uma ou mais tarefas específicas".

Para tornar mais claro o significado destes dois termos, vamos considerar um domínio no qual eles aparecem de forma bastante clara: o jogo de Xadrez.

Quando alguém começa a aprender a jogar Xadrez, rapidamente percebe que é impossível calcular antecipadamente todos os movimentos possíveis para escolher a melhor jogada em um dado momento. O número de possibilidades cresce exponencialmente a cada novo movimento que tentamos predizer. Isto acontece porque não temos como saber como nosso adversário vai mover suas peças em resposta aos nossos movimentos. A incerteza criada por este fato é o que torna o Xadrez um jogo fascinante. Mesmo um grande mestre ou um supercomputador não são capazes de prever todas as possibilidades, nem mesmo na mais simples das partidas.

O que fazer então? Estudiosos de Xadrez ao longo dos séculos se debruçaram sobre este problema e concluíram que a melhor solução é adotar uma Estratégia: um plano que leve em conta a incerteza e que possa ser executado em linhas gerais independentemente de como o oponente decida reagir. 

A principal Estratégia utilizada no Xadrez moderno é o domínio do centro do tabuleiro: uma peça posicionada no centro do tabuleiro possui um raio de ação superior à mesma peça posicionada fora do centro.  Assim, se um jogador conseguir dominar as casas centrais do tabuleiro de Xadrez , ele terá mais oportunidades de ataque que o adversário, o que aumenta consideravelmente as chances de vitória.

Casas centrais em um tabuleiro de Xadrez

 Assim, esta estratégia pode ser formulada de maneira bastante simples: "Controle as posições centrais do tabuleiro a fim de  aumentar as possibilidades de jogadas vantajosas". Este torna-se então um objetivo estratégico do jogador.

O objetivo estratégico descreve em linhas gerais a estratégia a ser utilizada para atingir a vitória, mas não diz nada sobre os movimentos detalhados necessários para alcançar este objetivo. Este é o território da Tática.

Os estudiosos de Xadrez, partindo deste objetivo estratégico, criaram uma infinidade de Táticas (que em  Xadrez são chamadas de Aberturas) para tentar atingir este objetivo. Cada Abertura é um conjunto detalhado de movimentos que leva em conta as diversas possibilidades de reação do oponente.

As Aberturas podem ser muito diferentes umas das outras, mas se você souber a estratégia por trás fica claro que os movimentos são na verdade uma luta pelo controle do centro do tabuleiro.   

King's Gambit 
King's Indian Defence

 Software = Tática

Todo sistema de software é em última análise uma Tática. Nenhuma organização desenvolve ou paga pelo desenvolvimento de sistemas de software como um fim em si. Sistemas de software são meios através dos quais as organizações planejam atingir seus objetivos estratégicos.

A ignorância deste fato é s razão de muitos dos problemas encontrados na execução de projetos de software. Se a Arquitetura de um sistema de software não coloca a estratégia da organização como uma prioridade então é bem provável que o produto final não será uma boa tática para atingir os objetivos estratégicos. A consequência disso é bem conhecida: sistemas que, apesar de serem desenvolvidos por equipes técnicamente competentes, não entregam o valor esperado. 

Se Software é tática então, para desenvolve-lo, é preciso conhecer bem as estratégias que motivam o seu desenvolvimento. Considere por exemplo um sistema de Controle de Estoque. Organizações diferentes desenvolverão sistemas de Controle de Estoque com características bem distintas se colocarem seus objetivos estratégicos como a principal prioridade.  Na tabela abaixo são listadas diferentes conjuntos de decisões arquiteturais que provavelmente seriam tomadas para  objetivos estratégicos diferentes.   É fácil concluir que um sistema que atenda às necessidades de uma organização não vai necesáriamente atender às necessidades das outras.

Objetivo Estratégico Decisões Arquiteturais

Aumentar a eficiência das operações através da diminuição do 
tempo necessário para retirar  mercadorias do estoque.

  • Priorizar operações de retirada de estoque.
  • Disponibilizar métricas de tempo médio, mínimo e máximo de retirada de mercadorias.
  • Criar mecanismos de contingência que permitam a retirada de mercadorias mesmo em casos de indisponibilidade do sistema.
Reduzir despesas com perda de mercadorias através de um controle de estoque mais rígido. 
  • Priorizar o controle de prazos de validade.
  • Adotar mecanismos automatizados de tracking de produtos (código de barras, RFID etc.).
  • Priorizar a rastreabilidade das mercadorias desde o recebimento até a saída do estoque.
Reduzir custos com estoque através da adoção de práticas "just-in-time"
  • Priorizar integração com fornecedores.
  • Criar mecanismos de contingência para a comunicação com fornecedores (cada integração precisa de pelo menos dois  caminhos redundantes).
  • Priorizar o planejamento e envio das ordens de compra para os fornecedores.
  • Criar mecanismos de previsão e alerta sobre o nível de estoque mercadorias.
Minimizar os custos de transporte através da consolidação de pedidos de clientes 
no menor número possível de entregas. 
  • Priorizar integração com sistema de vendas.
  • Criar mecanismos de otimização de centros de distribuição.
  • Criar mecanismos de previsão de nível de estoque de items mais vendidos de forma a aumentar a probabilidade de todos os items de um pedido estarem no mesmo centro de distribuição.

 

A visão de software como Tática coloca em xeque o conceito de Arquitetura de Referência, que seria uma Arquitetura padrão adotada por uma organização em todos os seus sistemas de software. Isto somente seria possível se todos os sistemas forem táticas para atingir os mesmos objetivos estratégicos.  Isto raramente acontece, pois as diferentes áreas de uma organização possuem objetivos estratégicos diferentes. 

 Decisões Táticas

 No jogo de Xadrez, as Aberturas são compostas por sequências detalhadas de movimentos. Para cada resposta possível do adversário existem diversas possibilidades de continuação. Só é possível decidir em detalhes os próximos movimento após avaliar as respostas do adversário. 

Da mesma forma, a construção de sistemas de software exige a tomada de um grande número de decisões. Algumas decisões podem ser tomadas de antemão, outras são necessárias como resposta a situações emergentes. No Xadrez, a escolha do próximo movimento em uma Abertura deve levar em conta as reações do adversário até o momento. Em Software, as escolhas  devem ser guiadas não só pelo objetivo final mas também pelo contexto atual (disponibilidade de pessoal, familiaridade com a tecnologia, maturidade, contexto histórico etc.).

Um erro comum em Arquitetura de Software é se apegar a determinadas escolhas táticas por razões históricas ou preferência pessoal, ignorando opções que podem ser mais vantajosas em um dado contexto. Algumas escolhas táticas comuns incluem:

As melhores decisões táticas são as que maximizam os ganhos no curto prazo sem sacrificar os objetivos estratégicos. 
Por exemplo, usar sempre a mesma Plataforma ou Linguagem de Programação em todos os sistemas pode trazer uma série de vantagens em termos de produtividade, uma vez que a equipe estará sempre utilizando ferramentas com as quais possui muita familiaridade. No entanto existe o risco de promover uma cultura organizacional que desencoraja a experimentação, o que pode paralizar os processos de invovação. A falta de inovação por sua vez pode abrir espaço para que concorrentes mais arrojados conquistem mercado utilizando táticas mais eficientes.
 
 

 

 Juliano Viana

Juliano Viana é Bacharel em Ciência da Computação pela UFMG. Atua como Arquiteto de Software há mais de 10 anos, possuindo experiência em verticais diversos como Telecomunicações, Engenharia, Finanças e Saúde em sistemas implantados no Brasil, Estados Unidos, Inglaterra e Perú.

 

comments powered by Disqus