Dívida Técnica: como evitar essa armadilha e desenvolver software mais rápidos
- Cloud e Infraestrutura
- Artigo
Com o avanço da tecnologia impulsionando todos os aspectos, desde a operação das empresas até os produtos e serviços que oferecem, instituições de diversos setores, como varejo, manufatura e serviços financeiros, estão enfrentando a necessidade de adquirir novas competências e habilidades. Além de compreenderem profundamente as particularidades de seus segmentos, elas devem sobressair especialmente no desenvolvimento de software. Porém, um dos obstáculos que pode prejudicar essas empresas é a dívida técnica.
Wagner Fusca, agile coach da Objective, faz uma analogia da ida a um restaurante para exemplificar a dívida técnica. Em restaurante, ao pagar o almoço temos duas opções de pagamento: cartão de débito e crédito.
Ao efetuar uma transação com cartão de débito, o valor é retirado diretamente da conta corrente, evitando preocupações futuras. Já ao utilizar o cartão de crédito, o pagamento é adiado, o que significa lidar com a consequência posteriormente. Entretanto, caso não seja possível pagar a fatura integral, os juros são aplicados de forma severa.
Da mesma forma, no desenvolvimento de software, quando o programador opta por ignorar as melhores práticas de programação e design, isso resulta na acumulação de uma dívida técnica que, eventualmente, precisará ser quitada.
A dívida técnica é um ônus inevitável nos negócios e exige uma gestão adequada para garantir a sustentabilidade de uma organização a longo prazo. No entanto, apesar de sua importância, o termo ainda é pouco conhecido. De acordo com uma pesquisa feita por Wagner Fusca, quase metade das pessoas que trabalham profissionalmente com software, incluindo não apenas desenvolvedores, desconhecem o termo dívida técnica ou o interpretam de maneira equivocada.
Nesse cenário este artigo vale a leitura, pois aborda o conceito de dívida técnica, seus impactos, boas práticas e como metodologias ágeis como o Agile podem contribuir para sua redução. Além disso, relatamos como a Microsoft enfrentou sua dívida técnica.
O que é dívida técnica?
A dívida técnica é uma metáfora utilizada na engenharia de software para descrever o custo adicional que uma equipe enfrenta no futuro devido a escolhas de design ou desenvolvimento de baixa qualidade no presente. Assim como a dívida financeira, a dívida técnica acumula-se ao longo do tempo se não for tratada e pode levar a problemas significativos no projeto.
Essas escolhas de baixa qualidade podem incluir código mal escrito, falta de documentação, arquiteturas inadequadas, falta de testes ou atrasos na implementação de correções necessárias. Embora essas escolhas possam permitir uma implementação mais rápida no curto prazo, elas geralmente resultam em complicações e custos adicionais no futuro, à medida que a equipe precisa lidar com problemas de manutenção, correções de bugs e dificuldades para adicionar novos recursos.
É importante reconhecer a dívida técnica e trabalhar ativamente para gerenciá-la e reduzi-la ao longo do tempo, seja através de refatoração do código, melhorias na arquitetura, implementação de testes automatizados ou outras práticas de engenharia de software. Ignorar a dívida técnica pode levar a problemas graves de qualidade, produtividade e custo no longo prazo.
Origem e tipos de dívida técnica
A dívida técnica tem sua origem em decisões tomadas durante o desenvolvimento de software, em que se opta por soluções rápidas em vez de soluções mais robustas e de alta qualidade.
Imagine o seguinte cenário: uma startup de tecnologia que está lançando um novo aplicativo de entrega de comida. Devido à pressão para entrar rapidamente no mercado e competir com outras empresas estabelecidas, a equipe de desenvolvimento optou por soluções rápidas e temporárias para atender aos prazos apertados, como ignorar a escrita de testes automatizados, implementar uma arquitetura simplificada e não documentar adequadamente o código.
No entanto, o aplicativo ganhou popularidade de forma rápida e mais recursos precisaram ser adicionados, consequentemente, os problemas causados pela dívida técnica começam a surgir, como bugs frequentes, baixa escalabilidade e dificuldade em manter e expandir o aplicativo.
Nesse cenário, a empresa percebeu que a decisão de priorizar o lançamento rápido em detrimento da qualidade técnica do produto não foi sustentável a longo prazo, e eles agora terão que trabalhar para resolver esses problemas e reduzir a dívida técnica.
Esse é um exemplo hipotético, porém situações como essa são mais comuns do que a gente imagina. De acordo com a pesquisa Demystifying digital dark matter: A new standard to tame technical debt, da McKinsey, aproximadamente 30% dos Diretores de Tecnologia da Informação (CIOs) relataram que mais de um quinto de seu orçamento destinado a novos produtos é desviado para resolver questões relacionadas à dívida técnica. Além disso, eles estimam que a dívida técnica representa entre 20% e 40% do valor total de seus ativos tecnológicos (antes da depreciação).
Existem três tipos de dívida técnica mais comum, são eles de código, design e testes. Saiba mais sobre cada um desses conceitos:
Dívida de código
Código mal escrito, duplicação de código, falta de modularidade e código difícil de entender são exemplos de dívida de código.
Dívida de design
Arquiteturas inadequadas, falta de padrões de projeto e dependências complexas são exemplos de dívidas de design.
Dívida de testes
Falta de testes automatizados, cobertura de teste inadequada e testes de baixa qualidade são exemplos de dívida de testes.
Dívida de infraestrutura
Dependência de tecnologias desatualizadas, falta de automação na implantação e configurações de servidor mal otimizadas são exemplos de dívida de infraestrutura.
Reconhecer a origem e os tipos de dívida técnica é fundamental para gerenciá-la eficazmente e minimizar seus impactos negativos no projeto de desenvolvimento de software.
Impactos da dívida técnica
A pesquisa da McKinsey desenvolveu o conceito Tech Debt Score (TDS), uma métrica que permite às empresas quantificar sua dívida técnica e realizar comparações com suas concorrentes. Empresas classificadas no percentil 80 do TDS demonstram um aumento de receita 20% superior àquelas no percentil abaixo de 20.
Isto ocorre porque à medida que a dívida técnica se acumula, o custo de manutenção do software aumenta, tornando mais demorado e complexo corrigir bugs, fazer alterações no código e adicionar novos recursos devido à complexidade do código de baixa qualidade. Isso resulta em uma redução da produtividade da equipe, levando a atrasos nos cronogramas e baixa qualidade do software, propenso a falhas e difícil de manter.
Além disso, há riscos de segurança significativos, com código mal escrito deixando o software vulnerável a ataques cibernéticos e violações de dados, afetando negativamente a reputação da empresa e levando à dificuldade de recrutamento e retenção de talentos. O custo de oportunidade perdido também é uma preocupação, já que os recursos gastos na resolução da dívida técnica poderiam ser direcionados para atividades mais estratégicas, como inovação e desenvolvimento de novos produtos.
Outra pesquisa indica que pouco mais da metade dos CEOs da Fortune 100 possuem formação em administração, economia ou contabilidade, enquanto 27% têm formação em engenharia ou ciências. Durante as teleconferências trimestrais de resultados, é comum ouvir discussões sobre receitas, despesas e tendências geográficas, mas raramente se aborda a qualidade do software da empresa.
Isso não implica que os líderes precisam ser engenheiros, mas que poucos fora da área de engenharia têm conhecimento para discutir sistemas de software críticos. Como resultado, problemas de software muitas vezes passam despercebidos pelos CEOs, a menos que ocorra um incidente significativo. Portanto, é fundamental que os líderes da empresa estejam envolvidos na qualidade do software da mesma forma que estão envolvidos nas áreas de vendas e finanças. Isso inclui ter consciência dos impactos negativos mais comuns, como:
Como reduzir a dívida técnica?
A redução da dívida técnica requer uma abordagem evolutiva, começando com ações simples que visem os pontos de maior impacto desde o início. Além disso, é importante contar com o apoio de todas as lideranças da empresa para garantir o sucesso desse processo e obter estratégias eficazes, para isso separamos os seguintes passos:
Priorize e identifique a dívida técnica
Faça uma análise abrangente do código-fonte, arquitetura e processos de desenvolvimento para identificar áreas específicas de dívida técnica. Priorize essas áreas com base em sua gravidade e impacto no projeto.
Estabeleça padrões de codificação
Defina e implemente padrões de codificação claros e consistentes para garantir que todos os membros da equipe sigam as melhores práticas de desenvolvimento de software. Isso inclui padronizar a nomenclatura, a estrutura do código e as práticas de documentação.
Refatore o código
Dedique tempo para refatorar o código existente, simplificando-o, eliminando redundâncias e tornando-o mais legível e sustentável. Isso pode envolver a reestruturação de classes, a extração de métodos e a eliminação de código morto ou duplicado.
Automatize testes
Implemente testes automatizados abrangentes para garantir a estabilidade e a qualidade do software. Isso inclui testes unitários, testes de integração, testes de regressão e testes de aceitação do usuário. Automatize o máximo possível para facilitar a execução frequente dos testes.
Adote a integração contínua e a entrega contínua (CI/CD)
Implemente práticas de CI/CD para automatizar o processo de construção, teste e implantação de software. Isso permite identificar e corrigir problemas rapidamente, reduzindo o tempo entre a escrita do código e sua entrega aos usuários.
Estabeleça uma cultura de revisão de código
Incentive revisões de código frequentes entre os membros da equipe para identificar e corrigir problemas de qualidade antes que se tornem críticos. Isso promove a colaboração e o compartilhamento de conhecimento dentro da equipe.
Ao implementar essas estratégias, as equipes de desenvolvimento podem reduzir efetivamente a dívida técnica e melhorar a qualidade, a estabilidade e a sustentabilidade do software ao longo do tempo.
Agile x Dívida Técnica
No contexto de desenvolvimento de software, a metodologia ágil busca a entrega contínua de valor ao cliente, priorizando a qualidade e a manutenção da flexibilidade para mudanças. A relação entre metodologias ágeis e a dívida técnica pode ser bastante significativa, pois as metodologias ágeis oferecem uma estrutura eficaz para lidar com a dívida técnica. Aqui estão alguns aspectos dessa relação:
Identificação precoce
Metodologias ágeis enfatizam a entrega incremental e iterativa de software, o que significa que os problemas, incluindo a dívida técnica, são frequentemente identificados mais cedo no ciclo de desenvolvimento. Isso ocorre porque o software é entregue em partes menores e os usuários têm a oportunidade de fornecer feedback rapidamente.
Transparência e visibilidade
As metodologias ágeis promovem a transparência e a visibilidade do processo de desenvolvimento. Isso inclui a exposição da dívida técnica durante as reuniões diárias, revisões de sprint e outras cerimônias ágeis. Isso permite que a equipe e as partes interessadas reconheçam e abordem a dívida técnica de forma proativa.
Priorização por valor
No Agile, o foco está na entrega de valor para o cliente de forma rápida e contínua. Isso significa que a dívida técnica é frequentemente priorizada com base em seu valor para o negócio. Se a dívida técnica estiver impedindo a entrega de valor ao cliente, ela é geralmente tratada como uma prioridade.
Flexibilidade para adaptação
Metodologias ágeis são conhecidas por sua flexibilidade e capacidade de adaptação a mudanças nos requisitos e no ambiente de desenvolvimento. Isso inclui a capacidade de acomodar a necessidade de lidar com a dívida técnica à medida que ela surge, sem comprometer significativamente o cronograma ou o escopo do projeto.
Abordagem proativa
Isso inclui a alocação de tempo durante o ciclo de desenvolvimento para atividades de refatoração, teste e redução da dívida técnica. As equipes ágeis são incentivadas a identificar e abordar a dívida técnica de forma contínua, em vez de permitir que ela se acumule ao longo do tempo.
Microsoft: case de sucesso na redução da dívida técnica
Na década de 1990, os sistemas operacionais Windows da Microsoft apresentavam uma série de falhas que resultaram em travamentos frequentes dos computadores. Apesar de conhecidas como “telas azuis da morte”, a Microsoft foi impactada por outros problemas, como hackers, vírus e questões de segurança, devido à conexão dos sistemas Windows com a Internet.
Em resposta a essa crise, Bill Gates emitiu um memorando convocando a todos os 50.000 funcionários da empresa para melhorar a segurança e o design do produto, por meio de iniciativas abrangentes de “computação confiável”. Essas ações incluíram mudanças nos processos de design e desenvolvimento de software, melhorias nos relatórios de erros e atualizações. Em 2000, a Microsoft alcançou uma receita superior a 20 bilhões de dólares, com os clientes elogiando o servidor Windows 2000 como a versão mais confiável até então.
Esses casos destacam como líderes podem reverter a dívida técnica das áreas de engenharia ao fazer perguntas simples, estabelecer padrões e se envolver ativamente no processo.
Um CIO de um provedor líder de nuvem afirma que: “Ao reinventar nosso gerenciamento de dívidas, passamos de 75% do tempo do engenheiro pagando o ‘imposto’ [da dívida técnica] para 25%. Isso nos permitiu ser quem somos hoje.” Essa empresa, cuja identidade não foi divulgada, optou por uma abordagem estratégica que permite aos engenheiros dedicarem até 50% mais de seu tempo em projetos alinhados aos objetivos de negócio.
Não há garantia de que você chegará ao nível desenvolvimento da sua empresa apenas acabando com a dívida técnica, porque o acaso e as circunstâncias também desempenham um papel importante, mas se você se atentar a esse ponto, certamente aumentará suas chances.
Por isso, contar com um parceiro como a Objective que é referência em desenvolvimento de software é uma estratégia interessante. Entre em contato com os nossos especialistas e saiba como podemos te ajudar.
