dar ordem ao caos

Post on 19-Oct-2014

1.851 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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!

Milfont Consulting

2006 - 2008

Desenvolvimento – Treinamento - MentoringResgate de Projetos - Code Review

O que é agilidade?

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

O que é agilidade?

O que é agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutençãoManutenção

O que é agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutençãoManutenção

1º Deploy - Transição

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

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

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

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?

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

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

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

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

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

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

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

Dar Ordem ao Caos

Trabalho Energizado

Pair Programming

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

Pair Programming

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

DeployCreate, Insert...

Commit Push

Development

- 2 horas produtivas por dia, - R$

DeployCreate, Insert...

Commit Push

Development

Trabalhos repetitivos, aonde?

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell

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”

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

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”

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”

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

[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

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

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

Automatizo de novo

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”

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”

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell i h8 SQL

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

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

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

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell i h8 SQL Feedback

Daily Deployment

Deploy

Continuous Deployment

Daily Deployment

Deploy

Continuous Deployment

XP

Daily Deployment

Real Customer [and user] Involved

Deploy

Continuous Deployment

Vou deployar

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

cmilfont@192.168.0.10:/home/cmilfont$ cd /projeto

cmilfont@192.168.0.10:/projeto$ git pull

cmilfont@192.168.0.10:/projeto$ rake war

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop

cmilfont@192.168.0.10:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto

cmilfont@192.168.0.10:/projeto$ mv projeto.war /opt/webapps/

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty start

Vou deployar

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

cmilfont@192.168.0.10:/home/cmilfont$ cd /projeto

cmilfont@192.168.0.10:/projeto$ git pull

cmilfont@192.168.0.10:/projeto$ rake war

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop

cmilfont@192.168.0.10:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto

cmilfont@192.168.0.10:/projeto$ mv projeto.war /opt/webapps/

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty start

Há quem faça pior

Vou deployar

[cmilfont] ~$ cd /projeto

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

Deploy

Trabalhos repetitivos, aonde?

Create, Insert...

Commit Push

Development

Merge from Hell i h8 SQL

U need tests

Feedback

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

Testa

Codifica

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

Refatora

Testa

Codifica

BDD facilita o Test First mas não faz milagres

Refatora

Teste de Aceitação

Codifica Refatora

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

Testa

Codifica

Test First continua difícil

Refatora

Teste de Aceitação

Codifica Refatora

Fosso

Testa

Codifica

Test First continua difícil

Refatora

Teste de Aceitação

Codifica Refatora

Fosso

Imanutenível

Não há tempo suficiente

Princípio da Cobertura 100% de Clavius Tales

Quero 100%

Feature entregue

Cliente satisfeito

Done

100% cobertura

Feature em produção

Automatizar

Forçar testes

} Feedback diário

Pair Programming

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

Trabalho Energizado

cap deployrake db:seed

Hack, Sink, ship

rake rcov:all

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

Dar Caos a Ordem

phpJavaRuby

Arquitetura de referência

PhpDrupal

Plugins/temas

JavaJasper

Solr

RubyRails

Sunspot

Site com artigos, busca textual e relatórios

PhpDrupal

Plugins/temas

JavaJasper

Solr

RubyRails

Sunspot

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

+ +

PMBOK de Jeans

Rup / XP / Scrum / Whatever

PMBOK

CMMi

PMBOK de Jeans

Rup / XP / Scrum / Whatever

PMBOK

CMMi

Rup / XP / Scrum / Whatever

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

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

Perguntas?

top related