O arquiteto de software
Recentemente venho acompanhando o aumento da procura pelo “Arquiteto de software”, principalmente em plataforma .Net. Há 5 anos atrás parecia que o mercado tinha uma séria dificuldade em entender o que faz um arquiteto. De repente, parece que ele está virando a bola da vez.
Um dos sintomas desta procura são artigos como este: Best Jobs in America 2010.
Parece que de uns tempos pra cá após inúmeros projetos que precisam ser completamente reescritos porque as decisões de projeto e/ou falta de processos os levaram ao caos, o mercado vem procurando profissionais que conseguem corrigir, minimizar ou mesmo prever e evitar tais catástrofes. Talvez esta seja a principal razão pela busca de profissionais.
Mas afinal, o que faz um arquiteto de software?
Essa pergunta tem várias respostas e desconheço uma definição muito clara sobre o papel. Tem aquela clássica analogia com construção civil, ou seja, da mesma forma que na construção civil o arquiteto é quem planeja e projeta a construção, o arquiteto de software é quem faz as plantas e toma as decisões sobre como o software deve ser construido.
Na prática, eu gosto muito da definição dada no livro Microsoft .NET – Architecting Applications for the Enterprise: Arquiteto é o responsável por tomar as decisões de tudo aquilo que é muito difícil de mudar no software.
Faz bastante sentido.
Software como negócio
Querendo ou não, cada vez mais vemos o software não sendo vendido como produto final. No início o modelo de negócio era muito simples. O software era desenvolvido, a licença de uso era vendida. Negócio perfeito. Ganho por venda e meu estoque é infinito.
Os tempos foram mudando. Hoje em dia é praticamente impossível vender uma licença de uso de um software. Tem praticamente tudo de graça. Sistema operacional, web server, instant messaging, suítes do tipo “office”. Acho que a única empresa que ainda ganha com este modelo é a Microsoft. E ela vem tentando novos modelos.
De resto, vemos empresas que utilizam-se do software para vender publicidade (Google e grande parte da Web), dependem de tecnologia para reduzir custos operacionais (bancos, manufatura), venda de mão de obra (ERP’s) e consultoria. Existem muito mais integradores do que criadores de software.
Cada vez mais os modelos apontam para cobrar pelo uso do software, por transação trafegada pelo sistema, pelo serviço fornecido pelo software. Cada vez menos licenças de uso, cada vez mais cloud computing ou software as a service – SaaS.
Seguindo essa linha de raciocínio, cada vez mais o software é uma atividade que gera outros negócios ou apóia outros negócios. Muito pouco se vê sobre vender software como atividade final.
A arquitetura perfeita
As vezes conversando nos forums, com colegas de profissão eu percebo que como profissionais técnicos, vejo muitos arquitetos estão sempre buscando a solução de software perfeita. Aquele único modelo de arquitetura que atende todos os casos, é perfeito e impecável. A solução tamanho único. A excelência técnica.
Essa corrente de pensamento é bastante contrária ao cenário da evolução dos modelos de negócio apoiados em software, que é bem mais complexa e envolvem diversos outros fatores. Para alegria de alguns e desespero de outros, cada vez mais a tecnologia existe para suportar outros modelos de negócio. E dentro dessa ótica, não é somente a excelência técnica que vai fazer do software um produto de sucesso (apesar dela ser extremamente importante).
É só lembrarmos de tantos exemplos que tivemos na história, o maior de todos talvez seja o próprio Windows, que mesmo com suas inúmeras telas azuis em suas versões 95 e 98 tornou-se o sistema operacional mais popular, mesmo existindo diversas alternativas comerciais e gratuitas. Quando essas alternativas tentaram estabelecer-se no mercado, o Windows já o tinha dominado completamente.
O diferencial
Se somente o conhecimento técnico não é suficiente, quais são os outros atributos?
Muitas das decisões técnicas dos projetos não são somente decisões técnicas. Envolvem fornecedores, custos, aquisições, propriedade intelectual e tantas outras complicações que somente uma área tão complexa, dinâmica e com tantos conhecimentos específicos e distintos pode nos proporcionar.
Muitas dessas decisões são extremamente complexas para um executivo que não tenha tido vivência em posições técnicas no passado, ou mesmo não conseguiu acompanhá-la no nível de detalhe necessário. A comunicação necessária para ponderar riscos, custos e qualidade depende de um profissional que saiba trafegar muito bem na fronteira entre pensamento estratégico e conhecimento técnico. O arquiteto de software tem sido um grande colaborador nesta lacuna.
Além de suas habilidades técnicas, pode contribuir com muitos pontos durante uma reflexão estratégica para conceber um novo produto ou negócio:
- Time to market: O arquiteto pode ajudar a estabelcer a melhor qualidade possível do produto final garantindo que o mesmo esteja disponível a tempo de ser competitivo no mercado.
- Dependência de fornecedores: O arquiteto pode ajudar a avaliar se os componentes e tecnologias de terceiro estão no nível de maturidade necessário, ou se existe tendência de continuidade, bem como avaliar se os serviços contratados de terceiros possuem os padrões de qualidade necessários.
- Capacidade de evolução: O arquiteto pode ajudar a organizar o desenvolvimento de forma a prepará-lo para evolução sustentável.
- Experiência da equipe: O arquiteto pode ajudar a aproveitar as melhores qualidades ou contornar deficiências das equipes de desenvolvimento e produção, estabelecendo padrões e tecnologias condizentes com a experiência do time. Deve levar em consideração também o momento do mercado de profissionais, visto que atualmente fala-se muito no “apagão de profissionais”.
Essa lista é extremamente extensa e não-exaustiva.
Tendo todos estes fatores em mente, chego a conclusão que é muito difícil estabelcer uma arquitetura perfeita.
A começar pela idéia de que se perguntarmos para 10 pessoas diferentes qual é a arquitetura perfeita, provavelmente teremos 10 opiniões diferentes, levando em consideração somente o fator excelência técnica.
Aqui está o principal diferencial do bom arquiteto: saber ouvir os principais stakeholders do projeto, compreender suas necessidades, ser colaborador atuante no processo de reflexão estratégica e conseguir levar estas decisões para o time técnico na linguagem apropriada e no nível de detalhe apropriado.
O primeiro passo para estabelecer uma arquitetura bem-sucedida é conseguir visualizar todos estes atributos e traçar os objetivos desejados, levando em consideração o momento da empresa, do mercado, da disponibilidade de mão de obra, dos fornecedores e da tecnologia em questão. Somente tendo este ponto de partida, é possível escolher os padrões e tecnologias que resultem numa solução equilibrada e num produto de sucesso.
Muito bom o post, parabens!
Muito bacana o post. Realmente este é um assunto recorrente e que gera bastante discussão nas empresas.
Eu acho que uma arquitetura legal é aquela que te possibilita estender ou ampliar a medida que as necessidades vão surgindo. O que o pessoal vem chamando de arquitetura emergente. Mas, isso só é possível se alguns princípios de design e boas práticas tiverem sido adotados desde a concepção do software. Isso não é um trabalho fácil de se fazer e nem trivial. Você precisará de uma equipe muito boa e disciplinada.
Abraços,
Tiago Sciencia
Tiago,
Muito obrigado pelo comentário. Bacana o seu blog também.
Eu concordo contigo sobre o tema “arquitetura emergente”. O ideal mesmo é deixar a coisa toda preparada para crescer, o que não é nada fácil.
A minha intenção com esse post foi realmente reforçar os aspectos de características “extra-técnicas” que cada vez mais estão se tornando pré-requisitos nos arquitetos, ou seja, a capacidade de não só definir uma boa arquitetura (básica) mas conseguir articular, disseminar e reforçar o alinhamento dessa arquitetura com os objetivos estratégicos, a disponibilidade de recursos e a disponibilidade de profissionais capazes.
Abraço,
Eric
Eric,
Ótimo post, eu acrescentaria que a arquitetura é mais um aspecto (talvez o mais importante) que deve ser decidido sobmedida ao business needs daquela situação.
Pensando em arquitetura na construção civil, um arquiteto vai propor uma solução bem bacana para uma família de classe média que tem que construir uma casa de 80m2, pois essa família tem as suas limitações (leia-se business needs). Esse mesmo arquiteto pode oferecer uma solução diferente para uma família de classe AAA para uma casa de 700m2 (não que essa família não tenha limitações, não é isso só são outros Business Needs).
Excelente post!
parabéns 🙂
Conteudo relevante e muito bem escrito!
Abs,
Rodolpho Sá
muito bom !