dívida tecnica: precisando de crédito? quão fundo entrar e como evitar que o cobrador bata na sua...
DESCRIPTION
Com métodos ágeis na moda, temos ferramentas para conseguir entregar mais valor com mais velocidade, mas muitas vezes ignoramos práticas que ajudam na manutenção da qualidade técnica da base de código. Num outro extremo, a busca pelo perfeccionismo causa tanto atraso que projetos acabam, tecnicamente perfeitos, mas sem nunca ter sido utilizados por clientes. Nesta palestra vou tratar do investimento em qualidade técnica buscando maximizar o retorno do investimento mínimo que conseguimos fazer. Pretendo dar exemplos de projetos reais, onde vi desde qualidade desnecessária à dívidas técnicas profundas e desconhecidas que inviabilizavam progresso. Vou apresentar técnicas para evidenciar e lidar com esta dívida no dia-a-dia e nas relações com os diversos stakeholders de um projeto.TRANSCRIPT
DívidaTécnica
O que vai rolar nessa palestra?
• Leis• Metáforas• Balas de prata• Histórias• Sintomas• Causas• Estratégias• Práticas• Padrões• Anti-padrões• Recomendações de livros
METÁFORAthe long lost XP practice
CoCeTCOestãoligados
SWITCH (key) {case ‘a’: printf(”a”)case ‘b’:…}
I O U $$$
METÁFORADívida irresponsável
- proposital ou não
Dívida consciente- empréstimo do carro- dívida de cartão de crédito ou cheque
especial - empréstimo da casa
METÁFORA
débito não é dívida!
lost in translation…
vs
“MEUS TESTES ESTÃO RODANDO.”
TESTANDO!
//TODO: refatorar aqui
//FIXME: isso não deveria //estar duplicado
//WTF! PERIGO!
A incrível capacidade de
análise dos seres humanos
?
SISTEMAS COMPLEXOS ADAPTATIVOS
+
O ministério da agilidade adverte: cuidado com seu uso de métricas
Big Visible Charts
By Matthew Bisanz
Não vamos nos preocupar com uma das causas de dívida técnica:
Falta de um processo claro de desenvolvimento
kanban
análise desenvolvimento aceitação produção
análise desenvolvimento aceitação produção
história: a dívida desconhecida do
Não sabiamos qual era a dívida
Temos problemas
Acumulo de dívidas pequenas
Um novo fornecedor
oferece uma solução
Centenas de milhares de R$
Equipe junior para o novo
webmail
Continuamos com problemas
Novo responsável
No final os problemas que tinhamos eram
razoáveis…
… ainda por cima a nova solução não
aguentou
Pagamos a dívida do antigo
sistema
Descontinuamos a nova solução
CAUSAS
FALHASNA
COMUNICAÇÃO
FALHASNA
COLABORAÇÃO
Em Retrospectiva
BAD MANAGMENT
CALCULE e MOSTRE sua
DÍVIDA
http://www.sonarsource.org/
https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin
DOH!
Lei de Parkinson
O trabalho expande para ocupar o tempo reservado para sua execução
FOLGA + refactoring sprint
Time completo
Lei de Murphy
história: falência do SI
Sistema Interno (ou central)
Nasce em 1998 como um banco
access pelas mãos do nosso fundador
Passa por várias outras mãos…
… não conheciamos as
boas práticas
lib_fichao2.asp
Big Ball of Mud
Renovamos domínios sem os clientes pedirem
Centenas de milhares de R$
Não conseguimos entregar o
chargeback a tempo
Centenas de milhares de R$
Falência
Tem que pagar.Investimento
quase R$1milhão
Novo sistema, mas…
• Atentos a dívida
• Lei de Conway
• Camadas anti-corrupção
• Desacoplamento incremental
• Virada suave e reversível
+ refactoring to patterns
análise desenvolvimento aceitação produção
Story Maps
CFD
Use Case
Validated Learning
análise desenvolvimento aceitação produção
Seus testes podem ser
dívida
Acúmulo de wait()
Scenario: Tooltip viewGiven I selected the "lite" planWhen I move mouse over "tooltip”Then I should see tooltip contentAnd I move mouse out "tooltip”And I should not see tooltip content
análise desenvolvimento aceitação produção
Muitas métricas nesse espaço
• Linhas de código• Tamanho do método• Tamanho da classe• Complexidade ciclomática• Métodos por classe• Acoplamento entre objetos• Duplicação• Atividade do repositório• Cobertura dos testes• Testabilidade• Razão de linhas de teste por linhas de código
TRACKERThe long lost XP role
Code Smells – The bloaters
• Long Method• Large Class• Primitive Obsession• Long Parameter List• DataClumps
Code Smells – The OO abusers
• Switch Statements• Temporary Field• Refused Bequest• Alternative Classes with Different Interfaces
Code Smells –
The change preventers
• Divergent Change• Shotgun Surgery • Parallel Inheritance Hierarchies
Code Smells – The Dispensables
• Lazy class• Data class • Duplicate Code• Dead Code• Speculative Generality
Code Smells – The Couplers
• Feature Envy• Inappropriate Intimacy• Message Chains • Middle Man
http://metric-fu.rubyforge.org/
http://metric-fu.rubyforge.org/
http://metric-fu.rubyforge.org/
Toxicidade - no excel ;-)
http://findbugs.sourceforge.net/
Turbulência
Tree map de classes
Pirâmede de tamanho e complexidade
Testes/Código
Complexidade do design
Diagrama de sequência
Code City
Matriz de dependências
Última história: WebStore
Time 2 Market
Use FLOSS para ganhar vantagem
Entrando na dívida:
escalando com links simbólicos
80 clientes / servidor
12 servidores
Custo cliente: R$150
O Marketing vai pra TV
Just-in-time para pagar a dívida
Midleware + Cloud
Custo cliente: R$ 8
(e descendo)
Sempre existem 3 opções
Gambiarra não é opção
Não se endividar
Divida com juros
Divida sem juros
O futuro hoje
• Fuzzy tests– Injeção proposital de defeitos– Crawlers mal intencionados
• Self-healing systems– Algoritmos genéticos que consertam bugs
Referências• http://c2.com/cgi/wiki?TechnicalDebt• http://blog.csdn.net/firecoder/article/details/5264031• http://petdance.com/perl/technical-debt/• http://www.construx.com/Page.aspx?cid=2801• http://blog.objectmentor.com/articles/2009/09/22/a-mess-is-not-a-technical-debt• http://martinfowler.com/bliki/TechnicalDebtQuadrant.html• http://www.jimhighsmith.com/2010/10/19/the-financial-implications-of-technical-debt/• http://www.startuplessonslearned.com/2009/07/embrace-technical-debt.html• http://requirements.seilevel.com/blog/2011/03/software-requirements-impact-on-technical-debt-–-pa
rt-1.html• http://martinfowler.com/bliki/TechnicalDebtQuadrant.html• http://www.slideshare.net/dtsato/managing-your-technical-debt-agilebrazil-2011• http://www.slideshare.net/dwildt/da-mtrica-a-diverso-como-as-mtricas-no-desenvolvimento-de-softw
are-podem-ajudar-times-a-se-divertirem• http://www.infoq.com/news/2010/03/monetizing-technical-debt• http://www.soberit.hut.fi/mmantyla/badcodesmellstaxonomy.htm• http://pyxis-tech.com/en/expertise/refactoring• http://akitaonrails.com/2008/12/18/tradu-o-d-vida-t-cnica• http://www.infoq.com/presentations/Software-Quality-You-Know-It-when-You-See-It• http://programmingtour.blogspot.com/2011/03/turbulence-measuring-turbulent-nature.html