agilidade no nível de codificação reduzindo interrupções passivas

63
Agilidade no nível de Reduzindo interrupções passivas codificação

Upload: andreitognolo

Post on 09-Jul-2015

1.066 views

Category:

Software


2 download

DESCRIPTION

Um dos principais pilares da cultura ágil é termos rápido feedback sobre o que desenvolvemos. Essa busca por rápido feedback fica evidente no ciclo de desenvolvimento Scrum, por exemplo. Essa palestra é um convite para a análise do feedback a nível da codificação. Quanto tempo leva para termos o feedback da última linha de código que escrevemos? Se esse feedback não é instantâneo, nosso fluxo de raciocínio é interrompido, e essa interrupção traz sérias implicações na forma que desenvolvemos. Iremos denominar esse tipo de interrupção como interrupção passiva, e iremos trazer exemplos do dia a dia que irão ajudar o congressista a identificar e mitigar esse tipo de interrupção. Vídeo de introdução para essa palestra: https://www.youtube.com/watch?v=-ZpQDxrtEAg

TRANSCRIPT

Page 1: Agilidade no nível de codificação  reduzindo interrupções passivas

Agilidade no nível de

Reduzindo interrupções passivas

codificação

Page 2: Agilidade no nível de codificação  reduzindo interrupções passivas

@andreitognologithub.com/[email protected]

Page 3: Agilidade no nível de codificação  reduzindo interrupções passivas

Testes unitários

Teste de integração

Deploy QA

Deploy produção

Smoke test

Testes unitários

Teste de integração

DeployQA

Deploy produção

Smoke test

Page 4: Agilidade no nível de codificação  reduzindo interrupções passivas

Agilidade no nível de

Reduzindo interrupções passivas

codificação

Page 5: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaInterrupção

Codificação

Agilidade

Page 6: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoInterrupçãoAgilidade

Page 7: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoInterrupçãoAgilidade

Page 8: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoInterrupçãoAgilidade

Page 9: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoInterrupçãoAgilidade

Much of agile thinking is about setting up feedback loops so that we can learn more quickly

Martin Fowler

Page 10: Agilidade no nível de codificação  reduzindo interrupções passivas

Much of agile thinking is about setting up feedback loops so that we can learn more quickly

PassivaCodificaçãoInterrupçãoAgilidade

Martin Fowler

Page 11: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 12: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 13: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 14: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 15: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 16: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 17: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 18: Agilidade no nível de codificação  reduzindo interrupções passivas

PassivaCodificaçãoAgilidadeInterrupção

Page 19: Agilidade no nível de codificação  reduzindo interrupções passivas

10-15 minutos! dá tempo de fazer 3 miojos!

Chris Parnin

PassivaCodificaçãoAgilidadeInterrupção

Page 20: Agilidade no nível de codificação  reduzindo interrupções passivas

Fluxo de pensamento interrompido

PassivaCodificaçãoAgilidadeInterrupção

Não são apenas

segundos!

Page 21: Agilidade no nível de codificação  reduzindo interrupções passivas

Codificar Testar Codificar Testar

Interrupção passiva

{ }Re

star

t Ser

vido

rTestar

Logi

n

Entra

tela

de

incl

uir C

lient

e

Inse

re u

m n

ovo

Clie

nte

Entra

tela

de

cons

ulta

Verif

ica

que

o cl

ient

e fo

i in

serid

o

Empa

cota

r ap

licaç

ão

Com

pila

r

PassivaAgilidadeInterrupçãoCodificação

Page 22: Agilidade no nível de codificação  reduzindo interrupções passivas

“Tempo em que estamos sendo interrompidos, esperando feedback para podermos continuar com o fluxo de raciocínio”

Interrupção Passiva

AgilidadeInterrupçãoCodificaçãoPassiva

Page 23: Agilidade no nível de codificação  reduzindo interrupções passivas

A interrupção passiva tem efeito similar a interrupção causada por uma

pessoa

Hipótese

Eu não estou sendo interrompido, eu posso ir pensando no próximo passo

Page 24: Agilidade no nível de codificação  reduzindo interrupções passivas

Codificar Testar Codificar Testar

Eu não estou sendo interrompido, eu posso ir pensando no próximo passo

Será

30 seg

Page 25: Agilidade no nível de codificação  reduzindo interrupções passivas

A interrupção passiva tem efeito similar a interrupção causada por uma

pessoa

Hipótese

É só você codificar mais e testar tudo de uma vez!

Page 26: Agilidade no nível de codificação  reduzindo interrupções passivas

É só você codificar mais e testar tudo de uma vez!

Será

Codificar Testar Codificar Testar

30 seg

Page 27: Agilidade no nível de codificação  reduzindo interrupções passivas

É só você codificar mais e testar tudo de uma vez!

Será

Codificar Testar

Page 28: Agilidade no nível de codificação  reduzindo interrupções passivas

É só você codificar mais e testar tudo de uma vez!

Será

Cod Test Cod Test Cod Test Cod Test Cod Test

?

Page 29: Agilidade no nível de codificação  reduzindo interrupções passivas

Bret Victor

“To design quickly and confidently, we need to be able to try out ideas and verify hypotheses

as fast as we think of them”INSTANT

FEEDBACK

As ferramentas que usamos devem ser como extensões do nosso corpo!

Page 30: Agilidade no nível de codificação  reduzindo interrupções passivas

Caminhar é mais importante do que chegar

Page 31: Agilidade no nível de codificação  reduzindo interrupções passivas

Atenção: Os exemplos aqui apresentados são baseados em fatos reais…

Demonstrações e Exemplos

Page 32: Agilidade no nível de codificação  reduzindo interrupções passivas

Cenário: Implementação da funcionalidade de renomear repositório no Snap CI

{ }Testar

Exemplo 1 - Renomear repositório

Page 33: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 1 - Renomear repositório

Acessar GitHub

Renomear repositório

Alterar algum arquivo Notificação (web hook)Renomear no Snap

Verificar no Snap que foi realmente renomeado

Page 34: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 1 - Renomear repositório

Não são apenas

segundos!

Page 35: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 1 - Renomear repositório Interrupção Reduzida V

# # Github rename request # curl -H "Authorization: token $token" -X PATCH -d "{\"name\": \"rename-$2\"}" https://api.github.com/repos/andreitognolo/$oldName !# # Push something # cd ../rename echo $2 > README.md git add . git commit -m "Update readme" git push

rename.sh

Page 36: Agilidade no nível de codificação  reduzindo interrupções passivas

Cenário: Você fez uma alteração no JavaScript do botão de salvar empresa

Exemplo 2 - Forms

{ }Testar

Page 37: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Page 38: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Page 39: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Page 40: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Page 41: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Page 42: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Onde a interrupção passiva é maior

Page 43: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Onde a interrupção passiva é maior

Page 44: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms

Não são apenas

segundos!

Page 45: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 2 - Forms Interrupção Reduzida V

Simples como implementar um double click…

Page 46: Agilidade no nível de codificação  reduzindo interrupções passivas

Cenário: Você fez uma alteração no método de salvar empresa

{ }Testar

Exemplo 3 - Testes

Page 47: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 3 - Testes

Mas o que eu quero testar não tem nada a ver com a interface!

Page 48: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 3 - Testes Interrupção Reduzida V

Page 49: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 3 - Testes

Teste automatizado, de preferência com Test Driven Development (TDD)

Page 50: Agilidade no nível de codificação  reduzindo interrupções passivas

In My Humble Opinion...

Codificar

Escr

eve

test

e(q

ue fa

lha)

Roda

o te

ste

Codificar

Mel

hora

o te

ste

(que

falh

a)

Roda

o te

ste

Mel

hora

o te

ste

(que

falh

a)

1 seg? 10 seg? 60 seg?

Page 51: Agilidade no nível de codificação  reduzindo interrupções passivas

Teste demora

Tende a não fazer babystep

Sem babystep o TDD perde sua magia :(

O que está matando o TDD são as interrupções passivas!

Page 52: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

O que torna um teste unitário lento?

O slide a seguir contém cenas explícitas de código Java. Se você não conhece Java, não se apavore, nem vá

embora, vou explicar cada linha...

Page 53: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

O que pode deixar

esse teste lento?

Page 54: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

Não são apenas

segundos!

Page 55: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

If it (test) takes ten seconds just to start testing, toss it! Allow nothing to slow down your tests.

Test Time!03 September 2014

by Robert C. Martin (Uncle Bob)

Page 56: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

Teste unitários / Micro testes

Serviço

Aceitação

UI

Page 57: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

Hibernate

JPA

Raiden JPA

(especificação)

(implementação para produção) (implementação para teste)

Page 58: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

Toasty!

Page 59: Agilidade no nível de codificação  reduzindo interrupções passivas

Exemplo 4 - Raiden

github.com/andreitognolo/raidenjpa

Interrupção Reduzida V

Page 60: Agilidade no nível de codificação  reduzindo interrupções passivas

A interrupção passiva tem efeito similar a interrupção causada por uma

pessoa

Hipótese

Page 61: Agilidade no nível de codificação  reduzindo interrupções passivas

A vida é muito curta para desperdiçarmos tempo com interrupções passivas

Conclusão

Page 62: Agilidade no nível de codificação  reduzindo interrupções passivas

http://blog.ninlabs.com/2013/01/programmer-interrupted/

- Bret Victor - http://vimeo.com/36579366 !- Martin Fowler - http://martinfowler.com/bliki/FrequencyReducesDifficulty.html !- Chris Parnin - http://blog.ninlabs.com/2013/01/programmer-interrupted/ !- Uncle Bob - http://blog.cleancoder.com/uncle-bob/2014/09/03/TestTime.html

Referências

Page 63: Agilidade no nível de codificação  reduzindo interrupções passivas

@andreitognologithub.com/[email protected]

Obrigado! is hiring!

http://join.thoughtworks.com/