O que é dívida técnica? - Delegado Anônimo
Piadinha

O que é dívida técnica?

Devo, não nego...

Postado por Fabricio Panhan em 28-11-2014

Fala aí escovadores de bits! Hoje é dia de Black Friday e esperamos ansiosos para gastar algumas dilmas, mas quando chega a fatura do cartão de crédito começa o terror, agora imagine que você precisa colocar uma funcionalidade emergencial no software. Você tem duas maneiras de fazê-la, a primeira é rápida e "meia boca" onde você tem certeza que um dia no futuro pode ocorrer algum problema. A outra maneira é você planejar uma arquitetura limpa e concisa que pode perdurar durante a vida inteira do software, mas você vai demorar além do prazo dado. E agora? Quando a fatura chegar será um terror?

Explicando...

Escolhendo a maneira rápida, há uma grande possibilidade de você contrair uma dívida técnica. Dívida técnica foi uma metáfora criada em 1992 por Ward Cunnigham [1] que nos ajuda a pensar sobre esse dilema (qualidade vs. prazo) e alguns outros dilemas. Como uma dívida financeira, a dívida técnica incorre em pagamentos de juros, que vêm sob a forma de esforço extra que temos de fazer no desenvolvimento de software devido à escolha rápida e "meia boca". Podemos optar por continuar a pagar os juros, ou podemos pagar o montante total na refatoração do código "meia boca". [2] "Entregar um código sem pensar muito é como entrar em uma dívida. Um pouco de dívida acelera o desenvolvimento, desde que ela seja paga prontamente com uma refatoração. Alguns objetos fazem o custo desta operação tolerável. O perigo ocorre quando a dívida não é paga. A cada minuto gasto em código não-muito-certo conta como juros sobre essa dívida." (livre tradução) [3]

Cunnigham propôs essa metáfora de maneira sutil, quase como uma provocação, mas com o passar dos anos ela foi gerando discussões, inclusive aqui com os delegados e hoje em dia a definição usada é de Carolyn Seaman e Yuepo Guo em seu artigo Mensuring and Monitoring Technical Debt. 'Dívida técnica é uma metáfora para artefatos imaturos, incompletos ou inadequados no ciclo de vida de desenvolvimento de software.' [4]

Classificação

Segundo Steve McConnell [5], um velho conhecido dos delegados, a dívida pode ser classificada em dois tipos dependendo do modo em que são contraídas, estes tipos são: dívida técnica sem intenção e dívida técnica intencional.

Dívida Técnica sem intenção

Ocorre quando a dívida é adquirida sem que o time perceba, ou seja, por algum descuido ou pela complexidade, alguns problemas são introduzidos acidentalmente. Este tipo de dívida não é resultado de uma estratégia, gerando assim, um impacto negativo.

Alguns exemplos do surgimento desta dívida são: "O layout não funciona no IE 6.0" (quem é o maluco que usa o IE 6?), "Código ruim feito por desenvolvedor inexperiente", "Um cliente pediu uma funcionalidade para o sistema, que não foi totalmente detalhada corretamente e quando a solução chega ao cliente não era exatamente o que ele esperava".

Dívida Técnica intencional

Ocorre quando a dívida técnica a ser adquirida já é conhecida e por algum motivo o time decide adquiri-la de maneira consciente. Isso pode ocorrer para uma entrega mais rápida, deixando de lado os esforços futuros. Este tipo de dívida é resultado de uma estratégia.

Alguns exemplos são: "Uma equipe não tem tempo suficiente para a entrega de uma solução definitiva, então ela escreve um código que mantém as duas bases sincronizadas e as junta depois que essa versão for enviada.", "Uma equipe faz um código que resolve o problema, então se opta por usar este código e deixa para depois a sua refatoração."

Pagando a dívida

Dívida Técnica a curto prazo

Bem como uma dívida comum a dívida técnica pode ser paga num curto prazo e, geralmente, o pagamento deste tipo de dívida técnica é feito para suprir as necessidades imediatas. Outra característica desse tipo de dívida é que ela é paga com certa frequência a fim de reabilitar o crédito para aquisição de novas dívidas.

Dívida Técnica a longo prazo

As dívidas técnicas a longo prazo são adquiridas, em geral, de forma estratégica, com um planejamento a fim de suprir necessidades de grande valor de negócio, como por exemplo, o lançamento de um certo produto a fim de ganhar espaço no mercado, ou deixar de fazer os testes unitários, que no futuro precise ser paga.

Nos próximos posts vamos discutir mais como identificar uma dívida técnica e como criar indicadores para podermos planejar os nossos pagamentos.

Não se esqueçam de comentar!

Referências