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!
- [1] Ward Cunningham's OOPSLA '92 Experience Report that first mentions technical debt. http://c2.com/doc/oopsla92.html
- [2] Technical Debt, Martin Fowler, 26 de fevereiro de 2009, http://martinfowler.com/bliki/TechnicalDebt.html
- [3] Vídeo de Ward Cunnigham sobre dívida técnica, transcrito por June Kim e Lawrence Wang, postado em 22 de Janeiro de 2011, http://c2.com/cgi/wiki?WardExplainsDebtMetaphor
- [4] Measuring and Monitoring Technical Debt, Carolyn Seaman and Yuepu Guo, Advances in Computers, Vol. 82, 25-46, 2011
- [5] Technical Debt, Steve McConnell , http://www.construx.com/10x_Software_Development/Technical_Debt/