dar ordem ao caos

65
Agilidade no Mundo Real Christiano Milfont 2010, João Pessoa-PB Copyleft 2010 Milfont.org O que funcionou nos últimos 2 anos em consultorias da Milfont Consulting... e como melhorar!

Post on 19-Oct-2014

1.851 views

Category:

Technology


6 download

DESCRIPTION

Palestra na faculdade IDEZ em João Pessoa - PB no dia 10/07/2010

TRANSCRIPT

Page 1: Dar Ordem ao Caos

Agilidade no Mundo Real

Christiano Milfont2010, João Pessoa-PBCopyleft 2010 Milfont.org

O que funcionou nos últimos 2 anos em

consultorias da Milfont Consulting... e como

melhorar!

Page 2: Dar Ordem ao Caos

Milfont Consulting

2006 - 2008

Desenvolvimento – Treinamento - MentoringResgate de Projetos - Code Review

Page 3: Dar Ordem ao Caos

O que é agilidade?

Estamos descobrindo maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo.

Page 4: Dar Ordem ao Caos

O que é agilidade?

Page 5: Dar Ordem ao Caos

O que é agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutençãoManutenção

Page 6: Dar Ordem ao Caos

O que é agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutençãoManutenção

1º Deploy - Transição

Page 7: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

Page 8: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment

Page 9: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment

Page 10: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment

Se mudar ou o processo for compreendido de forma errada?

Page 11: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Process Disciplines

Deployment

Requirements

Elaboration TransitionInception Construction

BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment

Nunca há tempo suficiente ou está funcionando!

Iter.#1

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Page 12: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

Page 13: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

Page 14: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

Test

Analysis & Design

Preliminary Iteration(s)

Iter.#1

Process Disciplines

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception Construction

Page 15: Dar Ordem ao Caos

O que é agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutençãoManutenção

Fronteira de Transição não faz

mais sentido

Deploy Deploy Deploy

Deploy Deploy

Deploy DeployDeploy

Page 16: Dar Ordem ao Caos

O que é agilidade?

Business Modeling

Implementation

TestAnalysis & Design

Preliminary Iteration(s)

Iter.#1

Iterations

Iter.#2

Iter.#n

Iter.#n+1

Iter.#n+2

Iter.#m

Iter.#m+1

Deployment

Requirements

Elaboration TransitionInception ConstructionProcess Disciplines

Page 17: Dar Ordem ao Caos

Dar Ordem ao Caos

Page 18: Dar Ordem ao Caos

InformativeWorspace

Sit Together

Pair Programming

Whole Team

Energized Work

Move People Around

Stories

Share Code

O que é difícil?

Single Code Base

Page 19: Dar Ordem ao Caos

Dar Ordem ao Caos

Trabalho Energizado

Page 20: Dar Ordem ao Caos

Pair Programming

“Não é adequado para trabalhos repetitivos”“Não é adequado a todo momento”

Page 21: Dar Ordem ao Caos

Pair Programming

“Não é adequado para trabalhos repetitivos”“Não é adequado a todo momento”

Page 22: Dar Ordem ao Caos

DeployCreate, Insert...

Commit Push

Development

- 2 horas produtivas por dia, - R$

Page 23: Dar Ordem ao Caos

DeployCreate, Insert...

Commit Push

Development

Trabalhos repetitivos, aonde?

Page 24: Dar Ordem ao Caos

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell

Page 25: Dar Ordem ao Caos

Começou[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout -b feature-1 mastercodificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git rebase master feature-1codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

Page 26: Dar Ordem ao Caos

Agora vai terminar

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git rebase master feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git merge --squash feature-1

[cmilfont] /projetos/agilidadenomundoreal (master)$ git commit -a -v

[cmilfont] /projetos/agilidadenomundoreal (master)$ git push origin master

Page 27: Dar Ordem ao Caos

Identificar padrão[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout -b feature-1 mastercodificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git rebase master feature-1codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

Page 28: Dar Ordem ao Caos

Automatizar[cmilfont] /projetos/agilidadenomundoreal (master)$ hack feature-1

codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ sink

codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

Page 29: Dar Ordem ao Caos

Já tenho parte Automatizada

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git rebase master feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git merge --squash feature-1

[cmilfont] /projetos/agilidadenomundoreal (master)$ git commit -a -v

[cmilfont] /projetos/agilidadenomundoreal (master)$ git push origin master

Page 30: Dar Ordem ao Caos

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ sink

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)$ git merge --squash feature-1

[cmilfont] /projetos/agilidadenomundoreal (master)$ git commit -a -v

[cmilfont] /projetos/agilidadenomundoreal (master)$ git push origin master

Identifico outra

Page 31: Dar Ordem ao Caos

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ sink

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ ship

Automatizo de novo

Page 32: Dar Ordem ao Caos

Automatizado[cmilfont] /projetos/agilidadenomundoreal (master)$ hack feature-1

codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ sink

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ rake spec

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ ship

[cmilfont] /projetos/agilidadenomundoreal (master)$ hack feature-2

codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

Page 33: Dar Ordem ao Caos

Automatizado[cmilfont] /projetos/agilidadenomundoreal (master)$ hack feature-1

codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ sink

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ rake spec

[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ ship

[cmilfont] /projetos/agilidadenomundoreal (master)$ hack feature-2

codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m “bla bla bla”

Page 34: Dar Ordem ao Caos

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell i h8 SQL

Page 35: Dar Ordem ao Caos

Insano[cmilfont] /projetos/agilidadenomundoreal (master)$ script/servercodificando...falhou por não existir empresa como dependência...[cmilfont] /projetos/agilidadenomundoreal (master)$ script/consoleLoading development environment (Rails 2.3.5)>>empresa = Empresa.new :razao_social => “Milfont Consulting”, :nome_fantasia => “Milfont Consulting”=> #<Empresa id: 1, razao_social: “Milfont Consulting”, nome_fantasia: “Milfont Consulting”, endereco: nil, created_at: "2010-06-22 19:39:36", updated_at: "2010-06-22 19:39:36">>> empresa.save!=> true>> exit[cmilfont] /projetos/agilidadenomundoreal (master)$ script/servercodificando...

Page 36: Dar Ordem ao Caos

Perdedores de tempo

[cmilfont] /projetos/agilidadenomundoreal (master)$ pg_restore -h localhost -p 5432 -U postgres -d agilidade_development -l "/home/cmilfont/agilidade.backup"codificando...

Não consigo reproduzir, me passa o

banco!

Ok, vou colocar na pasta X

Page 37: Dar Ordem ao Caos

Ganhadores de tempo

[cmilfont] /projetos/agilidadenomundoreal (master)$ sink && rake db:reset && rake db:seed

Não consigo reproduzir, me passa o

banco!

Faz pull, roda o seed pois atualizei os dados

Page 38: Dar Ordem ao Caos

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell i h8 SQL Feedback

Page 39: Dar Ordem ao Caos

Daily Deployment

Deploy

Continuous Deployment

Page 40: Dar Ordem ao Caos

Daily Deployment

Deploy

Continuous Deployment

XP

Page 41: Dar Ordem ao Caos

Daily Deployment

Real Customer [and user] Involved

Deploy

Continuous Deployment

Page 42: Dar Ordem ao Caos

Vou deployar

[cmilfont] ~$ ssh [email protected]@milfont.org's password: Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10

[email protected]:/home/cmilfont$ cd /projeto

[email protected]:/projeto$ git pull

[email protected]:/projeto$ rake war

[email protected]:/projeto$ /etc/init.d/jetty stop

[email protected]:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto

[email protected]:/projeto$ mv projeto.war /opt/webapps/

[email protected]:/projeto$ /etc/init.d/jetty start

Page 43: Dar Ordem ao Caos

Vou deployar

[cmilfont] ~$ ssh [email protected]@milfont.org's password: Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10

[email protected]:/home/cmilfont$ cd /projeto

[email protected]:/projeto$ git pull

[email protected]:/projeto$ rake war

[email protected]:/projeto$ /etc/init.d/jetty stop

[email protected]:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto

[email protected]:/projeto$ mv projeto.war /opt/webapps/

[email protected]:/projeto$ /etc/init.d/jetty start

Há quem faça pior

Page 44: Dar Ordem ao Caos

Vou deployar

[cmilfont] ~$ cd /projeto

[cmilfont] ~/projeto (master)$ cap deploy

Page 45: Dar Ordem ao Caos

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell i h8 SQL

U need tests

Feedback

Page 46: Dar Ordem ao Caos

Se você não testa, está errado em todas as metodologias conhecidas

Page 47: Dar Ordem ao Caos

Testa

Codifica

TDD aumenta o tempo de entrega e o time tende a se desmotivar

Refatora

Page 48: Dar Ordem ao Caos

Testa

Codifica

BDD facilita o Test First mas não faz milagres

Refatora

Teste de Aceitação

Codifica Refatora

Page 49: Dar Ordem ao Caos

BDD é fácil de adotar mas ...

# language: ptFuncionalidade: Selecionar curriculo Como um empregador Eu quero selecionar um curriculo Para que eu possa organizar e listar os currículos recebidos que preferi

Contexto: Dado um curriculo enviado de "Christiano Milfont"

Cenário: Selecionar currículos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currículos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Então o curriculo de "Christiano Milfont" deve estar na lista de selecionados

Page 50: Dar Ordem ao Caos

Testa

Codifica

Test First continua difícil

Refatora

Teste de Aceitação

Codifica Refatora

Fosso

Page 51: Dar Ordem ao Caos

Testa

Codifica

Test First continua difícil

Refatora

Teste de Aceitação

Codifica Refatora

Fosso

Imanutenível

Page 52: Dar Ordem ao Caos

Não há tempo suficiente

Page 53: Dar Ordem ao Caos

Princípio da Cobertura 100% de Clavius Tales

Quero 100%

Page 54: Dar Ordem ao Caos

Feature entregue

Cliente satisfeito

Done

100% cobertura

Feature em produção

Automatizar

Forçar testes

} Feedback diário

Page 55: Dar Ordem ao Caos

Pair Programming

“Não é adequado para trabalhos repetitivos”“Não é adequado a todo momento”

Trabalho Energizado

Page 56: Dar Ordem ao Caos

cap deployrake db:seed

Hack, Sink, ship

rake rcov:all

2 Features por dia, 40 por mês, + R$

Page 57: Dar Ordem ao Caos

Dar Caos a Ordem

Page 58: Dar Ordem ao Caos

phpJavaRuby

Arquitetura de referência

Page 59: Dar Ordem ao Caos

PhpDrupal

Plugins/temas

JavaJasper

Solr

RubyRails

Sunspot

Site com artigos, busca textual e relatórios

Page 60: Dar Ordem ao Caos

PhpDrupal

Plugins/temas

JavaJasper

Solr

RubyRails

Sunspot

Site com artigos, busca textual e relatóriosÉ possivel?

+ +

Page 61: Dar Ordem ao Caos

PMBOK de Jeans

Rup / XP / Scrum / Whatever

PMBOK

CMMi

Page 62: Dar Ordem ao Caos

PMBOK de Jeans

Rup / XP / Scrum / Whatever

PMBOK

CMMi

Rup / XP / Scrum / Whatever

Page 63: Dar Ordem ao Caos

Iteração

Release e Iteration Planning

Release

Condições de satisfação (user stories, budget, schedule)

Release Planning

Condições de satisfação (user stories + Acceptance Tests)

Iteration Planning

Desenvolvimento Incremento no produto

Page 64: Dar Ordem ao Caos

Release e Iteration Planning

# language: ptFuncionalidade: Selecionar curriculo Como um empregador Eu quero selecionar um curriculo Para que eu possa organizar e listar os currículos recebidos que preferi

Contexto: Dado um curriculo enviado de "Christiano Milfont"

Cenário: Selecionar currículos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currículos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Então o curriculo de "Christiano Milfont" deve estar na lista de selecionados

Page 65: Dar Ordem ao Caos

Perguntas?