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

Post on 09-Jul-2015

1.067 views 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 of Agilidade no nível de codificação reduzindo interrupções passivas

Agilidade no nível de

Reduzindo interrupções passivas

codificação

@andreitognologithub.com/andreitognoloandreitognolo@gmail.com

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

Agilidade no nível de

Reduzindo interrupções passivas

codificação

PassivaInterrupção

Codificação

Agilidade

PassivaCodificaçãoInterrupçãoAgilidade

PassivaCodificaçãoInterrupçãoAgilidade

PassivaCodificaçãoInterrupçãoAgilidade

PassivaCodificaçãoInterrupçãoAgilidade

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

Martin Fowler

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

PassivaCodificaçãoInterrupçãoAgilidade

Martin Fowler

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

PassivaCodificaçãoAgilidadeInterrupção

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

Chris Parnin

PassivaCodificaçãoAgilidadeInterrupção

Fluxo de pensamento interrompido

PassivaCodificaçãoAgilidadeInterrupção

Não são apenas

segundos!

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

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

Interrupção Passiva

AgilidadeInterrupçãoCodificaçãoPassiva

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

Codificar Testar Codificar Testar

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

Será

30 seg

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!

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

Será

Codificar Testar Codificar Testar

30 seg

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

Será

Codificar Testar

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

Será

Cod Test Cod Test Cod Test Cod Test Cod Test

?

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!

Caminhar é mais importante do que chegar

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

Demonstrações e Exemplos

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

{ }Testar

Exemplo 1 - Renomear repositório

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

Exemplo 1 - Renomear repositório

Não são apenas

segundos!

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

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

Exemplo 2 - Forms

{ }Testar

Exemplo 2 - Forms

Exemplo 2 - Forms

Exemplo 2 - Forms

Exemplo 2 - Forms

Exemplo 2 - Forms

Exemplo 2 - Forms

Onde a interrupção passiva é maior

Exemplo 2 - Forms

Onde a interrupção passiva é maior

Exemplo 2 - Forms

Não são apenas

segundos!

Exemplo 2 - Forms Interrupção Reduzida V

Simples como implementar um double click…

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

{ }Testar

Exemplo 3 - Testes

Exemplo 3 - Testes

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

Exemplo 3 - Testes Interrupção Reduzida V

Exemplo 3 - Testes

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

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?

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!

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...

Exemplo 4 - Raiden

O que pode deixar

esse teste lento?

Exemplo 4 - Raiden

Não são apenas

segundos!

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)

Exemplo 4 - Raiden

Teste unitários / Micro testes

Serviço

Aceitação

UI

Exemplo 4 - Raiden

Hibernate

JPA

Raiden JPA

(especificação)

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

Exemplo 4 - Raiden

Toasty!

Exemplo 4 - Raiden

github.com/andreitognolo/raidenjpa

Interrupção Reduzida V

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

pessoa

Hipótese

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

Conclusão

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

@andreitognologithub.com/andreitognoloandreitognolo@gmail.com

Obrigado! is hiring!

http://join.thoughtworks.com/