Todo ano a CNN Money, juntamente com o site PayScale, lançam a lista de melhores empregos das Américas, e há pelo menos cinco anos o arquiteto de software aparece com grande destaque na compilação (aqui a lista do ano passado). Embora seja uma função relativamente nova, vem crescendo muito no decorrer dos últimos anos e ganhando cada vez mais espaço no mercado de trabalho. Mesmo assim ainda vejo muitas pessoas fora da tecnologia da informação perguntando-se o que exatamente faz esse profissional.
Pensemos no seguinte cenário, rotineiro em qualquer início de projeto: o escopo do trabalho está definido com tudo o que precisa ser realizado, sabemos quem é o cliente final do produto, é criado o plano de releases e entregas, montada a equipe técnica (desenvolvedores e testadores), definido um método de trabalho e, finalmente, iniciada a execução do projeto. Embutido nesse planejamento, de preferência antes do começo do desenvolvimento, é necessário pensar em todas as camadas e módulos que farão parte da solução final, além de possíveis integrações com outros sistemas e serviços, dependências externas, utilização de componentes pré-existentes, frameworks de mercado, banco de dados, entre outras minúcias que somente aumentam a complexidade da plataforma que será criada.
Nesse ponto que entra o arquiteto de software: montar a melhor solução técnica para o projeto, sempre buscando atender as expectativas do cliente dentro do prazo e custo estimados. Por isso deve estar sempre um passo adiante do time de desenvolvimento, analisando e equilibrando as variáveis que fazem parte do negócio frente a todas as (in)definições técnicas que surgirem. Além disso, o profissional deve atuar como um líder e possuir um bom conhecimento sobre o nível da própria equipe, para ter plenas condições de montar uma solução que não seja exageradamente complexa, onde ele seja o único que a entenda, nem simples demais que não atenda os requisitos do produto ou sistema.
A grande maioria dos clientes não está interessada como será a plataforma, preocupando-se no fim apenas com o resultado entregue. Essa deve ser uma responsabilidade da equipe técnica, centralizada na figura do arquiteto de software. Assim, a estrutura montada deve ser flexível o suficiente para que novas “caixas” possam ser acopladas sem demasiado esforço e a posterior manutenção não seja uma dor-de-cabeça a cada mudança. Não é preciso ter todas as respostas logo de saída, mas é sempre aconselhável deixar a casa arrumada caso isso seja necessário no futuro. Nenhum profissional dedicado é o mesmo depois de alguns anos. Com certeza um código que fiz no passado é muito menos estruturado e pior do que um código que escrevo hoje. Uma arquitetura que foi criada de maneira errática anteriormente e que não seja possível modificá-la nesse momento, pelo menos serviu para uma coisa: saber para qual caminho não devo seguir.
Um detalhe que venho notando é que inúmeros desses profissionais são apenas pagos para ditar regras e padrões para suas equipes de desenvolvimento, mas muitas vezes esses mesmos sujeitos não sabem onde colocam um ponto-e-vírgula no próprio código. Acredito que todo arquiteto deve saber programar com alguma desenvoltura e sujar as mãos quando for preciso, até mesmo para colocar à prova toda a plataforma que foi planejada para o produto. Como saber se um framework é o mais indicado para aplicar em determinada situação? Como ter certeza se um padrão de projeto é mais adequado para solucionar um problema se não o tiver posto em prática?
Nenhum profissional deve ser tratado como um ser intocável, que vive em um pedestal acima de todo mundo, e o arquiteto de software não é diferente. A arquitetura de um sistema deve ser debatida e analisada por todo o time técnico. Todos devem ter a noção do que está sendo proposto e ter a liberdade de sugerir modificações e/ou melhorias. Cada um tem suas próprias experiências profissionais e o debate sadio deve ser sempre exaltado dentro de um ambiente profissional entre todos os envolvidos.
Se olharmos novamente a lista de melhores empregos, notaremos que o desenvolvedor/programador também aparece como um dos profissionais mais valorizados atualmente. Todos possuem suas próprias preocupações e responsabilidades, mas ninguém é dono da razão sobre qualquer tema. Somos todos partes importantes da mesma engrenagem.
[Crédito da Imagem: Arquiteto de Software – ShutterStock]