Como convencer a gerência a lidar com dívidas técnicas?

158

Essa é uma pergunta que eu sempre me pergunto ao trabalhar com desenvolvedores. Eu trabalhei em quatro empresas até agora e fiquei ciente da falta de atenção para manter o código limpo e lidar com as dívidas técnicas que impedem o progresso futuro de um aplicativo de software. Por exemplo, a primeira empresa em que trabalhei tinha escrito um banco de dados do zero, em vez de usar algo como MySQL e isso criou um inferno para a equipe ao refatorar ou estender o aplicativo. Sempre tentei ser honesto e claro com meu gerente quando ele discute projeções, mas a gerência não parece interessada em consertar o que já está lá e é horrível ver o impacto que isso tem no moral da equipe.

Quais são seus pensamentos sobre a melhor maneira de resolver esse problema? O que eu vi são pessoas fazendo as malas e saindo. A empresa então se torna uma porta giratória com os desenvolvedores entrando e saindo e piorando o código. Como você comunica isso à gerência para que eles se interessem em resolver as dívidas técnicas ?

Desolate Planet
fonte
5
"trabalhando com desenvolvedores" "comunica isso à gerência" Sobre o que você está perguntando? Desenvolvedores ou gerentes? Com quem você quer mudar o comportamento?
S.Lott 4/02
45
Dívida técnica é como dívida financeira - é muito mais fácil, a longo prazo, simplesmente não acumulá-la para começar. Pague todas as suas contas técnicas uma vez por semana.
Lawrence Dol
7
Mike> Eu acho que você vive em um mundo muito menos restritivo, pois prazos e orçamentos limitados dominam o mundo em que vivo. Se o software não se adapta bem às necessidades futuras e exige muito trabalho para corrigir, então o gerenciamento geralmente se preocupa em ignorar e continue atando aos recursos. Agora, muitas empresas em que trabalhei criaram quadros de horários para que os desenvolvedores precisem registrar seu trabalho e, se não estiver investindo tempo no local em que a gerência vê os negócios em potencial, você estará perdendo seu tempo.
Desolate Planet
4
Eu acho que você poderia dizer que é um problema com benefícios de curto prazo vs benefícios de longo prazo. Se uma equipe de software arrumar um sistema de tal maneira que os novos recursos levem menos de uma hora para serem implementados em vez de um dia, isso é um benefício imediato. Se a gerência vê você tentando melhorar o código e indo contra o que eles querem, você está sendo um pouco rebelde aos olhos deles. Não sei realmente qual é a melhor solução, mas parece um problema tão comum e já vi o que isso faz com as equipes.
Desolate Planet
3
Scott> Para responder à pergunta, é a atitude da gerência que gostaria de mudar. Os desenvolvedores conhecem o código e têm experiência em primeira mão sobre o código a ser aprimorado para facilitar as coisas. Em um trabalho anterior, quando lançamos uma nova versão de um aplicativo, o número de bugs continuava aumentando a uma taxa terrível. Eu tentei muito implementar estratégias de teste, mas muitas vezes parece uma causa perdida.
Desolate Planet

Respostas:

191

Quando me encontrei com meu chefe para discutir isso, ele disse que eu deveria incluir a refatoração em todas as minhas estimativas. Ele disse que não é um problema que ele queira pensar. Em vez disso, eu deveria lidar com isso.

Este não é um problema que a gerência em geral queira pensar. Eles não são os engenheiros, você é. Apenas faça disso uma parte tácita de todas as suas estimativas e você descobrirá que a dívida técnica diminui.

Mas nunca será perfeito. A dívida técnica, como a dívida de cartão de crédito, é um investimento para obter clientes mais rapidamente e ganhar participação de mercado mais rapidamente que seus concorrentes. Assim como o crédito, se gerenciado adequadamente, pode torná-lo bem-sucedido.

jmort253
fonte
30
minha experiência é geralmente na mesma linha. A dívida técnica é limpa à medida que novos recursos são adicionados. Às vezes, as estimativas para certas correções / recursos 'relacionados' são preenchidas para incluir a limpeza dessas coisas.
Ken Henderson
4
+1 Você compartilhar meus sentimentos exatamente ... exceto que você expressa-se muito mais diplomaticamente;)
Michael Brown
7
Boa resposta. Ainda estou para ver uma empresa que está feliz em assinar um projeto de 'refatoração' que não traria nenhum benefício ao cliente, apenas um código mais organizado. Refatorar conforme o uso.
JBWilkinson
7
"Quando me encontrei com meu chefe para discutir isso, ele disse que eu deveria incluir a refatoração em todas as minhas estimativas". - Essa é a atitude que tomo e a postura de muitos desenvolvedores em equipes nas quais trabalhei. No entanto, quando esses 9 a 5 desenvolvedores, como os chamamos, estão preocupados com suas revisões e aumentos de pagamento, eles não criarão mais trabalho para si mesmos. Eles vão seguir o que a gerência pensa, afinal, é quem os paga.
Desolate Planet
8
@ jmort253: existe um (leve) problema com essa política excelente -> não é possível fazer alterações extensas (por exemplo, alterar o banco de dados conforme dito pelo OP). Esses devem ser explicitamente abordados.
Matthieu M.
48

É como Gandhi disse quando perguntado se sua tática funcionaria com alguém como Hitler. Ele disse: "Seria difícil". Mas acho que há um argumento justo de que a resposta realmente é "não". Infelizmente, não acho que o que você está tentando fazer possa ser feito. Não é que eu esteja tentando ser pessimista, mas estou tentando ser honesto.

O problema para mim não é que os gerentes precisem ser convincentes. Os melhores já entendem que a dívida pode ser um assassino se não for gerenciada. Mas, entendam ou não, sejam bons ou maus gerentes, todos enfrentam a pressão para entregar, e essa entrega é julgada por seus chefes contra uma data. A qualidade só importa se for extremamente ruim; nesse caso, é culpa dos desenvolvedores ou extremamente boa; nesse caso, é o brilho da gerência que fez isso acontecer. A qualidade só precisa ser "boa o suficiente".

Acho que gosto do que Renesis disse em sua resposta, porque é um dos poucos que entende que a gerência pensa de maneira muito diferente da engenharia. E acho que todos nós vimos a progressão das empresas para se tornarem orientadas por datas e mais gerenciadas por projetos, em vez de focadas no cliente e na qualidade. Com isso, quero dizer empresas típicas, não as realmente robustas que têm a coragem de dizer "Isso será feito quando for feito" (como Apple Computer ou id Software - e sim, eu entendo que às vezes as pessoas não têm liberdade adotar essa abordagem).

Mas eis o seguinte: empresas que adotam a abordagem de qualidade primeiro ... o que você percebe sobre elas? É isso mesmo, eles são administrados por engenheiros, não vendedores, comerciantes, gerentes de projeto ou contadores. Pense na HP, Apple, ID, Google, Microsoft e IBM. Tudo começou e foi bem-sucedido por engenheiros, não por vendedores, embora os vendedores certamente tenham contribuído, e tenho certeza que muitos debateriam ter a Microsoft associada à qualidade :). E desses, os que desceram a montanha se afastaram da liderança impulsionada pela engenharia. No entanto, há uma série de argumentos nessa declaração, pois há muitas empresas técnicas que falharam devido à incapacidade de se adaptar aos novos tempos e gerenciar seu próprio crescimento. Não vejo a liderança baseada em engenharia como a causa dessas falhas, para mim que ' é uma questão de habilidades e perspicácia nos negócios que independem de alguém ser desenvolvedor ou contador. Penso, de modo geral, que há uma dedicação em engenharia aos rigores da responsabilidade e da disciplina que beneficiam as empresas em que a engenharia é um componente.

Sério, olhe em volta. Falta muito a liderança de TI. O foco está sempre no custo e no tempo, e raramente na qualidade, desde que seja bom o suficiente. Os líderes de TI raramente se reportam mais ao CEO, agora é sempre o CFO. A TI está presa ao suporte à produção e é cada vez mais devida aos gerentes de projeto cujo foco está em blocos menores, mais digeríveis e mensuráveis, sem mudanças significativas de valor revolucionário (não que isso seja necessariamente errado; dividir e conquistar é uma coisa boa, mas a visão precisa estar lá para o quadro geral).

Desculpe por demorar tanto neste post, mas, no final, acho que sua pergunta, sobre como fazer com que a gerência se preocupe com a dívida técnica, geralmente é melhor resolvida encontrando o líder certo, em vez de mudar o existente. Explicar a dívida técnica para pensadores comuns significa mudar o foco para dinheiro e custo, como Renesis disse, e acho que isso perde muito em tradução; mesmo se você fosse bem-sucedido, importaria apenas se o principal líder da empresa o comprasse. Convencer o gerente do meio a fazer a coisa certa provavelmente só o despedirá.

Bernard Dy
fonte
43

A primeira coisa a fazer é mudar a redação. Chamar isso de "dívida técnica" dá à administração a idéia de que permitir algum tipo de investimento - quando na verdade é mais como um vírus. (Eu sou como o Dave Ramsey da dívida técnica.)

Permitir que ele não seja pago tem um custo enorme que não pode ser visto ou quantificado facilmente.

Liste problemas como os seguintes para gerenciamento:

  • As estimativas de novos recursos são muito maiores do que precisam. Ou, impossível por completo.
  • Código incorreto gera mais código incorreto
  • A lista de erros cresce mesmo que os desenvolvedores estejam sempre corrigindo-os
  • Os membros da equipe estão saindo (isso pode mostrar que há um problema, conforme explicado nesta excelente resposta )
Nicole
fonte
7
+1, embora eu ache que o último marcador deve ser "Os bons / melhores membros da equipe estão saindo"
Ken Henderson
12
Às vezes, um pouco de dívida técnica é um investimento. Se você está competindo com outra empresa e quem lança primeiro obtém o mercado para si, faz sentido criar atalhos no código para iniciar mais rapidamente. Ninguém se importará com o código perfeito se você tiver zero clientes pagantes.
23411 quant_dev
3
@quant_dev, se você vê isso como uma dicotomia entre "mais rápido" e "código perfeito", é claro que você pensará assim. Não há razão para que os atalhos não possam ser tecnicamente sólidos; nesse caso, eles não são considerados dívida técnica.
23411 Nicole
2
@Renesis "Não há razão para que os atalhos não sejam tecnicamente sólidos" - isso não é verdade.
24511 quant_dev
3
E às vezes não é uma dívida técnica, é apenas uma bagunça: sites.google.com/site/unclebobconsultingllc/…
TrueWill
30

Na verdade, minha gerência começou a fazer um esforço sério para lidar com a dívida técnica, que é uma das razões pelas quais gosto de trabalhar lá, mas é um esforço de longo prazo e nunca é demais lembrá-los por que o esforço vale a pena.

Uma maneira de manter a pressão é sempre que me pedem uma estimativa, e o tempo poderia ter sido economizado se eu não precisasse lidar com questões técnicas específicas da dívida, incluo isso na minha estimativa . Por exemplo, " Esse bug levará de dois a três dias para rastrear, mas se já tivéssemos resolvido esses dois outros bugs de 'baixa prioridade' que estavam na fila para sempre, provavelmente levaria menos de um. " a resposta será seguir em frente e consertar os outros enquanto você estiver nisso.

Também concordo com outras respostas sobre considerar as melhorias como parte do seu trabalho e executá-las à medida que avança, se isso não for muito perturbador. Minha tarefa atual envolve fazer acréscimos a algum código muito mal projetado. Em vez de aumentar a bagunça escrevendo meu novo código para corresponder, estou gastando um pouco de tempo consolidando funcionalidades comuns, portanto, o envio de um pacote se torna uma chamada de função de uma linha, em vez de repetir constantemente 15 linhas de cópia-e- ligeiramente modificadas colar clichê.

De fato, sei que isso vai salvar a sanidade de alguns mantenedores mais adiante. Eu sei porque sou o mantenedor hoje. No entanto, também acredito que isso irá acelerar minha própria tarefa atual de obter e depurar esse recurso agora.

Outra técnica que usei no passado e devo fazer novamente é manter uma ramificação DVCS de refatoração em uma árvore de trabalho separada, para que ocorra um tempo de inatividade durante a compilação, a espera de um longo teste ou apenas a necessidade de uma mudança de ritmo. um pouco quando você está cansado de um bug. Contanto que você ocasionalmente se junte à montante, para não divergir muito, poderá demorar o tempo que desejar na refatoração de alterações com muito pouco esforço marginal. 15 minutos aqui e ali por dia podem realmente aumentar com o tempo.

Karl Bielefeldt
fonte
20

Você pode tentar a analogia do cartão de crédito. Pergunte a eles "você se sente à vontade para deixar os extratos do seu cartão de crédito sem pagamento por um longo período de tempo?"

Os gerentes entendem os custos e benefícios, mas (geralmente) não os termos técnicos usados ​​por nós desenvolvedores. O termo "dívida técnica" já foi inventado para ajudar a superar essa barreira de comunicação, mas você pode precisar articulá-la com mais clareza. A maioria dos gerentes sabe muito bem (geralmente por experiência própria) que os pagamentos em atraso com cartão de crédito crescem com uma taxa de juros horrível, por isso é difícil deixá-los sem pagamento. Isso pode ajudá-los a obter a seriedade do problema em relação à entropia de software.

Mas se isso não os convencer, tente coletar evidências factuais e faça alguns cálculos. Por exemplo, quanto custa para a empresa - tanto em dinheiro vivo quanto em tempo perdido - substituir um funcionário que está deixando o cargo.

Péter Török
fonte
12

Ninguém dará dinheiro para substituir algo que funcione por outro que (com alguma sorte) também funcione.

O que você pode fazer é propor a substituição por algo que faça mais, ou seja, agrupar o serviço da dívida tecnológica em uma atualização que traga benefícios comerciais instantâneos e tangíveis.

É claro que você deve ser aberto sobre isso, não estamos falando de "enfiar" um novo projeto aqui.

Acho o outro lado, o dos desenvolvedores mais difícil de lidar. Basicamente, tudo se resume a isso: para alguns desenvolvedores, garantir que seu código seja o melhor possível, é uma questão de orgulho profissional. Para outros, este é apenas mais um trabalho e o objetivo é fazê-lo rapidamente e ir para casa.

Nenhuma quantidade de convencimento mudará essa situação e, se você introduzir um padrão de qualidade de código obrigatório, seus nove a cinco desenvolvedores encontrarão uma maneira de trabalhar com o sistema, enquanto seus desenvolvedores dedicados ficarão inevitavelmente irritados com todo o procedimento (o que não é não visa a eles, mas você não pode dizer que o desenvolvedor X deve obedecer às regras, enquanto Y pode fazer o que quiser).

O que funciona, mas ainda pode ser muito frustrante, é ter seus desenvolvedores mais dedicados e conhecedores supervisionando a base de código, provavelmente uma boa troca entre avançar e arrumar o que já está lá.

Biziclop
fonte
5
+1 Mas esses 9-5 desenvolvedores, bem, você deseja a porta giratória para eles, idealmente com algum tipo de acelerador.
Orbling
3
@Orbling: +1. Se eles não se importam o suficiente, eles realmente deveriam estar trabalhando em outro lugar. Seus ótimos desenvolvedores vêm até você com "Eu só tive essa idéia ...".
quickly_now
3
@Orbling Em certas áreas de desenvolvimento, elas podem ser úteis. Eu não sou fã de "snobbery de desenvolvedor", mas você precisa encontrar o nicho de todos para que eles possam ter alguma utilidade. O pior que você pode fazer é assumir que todos são como você.
biziclop
Pessoalmente, acho que o setor está sobrecarregado. Onde estou, a maioria dos trabalhos de software obtém bons 300 candidatos nos dias de hoje. Com esse nível de competição, um empregador pode contratar empregadores que vão além e são melhores que a média.
Orbling
"Agrupar atualizações em uma refatoração para oferecer benefícios tangíveis (pontos de venda)" é o que eu continuo ouvindo de nosso arquiteto-chefe, então terei que acompanhar isso.
Mario T. Lanza
12

O fato é que, em muitas empresas, principalmente devido à atual situação econômica, cada hora deve ser cobrada de alguém.

Ou eles caem rápido .

A menos que os clientes existentes estejam dispostos a pagar pela refatoração, o que é profundamente improvável, a menos que seja fornecido com desempenho ou recursos significativamente atualizados. Então isso não acontecerá nas bases de código mais antigas. Talvez você possa se infiltrar no orçamento de projetos mais recentes, se os clientes tiverem bolsos profundos, mas, a menos que você não precise alterar as APIs na refatoração, isso será inútil para projetos mais antigos e poderá introduzir um situação em que a empresa está apoiando duas bases de código, o que causa mais dores de cabeça e custos.

Como engenheiro, eu adoraria refatorar o código antigo, que não é mais realmente adequado ao objetivo, toda vez que algo se torna obsoleto ou obsoleto. Mas como meus médicos de todas as empresas em que trabalhei me disseram: "Quem pagará?"

Orbling
fonte
12

Eu sempre tento limpar enquanto vou. Não terminei até que o código esteja limpo. O problema da dívida técnica é que a maioria das pessoas não a entende. A melhor maneira de lidar com isso é não acumular nada. Se seus gerentes confiam em seus desenvolvedores para decidir como resolver um problema, você pode tornar a higiene do código parte de todas as tarefas de programação. Se você nunca verificar o código incorreto, não acumula dívidas. Se você também seguir a regra dos escoteiros (sempre deixe o código mais limpo do que o encontrou), sua dívida existente desaparecerá lentamente.

Não vejo a refatoração como uma tarefa separada da implementação de recursos. É parte integrante disso.

EricSchaefer
fonte
5
Eu não poderia concordar mais: "Dívida técnica é como dívida financeira - é muito mais fácil, a longo prazo, simplesmente não acumulá-la. Pague todas as suas contas técnicas uma vez por semana"
Lawrence Dol
7

Se você estiver lidando com gerentes não técnicos, ajudaria se você pudesse converter sua discussão em termos que eles entendam. Se você pode criar um argumento realista para um ROI positivo no trabalho gasto para pagar a dívida técnica, poderá chegar a algum lugar. Esse exercício dependerá das suas circunstâncias, mas um exemplo pode ser algo assim:

Analise quanto tempo os desenvolvedores são forçados a gastar ajudando o Suporte com problemas de produção e defenda que a correção de códigos antigos prejudiciais A. reduziria o número de problemas de suporte, B. facilitaria o Suporte a resolver problemas sem passar para o Desenvolvimento e C. reduzir o tempo que o desenvolvimento gasta nos problemas de produção quando eles surgem. Coloque isso em termos de dinheiro economizado por não ter os desenvolvedores envolvidos no trabalho de suporte. Lembre também que toda hora que um desenvolvedor gasta prestando suporte é um "golpe duplo", porque não apenas você está pagando um desenvolvedor para suporte, mas também está queimando o custo de oportunidade do que o desenvolvedor poderia estar fazendo (adicionando novos recursos, etc. .)

Sim, alguns dos números serão vodu / fumaça-e-espelhos ... tudo bem, o segredo sujo da gerência é que eles sabem que a maioria dos números que eles usam são totais BS Contanto que você lhes dê algo aparentemente concreto para trabalhar, para que eles possam entender isso, você tem uma chance de lutar.

mindcrime
fonte
6

Após esta explicação da dívida técnica, sua gerência deve estar convencida de que deve pagar:

Imagine que você tem uma cozinha muito suja, cheia de porcaria. Antes de preparar uma refeição, você deve primeiro passar uma hora limpando. E é assim toda vez que você quer comer. Além disso, ao preparar uma refeição, você deve ter um cuidado extra, para garantir que a porcaria não caia em sua refeição.

A cozinha é o seu código, a refeição é o seu produto, e comer está vendendo o seu produto.

Se eles podem esperar mais tempo para que uma mudança seja implementada, sem uma rede segura de testes de unidade, então há algo errado na sua empresa.

BЈовић
fonte
4

Tem que ser um argumento muito convincente, em termos do produto original e do caso de negócios, que eu não poderia usar esse dinheiro agora para fazer algo mais importante para mim. Goste ou não, sua gerência ou seus clientes estão pagando por isso e você precisa vender para convencê-los.

Vamos reformular isso para se posicionar como cliente. Boa e velha dramatização.

Suponha que você estivesse comprando uma geladeira. E você pode comprar uma geladeira por US $ 1000 que funcionou bem na Acme Corp.

Como cliente, qual você compraria?

E o que os engenheiros da Acme Deluxe acham que é a melhor resposta?

jasonk
fonte
3
Estou tendo dificuldade em determinar sua posição sobre isso. Eu acho que sua resposta é "depende do que o cliente deseja". O problema é que nem todo cliente entende que o refrigerador de baixo custo vazará uma porcaria derretida e desagradável da seção do freezer, fará barulhos altos e, eventualmente, deixará de funcionar após 5 anos, enquanto o outro funcionará tranqüilamente por 20 anos e não será substituído até que seja considerado fora de moda pelos proprietários que a revenderão em troca de um novo modelo. Ainda assim, eu gosto da pergunta que você fez. É instigante. 1
jmort253
Primeira linha - "Tem que ser um argumento muito convincente [] que eu não poderia usar esse dinheiro agora para fazer algo mais importante para mim." Eu uso o exemplo da geladeira como francamente, não me importo com o que acontece dentro da minha geladeira. Eu só quero um resultado. (comida fria a um preço razoável). Para ser franco, não me importo se os engenheiros da geladeira acham que é um produto melhor internamente. Eu posso consultá-los, mas realmente não é uma decisão deles.
jasonk
3

A " dívida técnica " pode ser um assunto complicado para apresentar à administração, pois eles podem não perceber a necessidade. A pergunta pode ser formulada como se existe ou não um campeão na empresa para declarar: "Olha, estamos gastando X% de tempo para trabalhar na dívida técnica aqui. Dê-nos três meses para mostrar que isso funciona bem" ou algo assim semelhante. Existe uma reivindicação de autonomia lá, mas também um período de tempo, pois, caso contrário, a administração pode se perguntar quanto tempo até verem alguns resultados, o que é um território bastante perigoso.

O primeiro ponto, porém, é se eles veem isso como um problema. Se a pessoa com baixa visão não sabe nada sobre óculos e que tipo de mudanças ela pode proporcionar, como deve entender por que um exame oftalmológico pode ser valioso? A mesma idéia aqui, onde o assunto é bastante técnico e não é facilmente quantificado, infelizmente.

JB King
fonte
Eu concordo plenamente com isso e acho cada vez mais. Recentemente, eu tenho reunido uma lista de defeitos que foram reabertos porque uma correção adequada não foi implementada ou defeitos de natureza semelhante. Espero que os desenvolvedores dediquem tempo gasto. Às vezes, sim, às vezes não, mas esse tipo de dados é uma base útil para mostrar à gerência como um produto não saudável está afetando seus negócios.
Desolate Planet
2
No meu local de trabalho atual, as horas extras são alocadas pelos motivos errados. Se fosse investido tempo para manter o aplicativo saudável em vez de problemas de combate a incêndios, o dinheiro seria economizado em horas extras e os desenvolvedores seriam mais capacitados em vez de esgotados e incomodados com o gerenciamento.
Desolate Planet
Mas a gerência (na maioria dos casos corretamente!) Vê dessa maneira. Eu tenho um magimix dos anos 80 que ainda funciona e você está me dizendo para substituí-lo só porque é velho e a cor está fora de moda!
James Anderson
2

Você deveria parar de reclamar.

Aqui está o porquê:

  1. Eles nunca planejam usar o software por mais de um ano
  2. é apenas perda de tempo ajustando-o se o plano deles for despejá-lo depois
  3. existem alguns problemas reais que precisam ser corrigidos agora
  4. os programadores só precisam aprender a lidar com a manutenção, mesmo que nem sempre seja divertido
  5. reclamar que você sabe melhor o que precisa ser feito é arrogante - alguém toma a decisão e você deve ficar feliz com isso
  6. De qualquer maneira, eles confiam em você para escrever um bom código

Então, o melhor caminho a seguir é:

  1. Quando eles lhe derem uma nova tarefa, tente implementá-la o melhor possível no tempo determinado
  2. Escreva perfeitamente da primeira vez. Se você precisar alterá-lo posteriormente, cometeu um erro na primeira vez e qualquer alteração sempre está indo na direção errada - e é uma oportunidade de aprendizado para os programadores quando você comete erros.
  3. Não peça tempo extra, você não receberá, há prazos que você conhece.
tp1
fonte
3
Concordo principalmente, exceto que é bem sabido que mesmo um software ruim tem uma tendência a sobreviver por muito mais tempo do que seus criadores esperam. Mas você está certo, é melhor não reclamar. Em vez disso, se você observar algum recondicionamento em escala limitada que ajude a compreensibilidade do código, pode valer a pena prosseguir e fazer as alterações SEM PERMISSÃO durante sua manutenção / correções (e corre o risco de fazê-lo).
Angelo
@ Angelo - Não seria melhor expressar suas preocupações em vez de permitir que a equipe sofresse em silêncio? Eu já vi o que esse problema faz com o moral da equipe e também com a quantidade de tempo / dinheiro desperdiçado nas horas extras. Eu não vejo isso como "gemido" como tal. Você está simplesmente apontando os riscos do projeto e se suas idéias podem acelerar os prazos de entrega e otimizar os processos, por que não tentar expressar suas preocupações? Se isso cai de ouvidos surdos, pelo menos você sabe onde está.
Desolate Planet
2
Você deve reclamar em voz alta , caso contrário, a culpa é sua se o código de outras pessoas for quebrado ("Você sabia que isso era uma bagunça e não contou a ninguém?"). Levantando-se e dizendo: "Ei, chefe, essa merda, mais cedo ou mais tarde, atingirá o ventilador" é vital para manter uma equipe de desenvolvimento funcional.
Alex
1

Suponho que você nunca esteve envolvido em um projeto para reescrever / substituir ou até atualizar o sistema existente.

Estes são alguns dos projetos mais difíceis de concluir com sucesso. Alguns dos problemas que você encontrará são:

  1. As regras de negócios são perdidas no tempo.
  2. A documentação e a implementação estão totalmente fora de sincronia.
  3. O que você vê como um bug que os usuários veem como um recurso.
  4. Por outro lado, muitos "recursos" serão vistos como defeitos pelos usuários.
  5. Você não conseguirá a aceitação do usuário - eles consideram a sua "descoberta de fatos" como "nerds fazendo perguntas estúpidas", consideram o esforço de teste como uma perda de tempo, insistirão em adicionar novos recursos para prolongar o projeto. já está atrasado.
  6. Provavelmente, o código-fonte não corresponde a 100% do executável em execução.
  7. Enquanto seu departamento está mexendo na refatoração do desenvolvimento que a empresa realmente deseja, não está sendo feito.
  8. As chances são de que sua re-fatoração envolva "interfaces melhoradas mais limpas", arrastando outros projetos para o seu atoleiro de entrega tardia e testes com falha.
  9. Depois que o projeto for concluído (mais de 50% desses esforços falham completamente), você perderá toda a credibilidade - precisará mudar para outra empresa em outra cidade para encontrar alguém preparado para ouvir você.
  10. Se o projeto "for bem-sucedido", todos se lembrarão do pesadelo - você .......

Exorto você a evitar qualquer projeto de reescrita / refatoração como a praga, pois essas podem ser algumas das experiências mais desanimadoras da carreira de qualquer profissional.

Há muita sabedoria na frase "Se não está quebrado, não conserte".

James Anderson
fonte
1
"Suponho que você nunca esteve envolvido em um projeto para reescrever / substituir ou até atualizar o sistema existente" - Errado, 7 anos.
Desolate Planet
1
Concordo plenamente que uma reescrita completa geralmente é um desastre. Mas tenho três exemplos nos últimos 8 anos da minha carreira. Um deles foi um longo trabalho árduo que resultou em podermos manter o produto melhor, mas não forneceu valor comercial; outro foi uma breve reescrita que foi um sucesso total; a terceira foi a decisão de não reescrever, o que acabou matando a empresa. Escolha seu veneno.
Tom Harrison Jr
1

Pela minha vida, não consigo entender por que algumas pessoas têm tanto medo das mudanças - cegam a falta de confiança em suas próprias habilidades.

Eu assisti a um show ontem à noite no Parque Nacional de Yosemite e foi observado que, de 1940 a finais da década de 90, nenhuma árvore sequóia nova brotou. Foi descoberto que a razão disso era que havia uma política estrita contra a queima de incêndios florestais e que as pinhas das sequóias precisavam do calor do fogo para abrir e liberar suas sementes.

Veja bem, um incêndio a cada dez anos mais ou menos era saudável. Limpou toda a madeira morta e amora acumulada para manter saudáveis ​​as árvores (processos) existentes e abrir espaço para novas (características).

Neste momento, estou em um projeto que tem um caso claro de reconstrução: o software legado foi escrito inteiramente usando formulários da web .NET. Quase toda a lógica de negócios é combinada com a lógica de exibição de tags HTML / servidor e não pode ser estendida para outros aplicativos agora que os negócios cresceram.

A gerência está por trás da tarefa, porque eles têm uma confiança adequada em seus desenvolvedores, o que, eu percebo, é um luxo raro.

Sim, pergunte a si mesmo se uma reconstrução é realmente necessária. Faça o possível para reutilizar o código existente que funciona onde você pode. Integre esse código à reconstrução, se necessário. Só não deixe ninguém te convencer de que ter medo de fazer mudanças ousadas é a única maneira de existir como desenvolvedor de software.

Boa sorte!

Matt Cashatt
fonte
1
como isso responde à pergunta: "Como você comunica isso à gerência para que eles se interessem em resolver a dívida técnica?"
Gnat
1
@gnat: Como a maioria das "respostas" responde diretamente a essa pergunta? Veja, por exemplo, respostas de James Anderson, tp1, ou quaisquer respostas no topo com mais votos. Mas, para responder sua pergunta, forneci uma analogia alternativa que o OP pode usar. Parece-me que você simplesmente discorda da minha opinião sobre o assunto. Tudo bem, mas não há razão para votar.
Matt Cashatt
1
de acordo com a minha leitura, a resposta principal a que você se refere parece abordar diretamente a resposta solicitada, com base na experiência relevante "Quando me encontrei com meu chefe para discutir isso ..." Quanto à sua opinião, prefiro concordar com ela, mas voto com base em sobre a qualidade do conteúdo, não sobre se sou de opinião ou discordo de uma determinada opinião. Pilha troca Q & A modelo de votação é muito pobre quando (mal) usado para pesquisas de opinião
mosquito
1
Eu recomendo lê-lo novamente, então. A descrição de uma conversa com o chefe sobre um método para cobrir dívidas técnicas preenchendo estimativas para trabalhos futuros não responde à pergunta: "Como você comunica isso à gerência para que eles se interessem em resolver a dívida técnica?" ou. No entanto, não votei negativamente na resposta porque ela aumentou a conversa. Então, tudo o que você conseguiu fazer foi silenciar uma opinião sobre o assunto com o qual concorda sem motivo substancial. "Programadores" deve ser um lugar onde possamos conversar. Nem tudo é binário.
Matt Cashatt
1

Você precisa fornecer à sua administração uma razão financeira para lidar com a dívida técnica e uma estrutura para gerenciar a redução dessa dívida técnica.

Manter um roteiro tecnológico é uma dessas estruturas. Começar com um roteiro ajudará você a não acumular dívidas técnicas e também poderá reduzir a dívida existente.

Muitos projetos bem-sucedidos de longo prazo associaram comitês de direção e roteiros para orientar o desenvolvimento. Isso é especialmente útil quando há várias equipes de desenvolvimento e partes interessadas envolvidas.

Minha sugestão é que você discuta essa estratégia com seus gerentes (e se possível com aqueles que tomam decisões sobre onde o dinheiro é gasto).

A abordagem geral para criar e gerenciar um roteiro é direta, mas requer o apoio de sua equipe de gerenciamento. Primeiro, defina uma meta. Defina os elementos da dívida técnica e desenvolva uma arquitetura de sistema de destino que reduz elementos da sua dívida técnica. Lembre-se de que não precisa ser perfeito, apenas viável e melhor do que você é atualmente. Leve em consideração software, ferramentas de desenvolvimento, plataformas de hardware, os principais novos recursos que podem ser adicionados ao sistema. Faça uma análise de custo. Se você possui a arquitetura desejada, quais são os benefícios tangíveis da execução da refatoração? (Os benefícios incluem tempo de teste reduzido, produtos de software mais confiáveis, ciclos de desenvolvimento mais previsíveis etc.) Se você puder mostrar benefícios suficientes para executar a refatoração, poderá obter suporte de gerenciamento.

Depois de ter um roteiro e suporte de gerenciamento, desenvolva uma série de etapas (também chamadas de plano) que você precisa seguir para chegar ao estado desejado. Pode ser uma boa idéia montar um comitê de direção que mantenha o roteiro, treine e instrua as equipes de desenvolvimento no roteiro e revise periodicamente as alterações para a integridade da arquitetura.

Os roteiros são realmente úteis, e talvez a 13ª pergunta do Joel Test deva ser "Você tem um roteiro?"

Aqui está um vídeo da primeira hora de uma sessão recente do roteiro do Red Hat Linux .

Jay Elston
fonte
1

Já tendo participado de uma grande reescrita (não apenas refatorada), posso concordar que fazer com que os responsáveis ​​financeiros concordem com o projeto foi um dos maiores obstáculos. Superar esse obstáculo exigia que eu escrevesse, apresentasse e defendesse um relatório que apontava uma série de questões que significavam que os negócios da empresa estariam mortos na água a curto e médio prazo.

Fatores-chave para levar o acordo adiante:

  • O código existente estava em uma cadeia de ferramentas não suportada (MicroPower Pascal), que era executada apenas em uma plataforma de desenvolvimento quase não suportável (PDP11-23).
  • Encontrar desenvolvedores que pudessem trabalhar em ferramentas e destinos estava se tornando quase impossível.
  • O hardware de destino não estava mais disponível se fossem necessárias peças de reposição e o fabricante estava cada vez mais relutante em fornecer um serviço de reparo.
  • Os problemas no código estavam resultando em insatisfação do cliente prontamente identificável e custos diretos de manutenção.
  • Adicionar novos recursos ou até mesmo correções de bugs estava se tornando quase impossível devido a limitações do hardware de destino, resultando na necessidade de refatorar outras áreas, a fim de fornecer espaço ao solucionar problemas.
  • Com um tempo de construção de 8 horas, o desenvolvimento e o teste de quaisquer alterações eram caros.

O relatório detalhou os problemas, com estimativas de custos contínuos, e ofereceu três opções:

  1. Congele onde estávamos com possivelmente nem mesmo correções de bugs no futuro próximo.
  2. Otimize o código apenas para o espaço, sem considerar a capacidade de manutenção, indicando que qualquer pessoa que tente manter o código otimizado teria que ser mais inteligente do que quem fez a otimização.
  3. Reimplemente, com testabilidade e capacidade de manutenção como fatores altos, em um padrão da indústria, amplamente ensinado, idioma (ANSI C), em hardware COTS novo e de baixo custo (PC-104), com vários fornecedores disponíveis internamente placa de interface projetada para permitir que ele funcione com o hardware existente restante. Adicionando um conjunto limitado de novos recursos como parte do desenvolvimento, como armazenamento não volátil, um cronômetro de vigilância para fornecer reinicialização automática em uma condição de falha, algumas unidades estavam travando várias vezes ao dia e exigindo uma chamada de serviço de £ 40 para redefinir , melhores diagnósticos no processo.

Tendo conseguido a 3ª opção, meu contrato de 3 meses se transformou em 3 anos de trabalho muito duro, desenvolvendo o novo software e hardware, mas com um resultado muito bom.

Para casos com dívidas técnicas menos extremas, costumo adotar o que chamo de refatoração de guerrilha:

Quando há um problema com um módulo específico:

  1. Escreva um conjunto de testes que demonstrem o problema que provavelmente também falhará sem refatorar
  2. Refatorar como parte do desenvolvimento, apontando que os testes ainda estão falhando.
Steve Barnes
fonte