É típico para grandes empresas de software não documentar ou refatorar o código? [fechadas]

8

Comecei a trabalhar em uma grande empresa de software e fui designado para um projeto com mais de um milhão e meio de linhas de código. Faz parte de um conjunto de programas que é vendido a clientes (não um projeto interno) e o código-fonte pode ser adquirido se assim o desejarem (embora, devido às taxas extras associadas a ele, isso pareça raro). Eles desenvolvem design de software há anos e seus produtos atuais devem continuar no futuro próximo.

Para minha surpresa, faltam quase um milhão e meio de linhas de código na documentação. Além disso, existem algumas áreas de código que são incrivelmente bagunçadas de seguir ou que poderiam usar alguma refatoração para se tornar muito mais fácil de entender (por exemplo, uma melhoria na linguagem de programação saiu há 10 anos ou mais, o que tornaria grandes porções de código muito mais limpo, para não mencionar menos propenso a erros). Parece não haver nenhum esforço para corrigir isso, e minhas ofertas para as partes com as quais estou trabalhando encontraram resistência, pelas quais nunca obtive uma resposta clara.

Essas práticas são comuns em um grande negócio na indústria de software? Ou minha empresa é única na falta de refatoração e documentação?

Adendo: Com base em alguns comentários, gostaria de esclarecer o que estou procurando. Entendo que minha empresa tem dívida técnica e isso é ruim. Não estou pensando em determinar se minha empresa está ou não em pior situação, por isso, estou apenas querendo saber se essa falta de documentação e resistência à refatoração é um fato da vida dentro do mundo da programação que terei. para lidar se eu continuar trabalhando nele.

Forja do Trovão
fonte
4
Fechar. Eu acho que isso reunirá opiniões, não respostas.
precisa
1
... e, na minha opinião, de dezenas de empresas diferentes é sim, essa é a norma, exceto para startups novinhas em folha com um novo código escrito usando técnicas modernas (por exemplo, últimos 5 anos).
precisa
2
Estudos? Não é preciso um estudo para chegar a algumas conclusões bastante sólidas. Tudo que você precisa fazer é olhar ao seu redor.
21413 Robert Harvey
2
Além disso, técnicas modernas incluem NÃO escrever comentários - elas desatualizam-se rapidamente e nunca são bem mantidas, e movem-se mais na direção dos nomes de classe e método de significado (pense em 'pool_of_currently_available_connections' vs. 'pool' e também há testes como " como um usuário de que as entradas x eu deveria ver x * 2 exibida", etc.
Michael Durrant
3
Sim, sim, a maioria das empresas é assim, você precisará aprender a lidar com isso.
GrandmasterB

Respostas:

13

Existem várias razões pelas quais as empresas não investem em tornar seus programas "melhores", de uma perspectiva de dívida técnica:

  1. A redução da dívida técnica não adiciona novos recursos ao software. Portanto, é percebido pela administração como não tendo valor monetário (até certo ponto justificável)

  2. A natureza do negócio de software premia o primeiro no mercado, não o melhor.

Eu poderia continuar, mas todos os outros motivos são apenas variantes desses dois. Todos eles somam basicamente o pensamento de curto prazo, concentrando-se nos lucros imediatos em vez da viabilidade a longo prazo.

Todas as empresas com projetos de software ativos não triviais têm algum grau de dívida técnica. Nenhuma empresa está completamente livre de dívidas.

Todo projeto de software em que trabalhei acumulou Dívida Técnica ao longo do tempo - Jeff Atwood .

Em relação à documentação especificamente, quanto menos houver, melhor. Dólar por dólar, você obtém mais retorno, tornando o software mais simples de usar e mais fácil de manter do que escrevendo mais documentação para ele.

Existem algumas pesquisas informais sobre dívida técnica e como as empresas a administram; tudo o que você precisa fazer é procurá-los. Aqui está um :

insira a descrição da imagem aqui

Ou este :

insira a descrição da imagem aqui

Parece bastante aparente que sua empresa não é a única que tem esse problema. Pode até não ser minoria.

Leitura adicional
Terceiro workshop internacional sobre gerenciamento de dívida técnica - Visão geral
Gerenciamento de dívida técnica em sistemas dependentes de software

Robert Harvey
fonte
Então, para responder à minha pergunta, isso é típico das empresas?
Thunderforge
O que você quer dizer com "típico"?
Robert Harvey
A maioria das empresas se comporta da maneira que descrevi? Entendo a dívida técnica, mas você realmente não respondeu se isso foi algo que acontece na maioria das empresas ou se é algo que apenas algumas empresas (como a minha) lidam.
Thunderforge
1
Quase todo mundo que postou trabalhou em menos de 10 ou 15 empresas em milhões. Então, seria preciso um estudo formal para saber. Eu não conheço nenhum. Também o código limpo de uma pessoa é outro espaguete, então eu acho irresponsável.
precisa
1
Na minha experiência, com fins lucrativos x sem fins lucrativos, assistência médica x consultoria, Boston-Nova York-San Francisco x cidades do coração fazem a diferença. ymmv
Michael Durrant
8

Uma perspectiva que não acredito ter sido abordada em outras respostas (ainda) é o custo da mudança em três áreas:

  1. teste
  2. re-familiarização
  3. custo de oportunidade

Uma empresa com um produto grande precisará testar todas as alterações. Esses procedimentos de teste precisam ser rastreados em vários eixos: plataformas diferentes, cargas de trabalho diferentes, perspectivas diferentes (desempenho, funcional, usabilidade, compatibilidade com versões anteriores).

As pessoas que trabalham nas áreas de código que você está alterando também precisarão se familiarizar novamente com o código, e isso se tornará especialmente complicado com o suporte a várias versões ("desculpe, qual versão é essa? Ahh, essa é a nova código e você precisa falar com Bob para isso "). Da mesma forma, alterar o código apenas para torná-lo bonito tende a tornar coisas como logs de alterações (diffs, patches etc.) muito difíceis de ler ... e rastrear problemas até um momento específico em que o bug foi introduzido pode ser muito desafiador se houver algo no histórico de código que mude tudo. Além disso, se um bug persistir (essas coisas acontecem), ele pode estar em várias versões suportadas do seu código, e agora você deve corrigir o antigo e o novo código de maneiras potencialmente muito diferentes.

Finalmente, muitas vezes é preciso tomar uma decisão sobre onde gastar tempo e dinheiro. Isso é mais do que apenas o seu tempo, mas o que você deveria fazer com o seu tempo (e o impacto que isso causa nos recursos de downstream). Seria preferível gastar o tempo de sua equipe de desenvolvimento em recursos que podem produzir mais vendas, ganhar nova participação de mercado e gerar lucro, ou o tempo / dinheiro gasto em coisas que os usuários finais não notarão ou não possam usar material de marketing ("ei, nosso código existente é péssimo, mas nós o aprimoramos") e é um custo puro (sem lucro).

Bottom line, dinheiro . Sempre (bem, quase sempre).

rolfl
fonte
5

Sim. Com base nas 50 empresas que conheci pessoalmente, como funcionário ou consultor, e nas 200 empresas que conheço por meio de colegas.

O tipo de produto (1,5 milhão de linhas) que você descreveu levou anos para ser construído, e muitos dos desenvolvedores originais mudaram (ou se tornaram gerentes).

A gerência sênior e os principais clientes contínuos desejam apenas pequenas mudanças incrementais: desejam estabilidade. O que nós, técnicos, achamos que as melhorias são riscos para os olhos deles. Mesmo que possamos mostrar que a nova versão ainda se comporta da mesma forma que a antiga, eles vêem um risco porque o sistema antigo tem exatamente a característica que você descreve: não é documentado. Para eles, pode haver um comportamento não documentado em que os clientes confiam.

Da perspectiva deles: não está quebrado, então não conserte. Você também está vendo que existe uma cultura corporativa nesse sentido. As pessoas que estão resistindo às suas "melhorias" provavelmente fizeram o mesmo que você quando começaram.

Não espere "vencer". Esta é uma questão cultural e não pode ser alterada, exceto por mudanças no nível do CEO.

andy256
fonte
A gerência sênior e os principais clientes contínuos desejam apenas pequenas mudanças incrementais: desejam estabilidade. - Não tenho tanta certeza disso. Os clientes se importam muito com o código e com o tamanho das mudanças, mas estão muito interessados ​​nos dois "gratuitos" mágicos: 100% gratuitos e gratuitos. Ah, sim, e por favor entregue ontem. A maioria deles nunca ouviu falar de escopo x custo x cronograma ou de repente esquece seu conhecimento quando se trata de software. Em relação à questão cultural e não está quebrado, não concordo, mas também entendo a questão comercial por trás.
JensG
Para mim, um produto é apresentado através do ciclo de feedback que existe (ou não) entre a empresa e seus clientes. Diferentes clientes que fornecem feedback mais forte e têm requisitos "mais profundos" pressionam o fornecedor a mudar ou passam para um concorrente (se houver).
andy256
Em última análise, há um caso para dizer que vai além da meramente cultural. Digamos que a gerência interrompa todo o desenvolvimento de novos recursos para abordar os 10% principais da maioria das rotinas de buggy, teria que ser gerenciado com muito cuidado para evitar se tornar o trabalho do Sisyphus.
James Snell
@ JamesSnell: Esse é um bom ponto. Conheço exemplos, onde um pedaço específico de código deveria ter sido redesenhado e reescrito do zero anos atrás. Hoje, os mantenedores desse código ainda lutam para corrigir os bugs antigos que ainda aparecem a cada duas semanas, sem falar nos bugs que foram introduzidos nesse meio tempo adicionando mais recursos. Quanto tempo poderia ter sido economizado a longo prazo, se eles tivessem decidido jogar fora a versão antiga e mal projetada anos atrás?
JensG
@JensG Eu concordo com você. Gerenciar dívidas técnicas é como uma equipe / base de código bem gerenciada deve operar. Mas lidar com a dívida técnica significa desestabilizar a base de código, mesmo que a intenção seja melhorá-la - isso envolve o risco de que, uma vez que você comece a refatorar, ela possa se tornar uma tarefa sem fim. O código pode ter sido necessário, mas o custo a curto prazo pode ser suficiente para acabar com o projeto antes que qualquer benefício a longo prazo chegue e nenhum gerente desejará agitar o barco enquanto estiver nele.
James Snell