quarta-feira, 28 de abril de 2010

Fábricas de software

Eu adorei esse texto do Fabio Akita: Fábrica de Software é uma besteira.

Vejam bem, eu não acho que fábricas de software sejam uma besteira. A idéia de se fazer software sob medida para clientes é um excelente modelo de negócios, pois a maioria das empresas não quer investir em um departamento de TI próprio.

O problema, como aponta o Fábio, é a palavra "fábrica." O conceito de linha de produção não se aplica a um trabalho criativo e complexo como o desenvolvimento de software. O modelo de fábrica de software é assim: tem-se um conjunto pequeno de analistas que controla todo o processo criativo e uma horda de micos de realejo que recebem tarefas mastigadas e especificadas detalhadamente e "só" precisam implementá-las. A idéia é reduzir ao máximo os custos, pagando salários altos às poucas cabeças pensantes e baixos aos programadores. Como os salários dos programadores são baixos, as fábricas em geral contratam programadores inexperientes ou aqueles que estão fora do mercado por não conseguirem coisa melhor.

As fábricas em geral usam processos ricos em documentação como o RUP e se orientam pelos modelos de maturidade como CMM e MPS-BR. Elas estão certas em usar esses processos, pois só assim conseguem o grau de controle necessário para garantir que o programador inexperiente vá implementar o que o analista idealizou.

O resultado é que ninguém quer ser programador de fábrica de software, e eu não os culpo. O papel do programador é tal que há poucas oportunidades de crescimento, aperfeiçoamento ou aprendizado. As condições de trabalho são precárias devido ao foco em manter baixos os custos. Os programadores excelentes não querem carregar o piano para os programadores inexperientes, e fogem de lá.

O pior, no entanto, é que o programador é considerado um recurso fungível (essa palavra eu roubei do do excelente livro Slack do Tom DeMarco). O Michaelis define fungível como aquilo que "pode ser substituído por outro da mesma espécie, qualidade e quantidade, como o dinheiro, os cereais, o vinho etc."  Ou seja, se eu tirar uma nota de 20 reais da carteira e te der  em troca de uma nota de 20 reais da sua carteira, não há perda de valor ou qualidade. O dinheiro é um bem fungível - duas notas de mesma denominação tem o mesmo valor.

Ninguém quer ser fungível. É um desrespeito à individualidade de cada um ser tratado como uma peça rapidamente substituível. O pior é que tratar programadores como recursos fungíveis nem funciona, como postula a Lei de Brooks e como já discursaram vários autores, incluindo o Tom DeMarco em Peopleware.

Há alguns anos atrás eu prestei uma consultoria a uma fábrica de software onde o membro mais antigo dentre os 60 programadores estava lá a uma ano e meio, e o tempo médio de permanência de um programador era de 6 meses. Ninguém achava que isso fosse um problema grave, pois havia um fluxo constante de currículos de novos programadores para eles contratarem e substituirem os que saiam. Se na sua empresa se referem a você como "o recurso," corra léguas.

Eu gostei muito da sugestão do Fábio de se trocar o conceito para "atelier de software". Isso me faz pensar em um local onde se misturam artesãos experientes e aprendizes, que trabalham juntos em todas as etapas do processo, dando aos aprendizes a oportunidade de crescerem e se tornarem mestres. Quem sabe isso não dá mais certo?

7 comentários:

  1. Excelente esse post. Já tinha gostado do "Fábrica de Software é uma besteira", mas esse descreveu bem o problema.

    ResponderExcluir
  2. Triste, mas aqui no Google ja ouvi managers se referirem a engenheiros como "recurso". Ja inclusive brinquei com um amigo que, depois de virar TL (nem TLM, so TL), disse "ah, se tivessemos mais recursos" e me fez perguntar "recursos? tipo o que? maquinas? memoria? cafe?".

    Nao estou dizendo, nem de longe, que no Google se tem essa mentalidade bizarra de fabrica de software, somente que ja ouvi esse tipo de terminologia (em que se confundem engenheiros, maquinas, etc).

    ResponderExcluir
  3. O pior não é nem isso. O modelo baseado em preço de algumas fábricas assume o "ganha-se no preço e compensa-se nos atrasos" :-(

    Bem, alguém com certeza lucra.

    ResponderExcluir
  4. O mesmo é verdade para todos os trabalhos intelectuais, não só programação. Mesmo eu que sou economista preciso pensar de forma criativa, preciso propor soluções para problemas empresariais, sociais, ambientais, macroeconômicos de forma criativa, no mundo real e intelectual não existem receitas de bolo.
    Mas a humanidade ainda é muito míope (empresários e adiministradores principalmente), lembramos apenas da revolução industrial e do fordismo quando trabalho humano era usado como uma máquina e não como "brainpower" (criatividade e tudo mais que nos torna humanos), nestes casos quanto mais trabalhamos e de forma mais rígida mais produzimos.

    Ótimo artigo

    ResponderExcluir
  5. Acho que o termo “recurso” se deve a grande rotatividade que existe na área de desenvolvimento, eu já trabalhei com diversos analistas nesse ultimo semestre, alguns de fato muito bons, mas outros que se acham bons, que são a grande maioria e estes saem para receberem um pouco mais, ou seja, esta à leilão no mercado, criando assim esse termo “recurso” ao meu ver, pois o mercado ta cheio de “profissionais” dispostos a receberem 200 reais a mais !

    Não quero desmerecer e nem julgar ninguém, hoje tem muita gente que quer realmente aprender e dedicar a sua profissão de analista, engenheiro ou seja ela qual for, mas são poucas, pouquíssimas mesmos, as empresas que possibilitam esse crescimento ou profissionais competentes que lhe dão as dicas ou apoio para isso.

    Já tinha lido o artigo do Akita (http://akitaonrails.com/), mas gostei bastante do ponto de vista que esse post passou.

    Abraço a todos !

    ResponderExcluir
  6. Eu sempre concordei com "falha" fo termo Software Factories...mas gostaria de rediscuti-lo, com esta nova definição: http://www.guj.com.br/posts/list/203612.java#1031415

    ResponderExcluir
  7. SOU NOVO AQUI NO BLOG, MAS .... GOSTARIA DE ELOGIAR O POST,EXCELENTE!
    SOU ESTUDANTE DE PROGRAMAÇÃO E JA VEJO PROBLEMAS
    NA ÀREA. O PROGRAMADOR É PARTE ESSENCIAL NO DESENVOLVIMENTO DE SOFTWARES,E ..... MUITOS NÃO O VALORIZAM.
    PARA MUITOS O PROGRAMADOR É COMO UM DATILOGRAFADOR COM BOA MEMÓRIA.

    ResponderExcluir