15
Henrik Kniberg - Crisp AB Mentor de Agile & cara de Java Agile 2008 Toronto Dívida Técnica Como não ignorá-la Co-fundador / CTO de Goyada (serviços de mobile) 30 desenvolvedores Arquitetro-chefe na Ace Interactive (jogos) 20 desenvolvedores Chefe de desenvolvimento na Tain (jogos) 40 desenvolvedores [email protected] +46 70 4925284 Tradução: Demetrius Nunes (www.demetriusnunes.com)

Dívida Técnica - Como não ignorá-la

Embed Size (px)

DESCRIPTION

Essa é a tradução para português-brasileiro da apresentação do Henrik Kniberg entitulada "Technical Debt - how not to ignore it" apresentada no Agile 2008 em Toronto.

Citation preview

Page 1: Dívida Técnica - Como não ignorá-la

Henrik Kniberg - Crisp ABMentor de Agile & cara de Java

Agile 2008Toronto

Dívida TécnicaComo não ignorá-la

Co-fundador / CTO de Goyada (serviços de mobile)30 desenvolvedores

Arquitetro-chefe na Ace Interactive (jogos)20 desenvolvedores

Chefe de desenvolvimento na Tain (jogos)40 desenvolvedores

[email protected]+46 70 4925284

Tradução: Demetrius Nunes (www.demetriusnunes.com)

Page 2: Dívida Técnica - Como não ignorá-la

O que é Dívida Técnica?

Qualquer coisa que atrasa o desenvolvimentoPor exemplo, quebrar as regras do Kent Beck para Código Simples1. Executa todas os testes corretamente

2. Não contém duplicação

3. Expressa todas as idéias que tivemos sobre o programa

Metáfora por Ward Cunningham (OOPSLA 1992?)

2

3. Expressa todas as idéias que tivemos sobre o programa

4. Minimiza o número de classes e métodos

Outros exemplos:Não consertar o build

Rotinas manuais e ineficientes de lançamento de versões

Henrik Kniberg 2

Page 3: Dívida Técnica - Como não ignorá-la

Por que é um problema?Quase todo mundo temAcaba com planejamentoAcaba com produtosAcaba com empresasDesmotiva todo mundoÉ caro de consertarÉ um desperdício

Pontosrestantes

300

400Vamos

acabar no sprint 10!

33

1

Sprint

2 3 4 5 6 7 8 9 10 11 12 13 14 15

100

200

300

Oops... Vamos acabar quando estiver pronto!

sprint 10!

Foi mal, atrasamos! Com certeza acabamos

até o sprint 12!

Henrik Kniberg

Page 4: Dívida Técnica - Como não ignorá-la

Como se detecta?

Esse código é vergonhoso!

Sentimento do desenvolvedorSentimento do cliente

Funcionalidades ficavamprontas muito mais rápido!

• Duplicação• Cobertura de testes• Tamanho de métodos& classes

• Velocidade

Métricas

4Henrik Kniberg 4velocidade

sprint #

Page 5: Dívida Técnica - Como não ignorá-la

Por que acontece?

Pensamento de curto-prazo

Pressão &falta de ”folga” &ritmo insustentável

Estimada Real

40 35

35 30

30 25

30

25

20

”A gente conserta depois que lançar a versão.”

”Tudo TEM que ficar pronto até o natal. Trabalhem mais!”

”Não gostamos de reclamações”

Velocidade

5

Não falar a respeito

Falta de competênciatécnica

Síndrome da Janela Quebrada

Henrik Kniberg

Vmax

Vreal

velocidade

tempo

de reclamações”

”Qual o problema com variáveis globais?”

”E daí, esse códigojá está uma droga

mesmo”

Page 6: Dívida Técnica - Como não ignorá-la

Como evitar?Fale a respeito

Pull scheduling

TDD

Definição de DONEVmax

Definição de Pronto

• .... bla bla ....

• Não há aumento da dívida técnica

Burndown

Not

checked out Done! :o)

W ri t e f a i l i n g t e st

D A O

2 d

D epos it

SPRINT GOAL: Beta-ready release!checked out

6Henrik Kniberg 6

Vmax

velocidade

tempo

Vreal

Ritmo sustentável!

Unplanned items

D B d e s i g n

I n t e g r t e s t

M igr at ion

t ool

W r i t e f a i l i n g t e s t

G U I s pe c

T ap e s tr y s p i k eI m p l .

m i g ra t i o n

C o d e

c l e a n u p

2d1 d 0 . 5 d

1d

2 d

8d

1 d2d

2d

B a c k o f f i c e

L o g i n

Ba c k o ffic e

U s e r a d m in

W r i t e f a i l i n g t e s t

3 d

2 d

1 d2 d

I m pl G U I

1 dI n t e g r . w i t h J B o s s

2 d

W r i t e f a i l i n g t e s t

3 d

I m pl G U I

6 d

C l a r i f y r e q u i r e -m e n t s

2 d

G U I d e s i g n ( C SS)

1 d

F i x m e m o r y l e ak( J I R A 1 2 5 )2 d

S a l e s s u ppo r t

3 d Writ e w h it e p a p e r

4 d

Next

W i t h d r a wP e r f t e stWi t h d r a w

W r i t e f a i l i n g t e s t

Page 7: Dívida Técnica - Como não ignorá-la

O que fazer a respeito?

Opção 1: IgnorarDeixe o sistema decair até a morte por entropia e reze pra queninguém precisa mais dele até lá.

Opção 2: RefazerRefaça o sistema do zero usando TDD e outras boas práticas de engenharia.

Opção 3: Resolva pontualmente

Arriscado! Caro! Como saber que não irá acontecer de novo?

Não gera aprendizado.

Não consertao processo

7

Opção 3: Resolva pontualmenteUm time separado e dedicadoconserta os problemas.

Opção 4: Melhoria incrementalConserte um pouco a cada sprint, enquanto ainda entrega-se valor de negócio e funcionalidades

... ou “Sprints de Refatoramento” dedicadas de vez em quando

Henrik Kniberg 7

aprendizado. o processo

Abordagem preferida

Page 8: Dívida Técnica - Como não ignorá-la

Lidando com dívida técnica

Vmax

Vreal

velocidade

Primeiro passoReduza o ritmoPare de acumular dívida técnica!

Segundo passo(se for economicamente viável)

Reduza ainda maisComece a pagar a dívida!

Ritmo sustentável

8

Falea respeito!

Henrik Kniberg

tempo

Definição de Done

• .... bla bla ....

• Não há aumento da dívida técnica

Definição de Done

• .... bla bla ....

• Dívida técnica diminui

Page 9: Dívida Técnica - Como não ignorá-la

Conserte o processo, não apenas o produto!Problemas técnicos são sintomas de problemas de processo

Quando um defeito passar e entrar numa versão

Conserte o defeito

Analise a causa do defeito

Melhore o processo para reduzir o risco desse tipo de defeito ocorrer novamente.

Exemplo: Servidor de produção cai quando mais de 100 usuários se logam

Pergunta Resposta Melhoria

9Henrik Kniberg 9

Por que o servidor caiu?

Por que o bug não foi detectadoantes de lançar a versão?

Por que os testes não foramescritos antes?

Por que o time não tirou tempo para aprender?

SessionHandler usa pool de conexões com tamanho 100

Não existem testes de performance automatizados

Ninguém sabia como fazer

Muita pressão no time

Rejeite requisições de forma amigável quando pool de conexões estiver cheio

Escreva testes de performance automatizados

Dê tempo ou treinamento para que as pessoas aprendam

Reduza pressão reduzindo escopo do projeto. Introduza pull scheduling

Page 10: Dívida Técnica - Como não ignorá-la

Backlog de automação de testes

Alterar o skin

Alerta de segurança

Histórico de transações

Bloquear conta

Passo 1: Liste seus testes

10

Bloquear conta

Adicionar usuário

Ordenar resultado de consulta

Depositar dinheiro

Validar transferência

Henrik Kniberg 10

Page 11: Dívida Técnica - Como não ignorá-la

Caso de teste

Alterar skin

Alerta de segurança

Histórico de transações

RiscoCusto de Testes

Manuais

Custo de Automação

baixo 0,5 hrs 20 pt

alto 1 hrs 13 pt

médio 3 hrs 1 pt

Passo 2: Classifique cada teste

Backlog de automação de testes

11Henrik Kniberg 11

transações

Bloquear conta

Adicionar usuário

Ordenar consulta

Depositar dinheiro

Validar transferência

médio 3 hrs 1 pt

alto 5 hrs 0,5 pt

baixo 0,5 hrs 3 pt

médio 2 hrs 8 pt

alto 1,5 hrs 1 pt

alto 3 hrs 5 pt

Page 12: Dívida Técnica - Como não ignorá-la

Passo 3: Escolha suas prioridades e ordene a lista

Por exemplo, priorize por:1. Custo de testes manuais2. Risco3. Custo de automação

Caso de teste

Alterar skin

Alerta de segurança

Histórico de transações

RiscoCusto de Testes

Manuais

Custo de Automação

baixo 0,5 hrs 20 pt

alto 1 hrs 13 pt

médio 3 hrs 1 pt

Backlog de automação de testes

12Henrik Kniberg 12

transações

Bloquear conta

Adicionar usuário

Ordenar consulta

Depositar dinheiro

Validar transferência

alto 5 hrs 0,5 pt

baixo 0,5 hrs 3 pt

médio 2 hrs 8 pt

alto 1,5 hrs 1 pt

alto 3 hrs 5 pt

Page 13: Dívida Técnica - Como não ignorá-la

Exemplos:

“A cada sprint vamos implementar testes automatizados para uma funcionalidade"

“A cada sprint vamos implementar até 10 pontos de testes automatizados"

“A cada sprint vamos gastar até 10% do nosso tempo automatizando testes"

Passo 4: Automatize alguns testes a cada sprint

Backlog de automação de testes

Caso de teste

Alterar skin

Alerta de segurança

Histórico de transações

RiscoCusto de Testes

Manuais

Custo de Automação

baixo 0,5 hrs 20 pt

alto 1 hrs 13 pt

médio 3 hrs 1 pt

13

nosso tempo automatizando testes"

“A cada sprint, vamos terminar as funcionalidades novas primeiro, e entãogastar o resto do tempo automatizandotestes"

“O Product Owner vai colocar no backlog do produto as histórias de automação de testes e priorizá-las como qualquer outra história."

Henrik Kniberg 13

transações

Bloquear conta

Adicionar usuário

Ordenar consulta

Depositar dinheiro

Validar transferência

alto 5 hrs 0,5 pt

baixo 0,5 hrs 3 pt

médio 2 hrs 8 pt

alto 1,5 hrs 1 pt

alto 3 hrs 5 pt

Page 14: Dívida Técnica - Como não ignorá-la

Pra lembrar

Fale a respeito!”Dívida Técnica” é uma ótima metáfora para se comunicar com não-técnicos!

Pare de acumular dívida!Não importa o quão ruim já esteja

14

Não importa o quão ruim já esteja

Conserte incrementalmente!Decida por um ritmo de pagamento da dívida viável

Evite re-escrever do zero ou tratar pontualmente

CONSERTE O PROCESSO, NÃO APENAS O PRODUTO!

Henrik Kniberg 14

Page 15: Dívida Técnica - Como não ignorá-la

É isso! Perguntas?

15