SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Agilidade de Ponta-a-Ponta
com Arquiteturas Evolucionárias
          Breno Barros
       brenobarros@gmail.com
           @brenoobarros
        www.brenobarros.net
Um pouco sobre mim…
• Breno Barros
  – Líder do Escritório de Arquitetura e Métodos Ágeis
    da Stefanini
  – Membro Técnico da Revista MundoJ
  – Natural de Belém/PA
  – Morando a 6 anos em Belo Horizonte/MG
• Horas Vagas
  – Video Game (XBox 360)
  – Fotografia
  – Empreendimentos próprios
Hoje, vamos falar sobre…
        Arquitetura
       Evolucionária

         Design
        Emergente


         Códigos
Pausa. O que está acontecendo no mundo?
www. thoughtworks.com/radar
  Janeiro 2011
www. thoughtworks.com/radar
  Julho 2011
Agilidade de Ponta-a-Ponta
Adaptabilidade
  Agilidade é                                        Transparência
                         Charter
                Estratégia                              Simplicidade
                      Release                             Unitariedade

                        Iteração
                               Diário
                                 Contínua
                                    Integração
Burndown                       Arquitetura
 Velocidade                    TDD         Build
    burnup                   Refactoring           Delivery
                                Colaboração
      Testes
Arquitetura Evolucionária -
          Origem Lean Thinking

1. Elimine o Despedício
                                    2. Amplifique o aprendizado


  3. Decida o mais tarde possível
                                4. Entregue o mais rápido possível

    5. Dê autonomia à equipe
                                    6. Construa com integridade
          7. Visualize o todo
Arquitetura Planejada versus
       Evolucionária
Arquitetura Planejada versus
       Evolucionária

                Para não dizer impossível…

                … isso será muito difícil.




   100 metros
E com software? Temos que ter
essa preocupação toda no início?
O desconhecido…
O desconhecido…
• Se manifesta de duas formas:
  – Aquilo que sabemos que desconhecemos
  – Aquilo que NÃO sabemos que desconhecemos


     Se não sabemos tantas coisas, porque
              definir tudo antes?
Olha o tamanho do problema que
       podemos arrumar…

                    Implementação


                    Design

                    Arquitetura
“Time que está
    ganhando
  não se mexe”.




Aumento da Entropia
A essência da Arquitetura Evolucionária
             consiste na…


Quanto mais tempo você adiar suas
           decisões…

…mais contextualizadas elas serão.

… Tomada de Decisões no momento certo.
Checklist Arquitetural

V   É necessário tomar essa decisão agora?


V   Posso adiar essa decisão com segurança?


V   Como posso tornar essa decisão reversível?
Arquitetura dentro de um processo
                    Ágil                               Architecture
                                                        Notebook
                          criação




   Product Backlog                                            incremento
                              Iteration Model Design
                                       (horas)
                                                              retroalimentação
Architecture Notebook          Design Model Storm
        Inicial                     (minutos)
Inception
                            Test-Driven Development
                                      (dias)
                        Sprint 1
                            Sprint 2
                                    Sprint N
(Architecture Notebook)
•   Objetivos
•   Necessidades e Dependências
•   Requisitos Significantes
•   Decisões, Restrições e Justificativas
•   Camadas
•   Mecanismos Arquiteturais
•   Visões
Arquitetura dentro de um processo
               Ágil
                                           Giovanni Gomes – Sprint Phases Author
                                           Breno Barros – Architect & Design Increments Author




 Iteration
   Model
  Design

  Design
  Model
  Storm
              Iteration
             Model Design


             Design Model
                Storm

                             Iteration
                            Model Design


                            Design Model
                               Storm
E como fica o Arquiteto?
Arquiteto Ágil X Arquiteto Tradicional
Arquiteto Ágil X Arquiteto Tradicional
         Arquitetos Tradicionais                    Arquitetos Ágeis

São seres “diferenciados”               São humildes e buscam soluções
                                        conjuntas

Estão sempre “muito ocupados” para      São membros ativos do time de
colocar as mãos no desenvolvimento      desenvolvimento


Gostam de prever o futuro para não terem Sabem que não podem prever o futuro,
problemas                                mas podem estar preparados


Investem muito tempo para criarem       Sem desperdícios. Focam em relatar o que
modelos arquiteturais com “todas” as    é útil e importante
informações
Alguns Conceitos
Padrões Idiomáticos
Apenas como curiosidade ;-)
Como descobrí-los?

                 Métrica
   Métrica         1
     2


             Técnicas




  Padrões Idiomáticos
Como descobrí-los?
• Algumas Métricas
  – Complexidade Ciclomática
  – Acoplamento Aferente
  – % de Duplicação de Código
• Algumas Práticas
  – Domain Specific Languages (DSL)
  – Test-Driven Development (TDD)
  – Monitorar a Dívida Técnica
Complexidade Ciclomática

public boolean realizarSaque(Conta conta, Double valor)
                           throws SaldoInsuficienteException{       // +1
         if(conta.getSaldo() >= valor){                             // +1
                  conta.setSaldo(conta.getSaldo() - valor);
         } else{                                                    // +1
                  throw new SaldoInsuficienteException();           // +1
         }
         return true;                                               // +1
}


Complexidade = 11         -> Menor propabilidade de falhas (cerca de 28%)
Complexidade = 38         -> Propabilidade de falhas em cerca de 50%
Complexidade >= 74        -> Propabilidade de falhas em cerca de 90%
Acoplamento
• Acoplamento Aferente
  – Representa a contagem de quantas classes
    diferentes usam a classe corrente (aquela que está
    sendo analisada).
• Acoplamento Eferente
  – Constitui a contagem de quantas classes
    diferentes são usadas pela classes corrente.
DSL – Domain Specific Language
• Escrever códigos que se pareçam menos com
  o código de origem. Mas sim, com o problema
  a ser resolvido.

• Facilidade de comunição e manutenção.

• Podemos fazer isso com:
  – DSL’s externas: Com o uso de ANTLR, por exemplo
  – DSL’s internas: Com Fluent Interfaces
DSL Interna com Fluent Interfaces
EmailMessage mail = new EmailMessage();
mail.setSender(”brenobarros@gmail.com");
mail.setDestination(”contato@agilevale.com.br");
mail.setSubject(”Palestra");
mail.setContent(”…Descrição da Palestra");
mail.send();



                                new EmailMessage()
                                  .from(”brenobarros@gmail.com")
                                  .to(”contato@agilevale.com.br")
                                  .withSubject(”Palestra")
                                  .withBody(”…Descrição da Palestra")
                                  .send();
Test-Driven Development (TDD)




picture By klaus Laube
Quando começar?
AGORA!!!
 Mas como?
O Raio X para o Time de Desenvolvimento
Sonar (www.sonarsource.org)
Acoplamento Aferente
Dependências Cíclicas
Dívida Técnica
A evolução do seu Design
Uma pequena demo…
Premissas
•   Ser descentralizado
•   Possuir um time auto-organizado
•   Ser transparente
•   Não lute contra mudanças
•   Foco em simplicidade
•   Foco em flexibilidade
•   Promover a inspeção e adaptação
•   Promover a presença da língua de
    negócio
Outras Referências




Neal Ford: http://www.ibm.com/developerworks/java/library/j-eaed1/index.html
Q&A




picture by -bast-
Muito obrigado!
      []’s

Weitere ähnliche Inhalte

Was ist angesagt?

O Papel do Product Owner
O Papel do Product OwnerO Papel do Product Owner
O Papel do Product Owner
Marcia Maia
 

Was ist angesagt? (13)

Dívida Técnica - Como não ignorá-la
Dívida Técnica - Como não ignorá-laDívida Técnica - Como não ignorá-la
Dívida Técnica - Como não ignorá-la
 
Apresentação - Extensão Virtual do Mundo Real: Integração Semântica e Inferência
Apresentação - Extensão Virtual do Mundo Real: Integração Semântica e InferênciaApresentação - Extensão Virtual do Mundo Real: Integração Semântica e Inferência
Apresentação - Extensão Virtual do Mundo Real: Integração Semântica e Inferência
 
Scrum
ScrumScrum
Scrum
 
O Papel do Product Owner
O Papel do Product OwnerO Papel do Product Owner
O Papel do Product Owner
 
SCRUM - Aula1
SCRUM - Aula1SCRUM - Aula1
SCRUM - Aula1
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
[DevDay2018] Arquitetura de Software num cenário de incertezas - Arquitetura ...
[DevDay2018] Arquitetura de Software num cenário de incertezas - Arquitetura ...[DevDay2018] Arquitetura de Software num cenário de incertezas - Arquitetura ...
[DevDay2018] Arquitetura de Software num cenário de incertezas - Arquitetura ...
 
Scrum na sua Empresa
Scrum na sua EmpresaScrum na sua Empresa
Scrum na sua Empresa
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador Pragmático
 
Coding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente OrganizacionalCoding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente Organizacional
 
Arquitetura Evolutiva - A retomada do ágil 18 anos depois
Arquitetura Evolutiva - A retomada do ágil 18 anos depoisArquitetura Evolutiva - A retomada do ágil 18 anos depois
Arquitetura Evolutiva - A retomada do ágil 18 anos depois
 
Treinamento - Product Owner - CLARO-NET-EMBRATEL
Treinamento - Product Owner - CLARO-NET-EMBRATELTreinamento - Product Owner - CLARO-NET-EMBRATEL
Treinamento - Product Owner - CLARO-NET-EMBRATEL
 
Human Centered Design (em português)
Human Centered Design (em português)Human Centered Design (em português)
Human Centered Design (em português)
 

Ähnlich wie Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

IPA Conhecendo XP
IPA Conhecendo XPIPA Conhecendo XP
IPA Conhecendo XP
Wildtech
 
Bate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XPBate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XP
Wildtech
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
Rodrigo Branas
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
Toni Esteves
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
Rodrigo Branas
 

Ähnlich wie Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias (20)

IPA Conhecendo XP
IPA Conhecendo XPIPA Conhecendo XP
IPA Conhecendo XP
 
Bate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XPBate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XP
 
Metodos ageis thinkingdifferent
Metodos ageis thinkingdifferentMetodos ageis thinkingdifferent
Metodos ageis thinkingdifferent
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro Locaweb
 
Encontro Locaweb Curitiba
Encontro  Locaweb CuritibaEncontro  Locaweb Curitiba
Encontro Locaweb Curitiba
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de Software
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Vivenciando dev ops para além da automação de infraestrutura 2.0
Vivenciando dev ops para além da automação de infraestrutura 2.0Vivenciando dev ops para além da automação de infraestrutura 2.0
Vivenciando dev ops para além da automação de infraestrutura 2.0
 
TDC BH 2019 - Arquitetura Evolutiva - Segredo da arquitetura ágil
TDC BH 2019 - Arquitetura Evolutiva - Segredo da arquitetura ágilTDC BH 2019 - Arquitetura Evolutiva - Segredo da arquitetura ágil
TDC BH 2019 - Arquitetura Evolutiva - Segredo da arquitetura ágil
 
Analise e desenvolvimento
Analise e desenvolvimentoAnalise e desenvolvimento
Analise e desenvolvimento
 
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
 
TDC 2014 - A influência dos processos de desenvolvimento na arquitetura
TDC 2014 - A influência dos processos de desenvolvimento na arquiteturaTDC 2014 - A influência dos processos de desenvolvimento na arquitetura
TDC 2014 - A influência dos processos de desenvolvimento na arquitetura
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

  • 1. Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias Breno Barros brenobarros@gmail.com @brenoobarros www.brenobarros.net
  • 2. Um pouco sobre mim… • Breno Barros – Líder do Escritório de Arquitetura e Métodos Ágeis da Stefanini – Membro Técnico da Revista MundoJ – Natural de Belém/PA – Morando a 6 anos em Belo Horizonte/MG • Horas Vagas – Video Game (XBox 360) – Fotografia – Empreendimentos próprios
  • 3. Hoje, vamos falar sobre… Arquitetura Evolucionária Design Emergente Códigos
  • 4. Pausa. O que está acontecendo no mundo?
  • 8. Adaptabilidade Agilidade é Transparência Charter Estratégia Simplicidade Release Unitariedade Iteração Diário Contínua Integração Burndown Arquitetura Velocidade TDD Build burnup Refactoring Delivery Colaboração Testes
  • 9. Arquitetura Evolucionária - Origem Lean Thinking 1. Elimine o Despedício 2. Amplifique o aprendizado 3. Decida o mais tarde possível 4. Entregue o mais rápido possível 5. Dê autonomia à equipe 6. Construa com integridade 7. Visualize o todo
  • 11. Arquitetura Planejada versus Evolucionária Para não dizer impossível… … isso será muito difícil. 100 metros
  • 12. E com software? Temos que ter essa preocupação toda no início?
  • 14. O desconhecido… • Se manifesta de duas formas: – Aquilo que sabemos que desconhecemos – Aquilo que NÃO sabemos que desconhecemos Se não sabemos tantas coisas, porque definir tudo antes?
  • 15. Olha o tamanho do problema que podemos arrumar… Implementação Design Arquitetura
  • 16. “Time que está ganhando não se mexe”. Aumento da Entropia
  • 17. A essência da Arquitetura Evolucionária consiste na… Quanto mais tempo você adiar suas decisões… …mais contextualizadas elas serão. … Tomada de Decisões no momento certo.
  • 18. Checklist Arquitetural V É necessário tomar essa decisão agora? V Posso adiar essa decisão com segurança? V Como posso tornar essa decisão reversível?
  • 19. Arquitetura dentro de um processo Ágil Architecture Notebook criação Product Backlog incremento Iteration Model Design (horas) retroalimentação Architecture Notebook Design Model Storm Inicial (minutos) Inception Test-Driven Development (dias) Sprint 1 Sprint 2 Sprint N
  • 20. (Architecture Notebook) • Objetivos • Necessidades e Dependências • Requisitos Significantes • Decisões, Restrições e Justificativas • Camadas • Mecanismos Arquiteturais • Visões
  • 21. Arquitetura dentro de um processo Ágil Giovanni Gomes – Sprint Phases Author Breno Barros – Architect & Design Increments Author Iteration Model Design Design Model Storm Iteration Model Design Design Model Storm Iteration Model Design Design Model Storm
  • 22. E como fica o Arquiteto?
  • 23. Arquiteto Ágil X Arquiteto Tradicional
  • 24. Arquiteto Ágil X Arquiteto Tradicional Arquitetos Tradicionais Arquitetos Ágeis São seres “diferenciados” São humildes e buscam soluções conjuntas Estão sempre “muito ocupados” para São membros ativos do time de colocar as mãos no desenvolvimento desenvolvimento Gostam de prever o futuro para não terem Sabem que não podem prever o futuro, problemas mas podem estar preparados Investem muito tempo para criarem Sem desperdícios. Focam em relatar o que modelos arquiteturais com “todas” as é útil e importante informações
  • 28. Como descobrí-los? Métrica Métrica 1 2 Técnicas Padrões Idiomáticos
  • 29. Como descobrí-los? • Algumas Métricas – Complexidade Ciclomática – Acoplamento Aferente – % de Duplicação de Código • Algumas Práticas – Domain Specific Languages (DSL) – Test-Driven Development (TDD) – Monitorar a Dívida Técnica
  • 30. Complexidade Ciclomática public boolean realizarSaque(Conta conta, Double valor) throws SaldoInsuficienteException{ // +1 if(conta.getSaldo() >= valor){ // +1 conta.setSaldo(conta.getSaldo() - valor); } else{ // +1 throw new SaldoInsuficienteException(); // +1 } return true; // +1 } Complexidade = 11 -> Menor propabilidade de falhas (cerca de 28%) Complexidade = 38 -> Propabilidade de falhas em cerca de 50% Complexidade >= 74 -> Propabilidade de falhas em cerca de 90%
  • 31. Acoplamento • Acoplamento Aferente – Representa a contagem de quantas classes diferentes usam a classe corrente (aquela que está sendo analisada). • Acoplamento Eferente – Constitui a contagem de quantas classes diferentes são usadas pela classes corrente.
  • 32. DSL – Domain Specific Language • Escrever códigos que se pareçam menos com o código de origem. Mas sim, com o problema a ser resolvido. • Facilidade de comunição e manutenção. • Podemos fazer isso com: – DSL’s externas: Com o uso de ANTLR, por exemplo – DSL’s internas: Com Fluent Interfaces
  • 33. DSL Interna com Fluent Interfaces EmailMessage mail = new EmailMessage(); mail.setSender(”brenobarros@gmail.com"); mail.setDestination(”contato@agilevale.com.br"); mail.setSubject(”Palestra"); mail.setContent(”…Descrição da Palestra"); mail.send(); new EmailMessage() .from(”brenobarros@gmail.com") .to(”contato@agilevale.com.br") .withSubject(”Palestra") .withBody(”…Descrição da Palestra") .send();
  • 37. O Raio X para o Time de Desenvolvimento
  • 42. A evolução do seu Design
  • 44. Premissas • Ser descentralizado • Possuir um time auto-organizado • Ser transparente • Não lute contra mudanças • Foco em simplicidade • Foco em flexibilidade • Promover a inspeção e adaptação • Promover a presença da língua de negócio
  • 45. Outras Referências Neal Ford: http://www.ibm.com/developerworks/java/library/j-eaed1/index.html
  • 47. Muito obrigado! []’s

Hinweis der Redaktion

  1. - Tentam eliminar a sintaxe dissonante por meio da criação de encapsulamentos contextuais em torno de elementos relacionados.