Duplicação? Sim, por favor.
Esse post foi traduzido automaticamente do inglês. Se você encontrar algum erro, por favor entre em contato.
Um tópico comum ao discutir TI em organizações é como estruturar times de software, mais especificamente, como dividimos o trabalho quando uma empresa cresce o suficiente para que um time não seja mais suficiente, e como lidamos com código compartilhado?
Essa não é uma pergunta simples e provavelmente merece alguns posts sobre o assunto, mas agora queria focar em um aspecto específico, que é a duplicação de esforço.
Um exemplo simples seria: se minha empresa tem múltiplos times entregando software, eles eventualmente encontrarão os mesmos problemas, como fazer deploy de código, como fazer logging (o exemplo clássico!), monitoramento e outras coisas assim.
E em quase todas as organizações em que estive, a resposta é unânime: deveríamos investir em construir ferramentas/capacidades compartilhadas para fazer isso! Tudo em nome da uniformidade e padronização, que deve ser uma coisa boa.
Bem, como você pode imaginar a essa altura, eu discordo.
Construir aplicações compartilhadas em TI é o equivalente a economias de escala para software, e é tão ultrapassado em TI quanto é em outras indústrias.
Duplicação no desenvolvimento de software
Em trabalho intelectual (como todos concordamos que desenvolvimento de software é a essa altura), nenhum esforço é realmente duplicado. Você pode desenvolver a mesma coisa 100 vezes e provavelmente obterá 100 resultados diferentes, alguns bastante similares mas ainda assim diferentes. E essa pequena diferença entre cada um é onde reside a inovação.
Esse é o trade-off do qual as empresas deveriam estar cientes. Se as pessoas não têm liberdade para experimentar e buscar diferentes soluções para problemas, é muito fácil chegar a um lugar onde todos estão presos na velha forma de pensar. E é isso que as empresas realmente fazem quando obrigam as pessoas a usar ferramentas comuns, aplicações compartilhadas, etc. Estão colocando redução de custos à frente da inovação, muitas vezes sem perceber.
E não quero dizer que não podemos aprender uns com os outros e reutilizar soluções quando são apropriadas. Afinal, ainda há espaço para economias de escala quando apropriado.
Todos nós estamos apoiados nos ombros de pessoas que vieram antes de nós e devemos continuar fazendo isso, inclusive internamente a uma organização. Mas isso deveria ser um processo orgânico e evolutivo, não um que é definido por um time de arquitetura.