Dívidas técnicas e seus impactos em projetos ágeis
A palavra dívida nos remete, imediatamente, ao ato de dever a alguém e, na maioria das vezes, essa dívida está relacionada a questões financeiras, como: empréstimos, financiamentos, cartão de crédito e outros. Mudando o contexto da palavra e trazendo ela para a metodologia ágil, as dívidas técnicas podem impactar, significativamente, as atividades de desenvolvimento de projetos caso a equipe não siga as boas práticas.
Conheça esse assunto no detalhe e veja como identificar e tratar suas dívidas.
Dívidas técnicas
“Sua empresa passa a adotar o modelo de home office e você é um dos primeiros colaboradores que irá começar a trabalhar em casa em período integral.
Depois de algum tempo nesse novo modelo de trabalho, você percebe que poderia ser mais produtivo se tivesse um segundo monitor. Então, mesmo sem saldo na conta, você resolve comprar um novo monitor em uma loja on-line e escolhe pagar com seu cartão de crédito.Quando a fatura do cartão de crédito chega você percebe que não irá conseguir pagar e, com os juros na casa dos 300% ao ano, o valor da fatura aumentará diariamente, criando um efeito de bola de neve.”
Esse é um exemplo que demonstra como podemos adquirir uma dívida financeira. Mas qual a relação de uma dívida financeira e uma dívida técnica? Veja na continuação dessa história:
“Agora imagine que no mesmo período várias outras empresas também adotaram o modelo de trabalho remoto e, por isso, o site em que você comprou seu monitor passa a ter uma demanda mais alta de compras e de entregas, fazendo com que o time responsável pelo desenvolvimento do site precise ajustar as previsões das entregas.
Após análise, são propostas duas soluções e ambas atenderão aos requisitos do negócio:
Solução A: seguindo as melhores práticas do mercado, o time irá demorar quase duas semanas para implementar os ajustes.
Solução B: o time levará dois dias para concluir os ajustes, porém eles não serão codificados da melhor maneira ou no mesmo padrão da arquitetura atual.
Como a necessidade de ajuste é urgente, a opção escolhida foi a mais rápida e com isso eles acabaram de fazer uma dívida técnica, já que apesar de ser mais rápida, a solução em questão foi implantada às pressas e comprometeu diversos pontos do sistema: variáveis, códigos, lógica.”
A história contada acima é uma analogia introduzida no Manifesto Ágil em 1992, por Ward Cunningham, coautor do Manifesto, que nos mostra que adquirir uma dívida, seja ela financeira ou técnica, é fácil e pode comprometer os planos futuros.
No caso do site, a dívida técnica só será resolvida com uma atividade de refatoração do código.
Essas dívidas técnicas não são geradas apenas por decisões de implementação, outros problemas que de alguma forma impactam negativamente a produtividade do time também podem ser consideradas, por exemplo:
- Arquitetura obsoleta;
- Duplicação de código;
- Falta de cobertura de testes;
- Falta de padrão na codificação.
Mas, por outro lado, nem todos os problemas de software são dívidas técnicas, também podem ser:
- Dívidas de Qualidade, como defeitos identificados e não corrigidos;
- Dívidas de Processos, como falta ou falha nos processos;
- Dívidas de Funcionalidades, como funcionalidades erradas ou defasadas;
- Dívidas de UX, como experiência inconsistente ou ruim;
Dívida de Habilidades, como falta de conhecimento ou senioridade do time.
E se eu não pagar a dívida?
Assim como nas dívidas financeiras existem os juros compostos, a cada sprint ou iteração nas quais novas funcionalidades serão adicionadas ao sistema, as dívidas técnicas que não forem pagas terão sua complexidade e a dependência do código já existente aumentadas.
Ou seja, quando é decidido fazer uma “gambiarra” para contornar outra, esse acúmulo impacta diretamente na velocidade, qualidade e produtividade do time em futuras implementações.
Essas são algumas consequências, mas elas podem levar a outros tipos de situações.
Por exemplo: um time que sempre precisa dar um jeitinho para contornar um problema ou justificar porque os ajustes que eram simples se tornaram tão complexos e demorados, pode se sentir desmotivado.
Como posso quitar essas dívidas?
Com comunicação, honestidade e transparência!
O alinhamento entre as áreas de negócio e técnica é fundamental, pois quando falamos de decisões e responsabilidades do time temos que lembrar que o Product Owner também faz parte desse time.
Então, se a pressão para a entrega de alguma funcionalidade gerar a decisão de pegar um atalho, todas as consequências técnicas precisam estar bem claras e todos os membros do time precisam estar de acordo, inclusive o PO.
Esses detalhes técnicos, além de servirem como insumo para a tomada de decisão, facilitará a compreensão de todos no momento de priorizar a dívida técnica.
Além de tudo isso que falamos, três outras dicas podem te ajudar com as dívidas técnicas:
- Mantenha o quadro sempre organizado
Após identificar as dívidas é preciso evidenciá-las e, para isso, existem várias maneiras de tratar essas atividades dentro da iteração:
- Criando um backlog separado apenas com as dívidas técnicas;
- Aplicando a regra do 80/20, onde 80% são atividades do backlog de desenvolvimento e 20% de dívidas técnicas;
- Desenhando uma raia exclusiva no quadro para as dívidas e sempre mantendo um número mínimo e máximo de cards.
Independentemente de qual metodologia for utilizada, o importante é sempre acompanhar e deixar as dívidas visíveis, assim será possível identificar o impacto que elas geram, seus valores e quando será possível pagá-las.
Outra boa prática é sempre ficar atento para que as dívidas não se acumulem ao ponto de ultrapassar a capacidade do time ou o backlog de dívidas ser maior que o de funcionalidades. Isso pode decretar a “falência” do software.
- Saiba que você terá despesas inesperadas
Nem todas as dívidas técnicas são planejadas e muitas não são feitas intencionalmente. Para mitigar essas dívidas é possível:
- Peer Review e Definifion of Done: adicionar uma etapa de revisão que, além de garantir o padrão e a qualidade do software, fará com que mais pessoas da equipe tenham conhecimento das funcionalidades que estão sendo implementadas. Incluir o peer review ao definition of done reforça ainda mais esse processo.
- Padrão de codificação e arquitetura bem definida: de modo geral, manter um padrão ajuda na prevenção, redução e até na resolução de dívidas técnicas, uma vez que todos estarão acostumados com o modelo.
- Mantenha a saúde financeira
Da mesma maneira que utilizamos o cartão de crédito para antecipar compras, fazer dívidas técnicas também pode aumentar a produtividade do time, nem sempre sendo considerada uma opção ruim.
Mas lembre-se: assim como as dívidas financeiras, o acúmulo de dívidas técnicas pode diminuir rapidamente a velocidade e a qualidade das entregas.
O importante então é manter a saúde financeira em dia, isto é, encontrar um equilíbrio e sempre incluir atividades de dívidas técnicas na iteração sem estourar seu orçamento.