Dar Ordem ao Caos

of 65 /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!
  • date post

    19-Oct-2014
  • Category

    Technology

  • view

    1.840
  • download

    6

Embed Size (px)

description

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

Transcript of Dar Ordem ao Caos

Agilidade no Mundo Real

Christiano Milfont2010, Joo 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 ns mesmos e ajudando outros a faz-lo.

O que agilidade?

O que agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutenoManuteno

O que agilidade?

Ciclo de vida de um Software

DesenvolvimentoDesenvolvimento ManutenoManuteno

1 Deploy - Transio

O que agilidade?

Business Modeling

ImplementationTest

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

ImplementationTest

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

ImplementationTest

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

ImplementationTest

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

ImplementationTest

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

ImplementationTest

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

ImplementationTest

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 ManutenoManuteno

Fronteira de Transio no faz

mais sentido

Deploy Deploy DeployDeploy Deploy

Deploy DeployDeploy

O que agilidade?

Business ModelingImplementation

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 difcil?

Single Code Base

Dar Ordem ao CaosTrabalho Energizado

Pair Programming

No adequado para trabalhos repetitivosNo adequado a todo momento

Pair Programming

No adequado para trabalhos repetitivosNo 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

Comeou[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 blacodificando...[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 padro[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 blacodificando...[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 blacodificando...[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 blacodificando...[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 blacodificando...[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 no existir empresa como dependncia...[cmilfont] /projetos/agilidadenomundoreal (master)$ script/consoleLoading development environment (Rails 2.3.5)>>empresa = Empresa.new :razao_social => Milfont Consulting, :nome_fantasia => Milfont Consulting=> #>> 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...

No 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

No 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 [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

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

faa pi

or

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 no 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 no faz milagres

Refatora

Teste de Aceitao

Codifica Refatora

BDD fcil de adotar mas ...

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

Contexto: Dado um curriculo enviado de "Christiano Milfont"

Cenrio: Selecionar currculos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currculos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Ento o curriculo de "Christiano Milfont" deve estar na lista de selecionados

Testa

Codifica

Test First continua difcil

Refatora

Teste de Aceitao

Codifica Refatora

Fosso

Testa

Codifica

Test First continua difcil

Refatora

Teste de Aceitao

Codifica Refatora

Fosso

Imanutenvel

No h tempo suficiente

Princpio da Cobertura 100% de Clavius Tales

Quero 100%

Feature entregue

Cliente satisfeito

Done

100% cobertura

Feature em produo

Automatizar

Forar testes

} Feedback dirio

Pair Programming

No adequado para trabalhos repetitivosNo adequado a todo momento

Trabalho Energizado

cap deployrake db:seed

Hack, Sink, ship

rake rcov:all

2 Features por dia, 40 por ms, + R$

Dar Caos a Ordem

phpJavaRuby

Arquitetura de referncia

PhpDrupal

Plugins/temas

JavaJasper

Solr

RubyRails

Sunspot

Site com artigos, busca textual e relatrios

PhpDrupal

Plugins/temas

JavaJasper

Solr

RubyRails

Sunspot

Site com artigos, busca textual e relatrios possivel?

+ +

PMBOK de Jeans

Rup / XP / Scrum / Whatever

PMBOK

CMMi

PMBOK de Jeans

Rup / XP / Scrum / Whatever

PMBOK

CMMi

Rup / XP / Scrum / Whatever

Iterao

Release e Iteration Planning

ReleaseCondies de satisfao (user stories, budget, schedule)

Release Planning

Condies de satisfao (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 currculos recebidos que preferi

Contexto: Dado um curriculo enviado de "Christiano Milfont"

Cenrio: Selecionar currculos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currculos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Ento o curriculo de "Christiano Milfont" deve estar na lista de selecionados

Perguntas?

Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65