Como avaliar, gerenciar e evitar dívidas técnicas

Publicados: 2020-05-26

Se dívida técnica soa como algo tirado de um manual de finanças, é porque o termo está relacionado a finanças. No entanto, no sentido real, a dívida técnica está relacionada à programação. É a ideia de que, durante o desenvolvimento de um projeto de software, certas etapas necessárias são omitidas, ou simplesmente descartadas em uma tentativa de cumprir um prazo.

Em uma tentativa de desenvolver o aplicativo ou software perfeito, os desenvolvedores geralmente estão sem tempo - assim como qualquer pessoa aleatória realizando qualquer tarefa arbitrária de qualquer maneira. Assim, geralmente faz sentido ter algum tipo de compromisso entre entregar um produto perfeito com código perfeito e maximizar o tempo.

A questão então é: existe um limite para esses trade-offs? Existem danos inerentes que podem resultar dessa troca? Finalmente, o desenvolvedor está realmente melhor a longo prazo? Neste artigo sobre dívidas técnicas, tentarei responder a todas essas perguntas.

O que é dívida técnica?

What Is Technical Debt

Ao definir dívida técnica, teremos que nos referir ao homem creditado por ter gerado o termo em primeiro lugar: Ward Cunningham. De acordo com Cunningham, a dívida técnica refere-se ao trabalho extra de desenvolvimento que deve ser feito para programar um código para compensar o déficit resultante de programá-lo em um curto período.

Para torná-lo mais gráfico, imagine que você está encarregado de limpar uma sala bagunçada e está atrasado para uma aula. Em uma tentativa de garantir que você cumpra as instruções e também chegue na hora para sua aula, você faz uma limpeza rápida, varrendo a maior parte dos detritos para debaixo do sofá. A consequência disso é que, eventualmente, você terá que gastar um tempo separando a bagunça. Para o desenvolvimento de software, quando você pular as etapas necessárias e seguir uma rota mais fácil, com códigos 'não tão limpos', ficará mais difícil limpar o código mais tarde no futuro. Existem várias fases encontradas nos dominós do projeto de software, e quanto mais tempo você ignora um problema existente, mais tempo leva para ser resolvido.

Tipos de Dívidas Técnicas

As dívidas técnicas são de diferentes tipos, incluindo:

Dívidas Técnicas Planejadas

Isso ocorre em situações em que as organizações decidem deliberadamente entrar em dívidas técnicas. Isso, como discutido anteriormente, geralmente é para cumprir os prazos estabelecidos e chegar a uma meta específica. Ao se envolver em dívidas técnicas planejadas, a organização precisa ter clareza do que está disposta a abrir mão e do que não pode. Você tem que manter registros precisos, tendo em mente que eventualmente você terá que retornar e corrigir os erros que você pulou no início.

Dívidas técnicas não intencionais

Esse tipo de dívida técnica é o oposto direto do primeiro. Surge quando uma organização não prevê ou planeja dívida técnica. A razão para isso é normalmente uma falha na comunicação entre as várias unidades da organização ou práticas de trabalho ruins entre as unidades.

Dívidas Técnicas Inevitáveis

Esse é o tipo de dívida técnica que nenhuma ação por parte da organização poderia evitar. Por exemplo, com as rápidas mudanças experimentadas na tecnologia, faz sentido que alguns códigos escritos no passado fiquem aquém dos padrões atuais projetados.

Além disso, esse tipo de dívida técnica pode surgir quando as alterações são solicitadas quando o código já está sendo escrito. Se no meio do projeto do software forem introduzidas algumas mudanças, isso pode atrapalhar a dinâmica, tornando o código antigo obsoleto ou desnecessário.

Causas da Dívida Técnica

Causes of Technical Debt

Algumas das razões para a dívida técnica foram discutidas acima, mas vou escolhê-las uma após a outra para torná-las mais claras.

Pressa

A causa mais frequente de dívida técnica é a pressa. Os desenvolvedores geralmente têm prazos rigorosos, alguns dos quais incluem prazos para o lançamento de determinado software. Muitas vezes é compreensível (e esperado) nesses tipos de situações que o desenvolvedor possa incorrer em dívidas técnicas ao longo do caminho. Esse tipo de dívida técnica é muitas vezes intencional e pode resultar em problemas que podem variar de bugs no código ou códigos de espaguete surgindo.

Supervisão/Erro

Às vezes, os programadores apenas escrevem códigos ruins, o que acaba levando a dívidas técnicas. Independentemente de o código ruim existir como resultado do erro do codificador ou não, o fato é que erros resultam em dívidas técnicas e, por não serem escaláveis, eventualmente terão que ser corrigidos.

Falta de conhecimento dos efeitos

Às vezes surgem dívidas técnicas porque o codificador não percebe ou reconhece como as dívidas técnicas são prejudiciais a longo prazo. Isso pode resultar de uma ignorância legítima dos efeitos nocivos de tomar atalhos durante a programação, ou pode ser um desrespeito intencional das consequências.

Intenção

Dívidas técnicas podem surgir intencionalmente por ações deliberadas do codificador ou da organização.

Falta de modularidade

Isso ocorre principalmente porque um código pode atender a diferentes lógicas de negócios ao mesmo tempo. Esse tipo de situação torna o manuseio de software muito mais difícil. Com cada código que um desenvolvedor escreve, maiores são as chances de eles enfrentarem desafios com a modularidade.

Avaliação da Dívida Técnica

Evaluation of Technical Debt

As dívidas técnicas nunca devem ser calculadas manualmente porque isso seria bastante árduo. Isso significaria ter que inserir manualmente o código para determinar os problemas atuais e os possíveis futuros. Além da perda de tempo do processo manual, existe a possibilidade de que os códigos tenham mudado de forma no final do processo manual.

Uma forma de realizar a avaliação é através da realização de uma análise estática utilizando algumas ferramentas que a suportam. Algumas das ferramentas que podem ser usadas incluem Coverity, SonarQube, Check Style e Closure Compiler.

Geralmente, existem duas maneiras de calcular dívidas técnicas. Na primeira abordagem, poderia ser obtido calculando-se o índice da dívida técnica seguindo o índice do código. Aqui, a estimativa inicial ou o tempo total necessário para desenvolver o aplicativo seria usado para determinar o tempo necessário para corrigir a dívida técnica.

Na segunda abordagem, você pode usar diretamente as estimativas fornecidas pelas várias ferramentas, como o SonarQube. Isso será combinado com as listas de dívidas técnicas, bem como seus códigos de referência. A partir das ferramentas, você pode obter uma estimativa precisa do tempo necessário para corrigi-lo.

Avaliar a dívida técnica lhe dará uma noção de quantos dias serão necessários para corrigir a dívida técnica. Quanto mais dívidas houver, mais tempo você levará para corrigi-las.

Resolvendo Dívidas Técnicas

E se ocorreram dívidas técnicas e você não sabe o que fazer? Existem alguns passos que você pode tomar para gerenciar as dívidas técnicas.

Em primeiro lugar, você deve reconhecer que as dívidas técnicas existem e comunicar o mesmo à sua equipe. Ao se comunicar, você deve ser claro sobre o que aconteceu e o que precisa ser feito para corrigi-lo. Você deve certificar-se de comunicar claramente a necessidade de cuidar da dívida técnica na primeira oportunidade.

Depois de informar sua equipe sobre as dívidas técnicas, há três abordagens que você pode tomar. Na primeira abordagem, você pode decidir continuar com o sistema como está. Nesse cenário, o aplicativo será usado como está.

Como alternativa, você pode decidir refatorar o aplicativo. A refatoração é feita com o objetivo de reduzir a complexidade do aplicativo, bem como limpar a estrutura do aplicativo. Com a refatoração, o comportamento do software não será alterado; a única parte afetada será a estrutura interna.

Finalmente, se as duas opções discutidas acima não funcionarem, você terá que substituir o código completamente. Um problema com isso é que pode levar a novas dívidas técnicas, mas isso pode ser uma compensação melhor a longo prazo.

Evitando Dívidas Técnicas no Futuro

Avoiding Technical Debts

Claro, é óbvio que evitar dívidas técnicas é definitivamente mais inteligente do que tentar consertá-las quando elas surgirem. Além de economizar tempo e estresse, também garante que as consequências residuais decorrentes de dívidas técnicas desde o início estejam ausentes.

Pode-se argumentar que as dívidas técnicas, por si só, não são ruins. Eles são problemáticos geralmente porque são dívidas que precisam ser pagas, e os humanos não são a espécie mais responsável na Terra. A escolha consistente de uma opção mais fraca geralmente enfraquece a força do seu software e dificulta a melhoria das funcionalidades posteriormente. Ao todo, evitar dívidas técnicas é a melhor aposta para qualquer pessoa.

Então, como evitar que surjam dívidas técnicas:

Criar uma lista de pendências do projeto

A ideia aqui é manter todos a par do processo e agilizá-los com a exigência de qualquer tarefa que esteja sendo realizada. A criação de uma lista de pendências permite que todos vejam as tarefas não concluídas e os caminhos a serem seguidos para alcançá-las.

Priorize a qualidade sobre a velocidade

Se você é um programador, precisa aprender a priorizar a produção de trabalho de qualidade em vez de muito trabalho. Certifique-se de que seus códigos estejam limpos e que seus aplicativos ou outros softwares sejam desenvolvidos com perfeição. Entenda que a tentação de pegar atalhos não valerá a pena porque, eventualmente, você ainda terá que realizar as tarefas que abandonou.

Se você lidera uma equipe, precisa comunicar esses mesmos valores aos membros da equipe. Os membros devem ser ensinados a criar soluções orientadas para resultados e evitar atalhos.

Criar consciência

Geralmente, um conhecimento aprofundado do que é a dívida técnica e como evitá-la pode ser útil para evitar que surjam em primeiro lugar. Quando você arma seus desenvolvedores com o conhecimento necessário, eles evitarão melhor as armadilhas que as dívidas técnicas representam.

Introduzir boas práticas de codificação

Algumas práticas de codificação tornam mais provável que você caia em dívida técnica. Assim, seria ótimo evitar o acoplamento apertado, empregar abstração e refatoração.

Introduzir tecnologia atualizada

Atualizações regulares de tecnologia podem ser um excelente meio de evitar dívidas técnicas. Na atualização, você deve certificar-se de que o que está sendo usado é a estrutura, os bancos de dados e o software aplicativo mais recentes.

Conclusão

Dívidas técnicas, na grande maioria dos casos, são inevitáveis ​​desde que você continue desenvolvendo programas e escrevendo códigos. No entanto, as chances de sua ocorrência podem ser bastante reduzidas quando as etapas listadas acima são seguidas. Além disso, na eventualidade de dívidas técnicas, toda a esperança não está perdida. Fique calmo, seja confiante, aja de acordo.