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?