Como avaliar, gerenciar e evitar dívidas técnicas
Se dívida técnica soa como algo retirado 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 ignoradas ou simplesmente descartadas em uma tentativa de cumprir um prazo.
Em uma tentativa de desenvolver o aplicativo ou software perfeito, os desenvolvedores geralmente precisam de tempo – assim como qualquer pessoa aleatória realizando qualquer tarefa arbitrária. Assim, geralmente faz sentido ter algum tipo de compensação entre entregar um produto perfeito com código perfeito e maximizar o tempo.
A questão então é: há 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?
Ao definir a 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 necessário para programar um código para compensar o déficit decorrente de programá-lo em um curto período.
Para torná-lo mais gráfico, imagine que você tem a tarefa 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 a tempo 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 reservar um tempo para resolver a bagunça. Para 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 posteriormente no futuro. Existem várias fases encontradas nos dominós do projeto de software e, quanto mais 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 contrair dívidas técnicas. Isso, como discutido anteriormente, geralmente é para vencer os prazos estabelecidos e chegar a um objetivo específico. 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ê deve manter registros precisos, tendo em mente que eventualmente 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 a dívida técnica. A razão para isso é tipicamente 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 ter evitado. 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 alterações, isso pode atrapalhar a dinâmica, tornando o código antigo obsoleto ou desnecessário.
Causas da Dívida Técnica
Algumas das razões para a dívida técnica foram discutidas acima, mas vou apenas selecioná-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 geralmente é intencional e pode resultar em problemas que podem variar de bugs no código ou surgimento de códigos espaguete.
Descuido/Erro
Às vezes, os programadores apenas escrevem códigos ruins, que eventualmente levam a dívidas técnicas. Independentemente de o código ruim existir por 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 consciência dos efeitos
Às vezes, as dívidas técnicas surgem porque o codificador falha em perceber ou reconhecer 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 usar atalhos durante a programação ou pode ser uma desconsideração intencional das consequências.
Intenção
Dívidas técnicas podem surgir intencionalmente pelas 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 do software muito mais difícil. Com cada código que um desenvolvedor escreve, mais chances são de que eles enfrentem desafios com a modularidade.
Avaliação da Dívida Técnica
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 problemas 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 formas de calcular as dívidas técnicas. Na primeira abordagem, ela poderia ser obtida calculando-se a razão da dívida técnica seguindo a razão 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 por várias ferramentas, como o SonarQube. Isso será combinado com as listas das 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 corrigi-la. Quanto mais dívidas houver, mais tempo você levará para corrigi-las.
Resolução de Dívidas Técnicas
E se ocorrerem dívidas técnicas e você não souber o que fazer? Existem algumas etapas que você pode seguir para gerenciar as dívidas técnicas.
Em primeiro lugar, você deve reconhecer que as dívidas técnicas existem e comunicá-las à 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, existem três abordagens que você pode adotar. 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 todo o código. 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
Obviamente, é óbvio que evitar dívidas técnicas é definitivamente mais inteligente do que tentar corrigi-las quando elas surgirem. Além do fato de economizar tempo e estresse, também garante que as consequências residuais de ter 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 da Terra. A escolha consistente de uma opção mais fraca geralmente enfraquecerá a força do seu software e tornará mais difícil melhorar as funcionalidades posteriormente. Ao todo, evitar dívidas técnicas é a melhor aposta para qualquer um.
Então, como evitar que surjam dívidas técnicas:
Crie um backlog do projeto
A ideia aqui é manter todos a par do processo e atualizá-los com os requisitos de qualquer tarefa que esteja sendo realizada. Criar um backlog 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ê também é um programador, precisa aprender a priorizar a realização de um 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, deve comunicar esses mesmos valores aos membros da equipe. Os membros devem ser ensinados a criar soluções orientadas a resultados e a evitar atalhos.
Criar consciência
Geralmente, um conhecimento profundo do que é dívida técnica e como evitá-la pode ser útil para evitar que surjam em primeiro lugar. Quando você munir 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ívidas técnicas. Assim, seria ótimo evitar acoplamento rígido, empregar abstração e refatoração.
Apresentar tecnologia atualizada
Atualizações regulares de tecnologia podem ser um excelente meio de evitar dívidas técnicas. Ao atualizar, você deve certificar-se de que o que está sendo usado é a estrutura, os bancos de dados e o software de aplicativo mais recentes.
Conclusão
Dívidas técnicas, na grande maioria dos casos, são inevitáveis enquanto você continuar 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, não se perde toda a esperança. Fique calmo, seja confiante, aja de acordo.