Alguns anos atrás, trabalhei para uma pequena empresa que desenvolvia estruturas internas que dedicava seu desenvolvedor mais sênior e seu arquiteto ao desenvolvimento de uma estrutura MVC e ORM personalizados do zero. Essas duas coisas eram ortogonais ao seu produto principal. Infelizmente, o suporte a essa abordagem orientada a estruturas veio do topo e atrasou a entrega de software de geração de receita - e as estruturas produzidas foram notavelmente inferiores às alternativas disponíveis no mercado, que agravaram os atrasos. A empresa consumiu dinheiro rapidamente e, eventualmente, todos foram demitidos.
Um empregador posterior cometeu um erro semelhante - eles obtiveram um desenvolvedor altamente qualificado tecnicamente - um perfeccionista, com uma forte base nos padrões de design da empresa para projetar demais uma solução de consultoria para um de seus clientes, conscientemente sofrendo uma perda, na esperança de que a solução pode ser adaptada e estendida para outros clientes. O projeto ultrapassou significativamente. Mas nenhum outro cliente em potencial mordeu. Um erro estratégico banhado a ouro que custou uma pequena fortuna.
Nos dois casos, houve um grau significativo de superengenharia. Nos dois casos, a empresa e o gerenciamento de projetos eram pessoas com experiência em domínio ou análise, em vez de experiência em programação. Nos dois casos, os arquitetos de software criaram soluções excessivamente complexas para coçar e melhorar seus currículos, com alguma cumplicidade do gerenciamento não técnico. Em ambos os casos, os arquitetos não tinham interesse em manter os custos baixos (além do risco de perder seus empregos se as empresas falissem - o que não era muito arriscado, considerando sua alta empregabilidade).
Minha experiência sugere que não é uma armadilha incomum que as lojas de desenvolvedores caiam.
Existe algum projeto em software para uma função técnica adversa interna ou externa formal - um "Surveyor de Quantidade" - para usar uma analogia de edifício - que possa chamar ou impedir a engenharia excessiva? Quem é o mais adequado para desempenhar esse papel?
fonte
Respostas:
"Controlar a complexidade" é o trabalho de:
O arquiteto, cujo trabalho é garantir que o sistema e a arquitetura corporativa sejam adequados para os projetos / produtos atuais ;
O desenvolvedor, cuja tarefa é criar designs e códigos que não sejam apenas corretos, mas também manteníveis , e também revisar o código de outros desenvolvedores para garantir que eles possam entendê-lo; e
O analista de negócios / sistemas ou proprietário do produto, cuja tarefa é descobrir o que a empresa realmente precisa no momento , o que pode ser concluído mais tarde ou o que pode nunca se materializar.
"Complexidade" é um conceito abstrato de qualquer maneira, e pode-se argumentar que "reduzir a complexidade" é o próprio objetivo do software, portanto, não faz sentido sugerir um papel dedicado a ele - é isso que todo equipe já deveria estar fazendo!
Supondo que uma análise superficial do ROI e do TCO demonstre que a (s) solução (ões) é (s) realmente (s) e (s) são (s) realmente (s) com excesso (s) de engenharia (s), então lamento dizer que os arquitetos, desenvolvedores e analistas que estavam trabalhando nele simplesmente não estavam muito bom em seus trabalhos. E as pessoas encarregadas desse aspecto são os gerentes ou executivos que os contrataram; possivelmente eles cultivaram uma cultura de excesso de engenharia e estão parcialmente em falta, ou possivelmente estão apenas recebendo maus conselhos da equipe de implementação.
Não vou arriscar um palpite sobre qual deles, já que eu (provavelmente) não trabalhei para sua empresa, mas tenho certeza de que você pode descobrir isso facilmente, apenas conversando individualmente com um ou alguns dos referidos gerentes.
Aliás, o desenvolvimento de estruturas internas nem sempre é uma coisa ruim. É que essas estruturas geralmente devem se basear na observação e refinamento do processo atual. Estruturas ou bibliotecas criadas pela refatoração do código existente tendem a durar muito tempo. Por outro lado, se as pessoas simplesmente mergulharem e começarem a desenvolver uma estrutura sem contexto algum, ela geralmente se tornará um passivo e rapidamente.
As pessoas devem ser capazes de reconhecer a diferença entre convenções (a maioria dos projetos em uma organização usará a mesma pilha de tecnologia, com uma certa quantidade de código padrão, mas isso não significa que juntar tudo em uma "estrutura" é uma boa opção. idéia) versus duplicação (as pessoas estão literalmente resolvendo os mesmos problemas comerciais ou técnicos repetidas vezes e as inconsistências levam a projetos complicados e defeitos graves). As empresas de software podem e devem reconhecer o último cenário e tomar medidas ativas para, bem, reduzir a complexidade. Frameworks não reduzir a complexidade, desde que eles não sucumbir ao efeito de plataforma interna .
fonte
Não, normalmente não existe essa posição.
O truque é contratar pessoas certas para o trabalho. Pessoas que não farão engenharia demais e fazem exatamente o que é necessário.
Isso pode ser feito usando abordagens ágeis (como implementar requisitos em iterações ou usar TDD ou BDD). Mas, novamente, se a arquitetura for super projetada, não ajudará.
fonte