Sobre o papel do especialista e do generalista na área de TI
Autor: Edmundo | Publicado: 2011-09-02T06:34:00-07:00

Em Dados e usuários acima do hardware e software, há um comentário questionando: "Então os administradores de dados estavam certos?". Esse questionamento me inspirou a expressar minha visão sobre o papel do especialista e do generalista na área de TI (Tecnologia da Informação).
Para prestarmos um bom (ou excelente) serviço de TI, precisamos conhecer nosso cliente e suas necessidades de informação. Se focarmos muito nas questões tecnológicas e não prestarmos a atenção devida ao nosso cliente, poderá ser um pouco dramático quando nos dermos conta de que as necessidades de nosso cliente não estão sendo atendidas por nossa "solução" (vai ver que as necessidades dele mudaram, vai ver que o cliente mudou, vai ver que o mercado já oferece uma solução mais adequada etc.).
No parágrafo anterior, escrevi na primeira pessoal do plural (nós) para dar a noção de uma equipe prestando um serviço de TI e de que "conhecer nosso cliente" é um problema ou necessidade dessa equipe, não necessariamente de um indivíduo ou especialista.
Nesse ponto, já é possível perceber a necessidade de consistência entre a visão geral, externa, e a visão técnica, interna, do(s) serviço(s) a ser(em) prestado(s). O ideal seria que o profissional de TI tivesse tempo e trranquilidade para se dedicar às duas visões. Porém, a realidade das organizações que se beneficiam da TI vem desafiando esse profissional com serviços cada vez maiores ou mais complexos (às vezes, críticos). Nesse contexto, surge então a necessidade de distribuir responsabilidades.
Alocar especialistas (designers de interação, arquitetos de software, programadores, especialistas de teste, especialistas em bancos de dados etc.) parece ser uma solução natural, boa e necessária para projetos de grande porte ou de grande complexidade. Porém, alguns cuidados precisam ser tomados:

É necessário articular e gerenciar o trabalho dos especialistas, pois muitas vezes, e por razões variadas, a eles não é dada a oportunidade de conhecer a realidade dos clientes/usuários dos serviços. Para suprir essa carência de informação, que pode comprometer o projeto como um todo, costuma-se tomar algumas medidas preventivas: escrever e manter especificações (construídas e versionadas por especialistas), realizar reuniões periódicas (para acompanhamento de projeto, para validação de especificação, de protótipo ou de produto etc.) envolvendo o cliente e toda a equipe, inspeção contínua  (possivelmente automatizada) dos componentes especializados, entre outras.
É necessário garantir que as escolhas técnicas de cada especialista sejam compatíveis entre si. A integração contínua é uma forma bastante eficiente de se atingir esse objetivo. Com essa prática, o componente (mesmo que parcial) construído por um determinado especialista é verificado e integrado aos demais componentes disponíveis, se possível várias vezes por dia, todos os dias da semana, durante boa parte do ciclo de vida do produto: desenvolvimento, implantação e operação.

Para resumir, uma equipe que necessita distribuir o trabalho em funções especializadas (ex: Web design, teste, modelagem de dados, programação da camada de apresentação, programação da camada de negócio/serviços etc.), deve fazê-lo considerando a necessidade de consumir tempo e esforço no projeto para promover a comunicação entre cliente e especialistas e para integrar os diferentes componentes especializados.
E qual o papel do generalista, se é que ele é importante? Na realidade, o sucesso do projeto depende muito da atuação dos generalistas - aqueles que conseguem acompanhar um determinado projeto sob diferentes perspectivas, especialmente sob o ponto de vista externo (cliente e usuários). O bom generalista, sem risco de comprometer sua visão panarômica, deve ter conhecimento e experiência técnicas suficientes para avaliar a qualidade técnica dos produtos entregues e serviços prestados pela equipe. Muitas equipes chamam esse sujeito de coach (eXtreme Programming) ou arquiteto (Unified Process).
Em projetos de pequeno porte, é possível alocar uma equipe pequena próxima ao cliente para, juntos, desenvolverem um novo produto ou serviço de TI. Nesse caso, é melhor que cada membro atue como generalista (ainda que atue como especialista em determinados momentos).
Em projetos que necessitem da alocação de profissionais especializados, convém valorizar e multiplicar os generalistas da equipe para reduzir os riscos que rondam esse tipo de projeto.