Dar Ordem ao Caos

1,558 views

Published on

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

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,558
On SlideShare
0
From Embeds
0
Number of Embeds
199
Actions
Shares
0
Downloads
26
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Dar Ordem ao Caos

  1. 1. Agilidade no Mundo Real O que funcionou nos últimos 2 anos em consultorias da Milfont Consulting... e como melhorar! Christiano Milfont 2010, João Pessoa-PB Copyleft 2010 Milfont.org
  2. 2. Milfont Consulting 2006 - 2008 Desenvolvimento – Treinamento - Mentoring Resgate de Projetos - Code Review
  3. 3. O que é agilidade? Estamos descobrindo maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo.
  4. 4. O que é agilidade?
  5. 5. O que é agilidade? Ciclo de vida de um Software Desenvolvimento Manutenção
  6. 6. O que é agilidade? Ciclo de vida de um Software Desenvolvimento Manutenção 1º Deploy - Transição
  7. 7. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  8. 8. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment
  9. 9. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment
  10. 10. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment Se mudar ou o processo for compreendido de forma errada?
  11. 11. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment Nunca há tempo suficiente ou está funcionando!
  12. 12. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  13. 13. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  14. 14. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Test Business Modeling Requirements Analysis & Design Implementation Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  15. 15. O que é agilidade? Ciclo de vida de um Software Desenvolvimento Manutenção Deploy Deploy Deploy Deploy Deploy Deploy Deploy Deploy Fronteira de Transição não faz mais sentido
  16. 16. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Requirements Test Analysis & Design Business Modeling Implementation Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  17. 17. Dar Ordem ao Caos
  18. 18. O que é difícil? Pair Programming Energized Work Single Code BaseWhole Team Share Code Move People Sit Together Around Stories Informative Worspace
  19. 19. Dar Ordem ao Caos Trabalho Energizado
  20. 20. Pair Programming “Não é adequado para trabalhos repetitivos” “Não é adequado a todo momento”
  21. 21. Pair Programming “Não é adequado para trabalhos repetitivos” “Não é adequado a todo momento”
  22. 22. - 2 horas produtivas por dia, - R$ Development Commit Push Deploy Create, Insert...
  23. 23. Trabalhos repetitivos, aonde? Development Commit Push Deploy Create, Insert...
  24. 24. Trabalhos repetitivos, aonde? Development Commit Merge from Hell Deploy Push Create, Insert...
  25. 25. Começou [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout -b feature-1 master 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) $ 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 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  26. 26. 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
  27. 27. Identificar padrão [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout -b feature-1 master 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) $ 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 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  28. 28. 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”
  29. 29. 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
  30. 30. Identifico outra [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
  31. 31. Automatizo de novo [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ sink [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ ship
  32. 32. 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”
  33. 33. 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”
  34. 34. Trabalhos repetitivos, aonde? Development Commit Merge from Hell i h8 SQL Deploy Push Create, Insert...
  35. 35. Insano [cmilfont] /projetos/agilidadenomundoreal (master) $ script/server codificando... falhou por não existir empresa como dependência... [cmilfont] /projetos/agilidadenomundoreal (master) $ script/console Loading 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/server codificando...
  36. 36. Perdedores de tempo Não consigo reproduzir, me passa o banco! Ok, vou colocar na pasta X [cmilfont] /projetos/agilidadenomundoreal (master) $ pg_restore -h localhost -p 5432 -U postgres -d agilidade_development -l "/home/cmilfont/agilidade.backup" codificando...
  37. 37. Ganhadores de tempo Não consigo reproduzir, me passa o banco! Faz pull, roda o seed pois atualizei os dados [cmilfont] /projetos/agilidadenomundoreal (master) $ sink && rake db:reset && rake db:seed
  38. 38. Trabalhos repetitivos, aonde? Development Commit Merge from Hell i h8 SQL Feedback Deploy Push Create, Insert...
  39. 39. Deploy Daily Deployment Continuous Deployment
  40. 40. Deploy Daily Deployment XP Continuous Deployment
  41. 41. Deploy Daily Deployment Continuous Deployment Real Customer [and user] Involved
  42. 42. Vou deployar [cmilfont] ~ $ ssh cmilfont@192.168.0.10 chrismilfont@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
  43. 43. Vou deployar [cmilfont] ~ $ ssh cmilfont@192.168.0.10 chrismilfont@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 ior cmilfont@192.168.0.10:/projeto$ git pull p fa ça cmilfont@192.168.0.10:/projeto$ rake war uem áq cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop H 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
  44. 44. Vou deployar [cmilfont] ~ $ cd /projeto [cmilfont] ~/projeto (master) $ cap deploy
  45. 45. Trabalhos repetitivos, aonde? U need tests Development Commit Merge from Hell i h8 SQL Feedback Deploy Push Create, Insert...
  46. 46. Se você não testa, está errado em todas as metodologias conhecidas
  47. 47. TDD aumenta o tempo de entrega e o time tende a se desmotivar Testa Codifica Refatora
  48. 48. BDD facilita o Test First mas não faz milagres Teste de Aceitação Testa Codifica Refatora Codifica Refatora
  49. 49. BDD é fácil de adotar mas ... # language: pt Funcionalidade: 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
  50. 50. Test First continua difícil Teste de Aceitação Fosso Testa Codifica Refatora Codifica Refatora
  51. 51. Test First continua difícil Imanutenível Teste de Aceitação Fosso Testa Codifica Refatora Codifica Refatora
  52. 52. Não há tempo suficiente
  53. 53. Princípio da Cobertura 100% de Clavius Tales Quero 100%
  54. 54. Done Feature entregue Automatizar 100% cobertura Forçar testes } Cliente satisfeito Feedback diário Feature em produção
  55. 55. Pair Programming “Não é adequado para trabalhos repetitivos” “Não é adequado a todo momento” Trabalho Energizado
  56. 56. 2 Features por dia, 40 por mês, + R$ rake rcov:all Hack, Sink, cap deploy ship rake db:seed
  57. 57. Dar Caos a Ordem
  58. 58. Arquitetura de referência Ruby Java php
  59. 59. Site com artigos, busca textual e relatórios Ruby Java Php Rails Jasper Drupal Sunspot Solr Plugins/temas
  60. 60. Site com artigos, busca textual e relatórios É possivel? Ruby Java Php Rails + Jasper + Drupal Sunspot Solr Plugins/temas
  61. 61. PMBOK de Jeans CMMi PMBOK Rup / XP / Scrum / Whatever
  62. 62. PMBOK de Jeans CMMi PMBOK Rup / XP / Scrum / Whatever Rup / XP / Scrum / Whatever
  63. 63. Release e Iteration Planning Release Condições de satisfação (user stories, budget, schedule) Release Planning Iteração Condições de satisfação (user stories + Acceptance Tests) Iteration Incremento Desenvolvimento Planning no produto
  64. 64. Release e Iteration Planning # language: pt Funcionalidade: 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
  65. 65. Perguntas?

×