Certamente todos que trabalham na área de desenvolvimento de software já ouviram o termo Fábrica de Software. Sim, mas o que é isso? Quais as implicações? As empresas realmente empregam esse conceito como deve ser? E os clientes, eles têm consciência de como deve ser contratada uma fábrica de software e qual o valor que isso pode agregar?

Provavelmente a resposta para a maioria das perguntas acima será a clássica: Depende!

Para ilustrar um processo fabril devemos começar por Henry Ford que mostrou, entre várias outras, duas coisas muito importantes: a eficiência da especialização de funções; e a eficiência no uso de padrões para os processos.

Se levarmos esses conceitos para a produção de software o que teremos?

  • Especialização das funções de uma fábrica de software é uma tarefa mais fácil, porém nem sempre executada como deve ser porque envolve disponibilidade de profissionais especializados para executar determinadas tarefas. O que nem sempre é verdade no Brasil, onde conhecemos e temos notícias de empresas que se dizem Fábrica de Software porém utilizando Analista de Requisitos que além de requisitos fazem modelagem de Banco de Dados; Arquitetura de Sistemas; etc. 

  • Quanto à padronização dos processos o paralelo para a fábrica de software pode ser melhor obtido na utilização de Orientação a Objetos e Componentização. Utilizando-se esses dois conceitos uma fábrica de software consegue aumentar a sua produtividade com a reutilização de objetos e componentes. Porém para implementar esses conceitos é necessário investimento e muito trabalho, não se alcança essa padronização de processos produtivos da noite para o dia.

Em matéria recente, que infelizmente não lembro onde li para conseguir dar o devido crédito aqui, li a seguinte frase sobre o tema Fábrica de Software: ...muito de especula, pouco se explica e pouquíssimos praticam adequadamente.... É verdade, os problemas são muitos, e dois deles são clássicos:

Clientes que não sabem contratar e Fábricas que não sabem ser contratadas!

Essa é fácil de entender! Um cliente quando contrata uma Fábrica de Software precisa entender que está contratando uma linha de produção onde os processos e componentes estão pré-estabelecidos e teoricamente funcionam com qualidade se executados dentro daquele modelo. A vantagem na contratação de uma fábrica de software é a qualidade obtida através da especialização, produtividade e conseqüentemente preço já que se trata de uma linha de montagem em escala.

Não sou um especialista em linha de produção de carros, mas imagino que ela deve começar pelo chassi do carro e os últimos itens devem ser o acabamento (vamos supor que essa seqüência esteja correta). Algum de nós poderia entrar em uma loja da Ford e pedir um EcoSport, mas determinar que a linha de produção deve primeiro colocar todos os acabamentos, pintar e só então trabalhar no motor e chassi? Qual a possibilidade desse carro ter problemas na linha de produção?

O mesmo acontece com clientes que tentam contratar uma fábrica de software especialista em Java, por exemplo, e com processos extremamente bem definidos. Mas ele exige que:

  • Projeto desenvolvido em .Net;
  • Processo de desenvolvimento deve seguir os padrões do cliente;
  • Os componentes e ferramentas devem ser determinados pelo cliente.

A fábrica então terá que fazer tudo diferente do que ela normalmente faria (o seu processo com qualidade, componentização padrão etc.). Mas hora, assim teremos que construir uma outra fábrica? Qual a chance desse projeto fracassar?

E nesse ponto entra a outra parte do título desse tópico ...Fábricas que não sabem ser contratadas. Porque essas fábricas aceitam esses contratos? E porque esses clientes contratam fábricas se o que eles procuram não é um modelo de fábrica?

Porque eu contrato um especialista em gesso e exijo que ele utilize cimento? E porque esse pedreiro aceita fazer a obra, mesmo sabendo que não vai fazer bem feito e o seu nome pode ser afetado por isso? É quase uma questão filosófica!

Especialização na Função

Esse é um conceito muito difícil de ser empregado no setor de Informática, porque esse conceito não está ligado apenas ao conhecimento das técnicas que devem ser empregadas, e sim ao processo da fábrica.

Vamos imaginar um desenvolvedor que trabalha em uma determinada fábrica há 5 anos, conhece todos os processos e componentes. Pois bem, esse desenvolvedor pode ser trocado de uma hora para outra impunemente? Sem afetar a produtividade e qualidade do projeto? Acredito que deve ser claro que essa troca vai provocar impactos durante o prazo de aceleração (conhecimento dos processos, componentes etc.) do novo recurso.

Como no setor de informática o canibalismo impera, e além disso a maioria das empresas não costumam primar pela iniciativa de manter os colaboradores. A possibilidade de ganhar produtividade em função da Especialização na Função se torna cada vez mais difícil.

Um ponto determinante para o sucesso na montagem de uma fábrica de software, seja contratando ou oferecendo esse tipo de serviço, é a tomada de algumas decisões acerca da sua implementação. Essas decisões afetam diretamente na correta utilização do modelo e conseqüentemente no sucesso da operação. Vamos ver alguns itens:

Qual o escopo e linha de serviço que a operação deve atender?

É importante que as linhas de serviço sejam escolhidas levando-se em consideração principalmente dois itens muito importantes: demanda do mercado; e expertise da empresa para atender essa linha de serviço.

Não adianta uma empresa oferecer linhas de serviço apenas por demanda de mercado, e sem estar preparada para atender com qualidade as solicitações. Isso será como se diz um tiro no pé.

Quais os critérios para aceite de um novo projeto/cliente?

Conforme já comentamos, a decisão de uma empresa em implementar um modelo de fábrica de software (seja terceirizando ou montando a sua própria) para os seus projetos deve ser baseada na consciência do modelo que está sendo empregado e o que vem a reboque. E da mesma forma na visão da fábrica, o cliente não pode macular os processos da fábrica indo de encontro a tudo que teoricamente a empresa prega como melhores práticas e lutou para implementar.

O ideal é que a fábrica não aceite esse cliente apenas pelo dinheiro ou para marcar território, ou que no mínimo ela trabalhe para o convencimento desse cliente quanto à utilização real do modelo adotado.

Qual a capacidade da operação?

Esse é um item muito importante, e que deve ser monitorado constantemente. Sem dúvida em uma fábrica de software uma das principais ações para se buscar o lucro é manter sempre toda a capacidade da fábrica com demanda constante, sem ociosidade.

Qual a política de planejamento e controle da capacidade produtiva de cada operação?

Como é importante manter os recursos humanos da fábrica alocada em 100%, é igualmente importante medir a capacidade produtiva dessa equipe para que seja possível planejar as novas alocações de acordo com a produtividade que ela emprega nos projetos.

Qual o processo operacional de cada linha de serviço?

Linhas de serviço diferentes podem, e na maioria dos casos devem, ter processos operacionais diferentes. É importante observar que processos não podem amarrar uma empresa, eles devem poder ser customizados de forma eficaz para atender a novas demandas (projetos/cliente) ou linhas de serviço diferentes. Como diz um amigo processos não podem ser escritos em pedra, eles precisam ser customizáveis e precisam agregar valor ao projeto.

Não é possível atender a um projeto de 10 mil reais com o mesmo processo que se atende a um projeto de 10 milhões de reais. Certamente esforços que não agregam valor estarão sendo executados, e conseqüentemente gastos excessivos com controles de qualidade que não agregam valor ao projeto estarão sendo feitos.

O custo da qualidade deve ir apenas até onde existe um retorno no mínimo igual ao gasto despendido.

Qual a política de desenvolvimento e retenção de recursos humanos?

Também já foi mencionado aqui a necessidade de se conseguir uma rotatividade aceitável para os recursos humanos em uma fábrica de software, só assim conseguiremos a tão sonhada Especialização nas Funções.

Cabe novamente ressaltar que em um processo de fábrica de software, principalmente, o fato de que um Desenvolvedor não pode ser trocado por outro instantaneamente, apenas porque o novo recurso tem o conhecimento técnico igual ou melhor do que o anterior. A complexidade dos processos da empresa e o conhecimento dos componentes influenciam diretamente na importância da retenção dos recursos humanos.

Além de tudo isso as fábricas de software buscam conquistar seus clientes acenando com processos bem estruturados e embasados por métricas e modelos de mercado, como: CMM/CMMI, PMI, BSC, ITIL, RUP, APF etc.

"Não há progresso sem mudança. E quem não consegue mudar a si mesmo, acaba não mudando coisa alguma"
George Bernard Shaw

Sem dúvida é uma sopa de siglas e complexidade, que não terá porque de ser se os objetivos e caminhos desse modelo não forem mantidos. É preciso que Fábrica e Cliente façam o acordo de que, por qualquer motivo,o processo adotado vá de encontro ao processo da fábrica isso é um sinal de que o modelo a ser adotado não é Fábrica de Software. E normalmente os sinais devem ser levados em consideração.

Depois não diga que eu não avisei!!!