SlideShare uma empresa Scribd logo
1 de 39
Integração entre times e o desafio de
desenvolver uma aplicação
Ciclo de Palestras Infnet
2
Victor
Pantoja
Engenheiro Eletrônico e de Computação pela
UFRJ e mestre em Informática pela PUC-Rio,
possuo mais de 9 anos de experiência
desenvolvendo grandes sites focados no usuário.
Scrum Master da área de aplicações móveis
(before it was cool) de 2007 a 2008.
Atualmente, sou desenvolvedor web sênior no
globoesporte.com.
Background
Scrum na globo.com desde julho de 2007
4 Times Ágeis com 3 a 4 dev + 1 Infra + 1 DBA +
SM + 1 PO
Maioria do software em Python / Django
3
Tamanho do
Problema
Visitantes únicos: 20,7 milhões por mês
4
Visitas: 215 milhões por mês
8 milhões de visitas por dia!
Cenário
2011
Cenário 2011
6
- 1 time recém-formado trabalhando no globoesporte.com
- nenhum dos desenvolvedores jamais havia trabalhado no
portal e nem com o framework por trás dele
- código legado construído sobre um framework quando
este ainda estava no início de seu desenvolvimento.
- testes escassos
- não sabíamos o impacto das alterações que fazíamos mas
Cenário 2011
7
- SporTV.com foi o primeiro projeto deste time
- ownership do código e do projeto
- começamos a conhecer cada linha de código do
projeto
- definimos padrões de código e de testes
8
Mudanç
as
Mudanças
10
- novos sites Combate e Eu Atleta (desenvolvidos pelo time
1)
- importantes eventos esportivos com data bem definida,
como as Olimpíadas de Londres 2012 e Copa do Mundo
FIFA 2014
Mudanças
11
1 time trabalhando no
globoesporte.com
1 time trabalhando no
SporTV
1 time trabalhando em
Classificação / Tabelas /
Tempo Real
1 time realizando
integrações com o Cartola
FC
Mudanças
12
Utilizando a mesma base de código!
Mudanças
13
Cada time possuía seus próprios padrões de
código e testes e sua verdade absoluta
Os padrões que impúnhamos não eram
aceitos pelos demais times e sentíamos que
faltava diálogo
Tragédia
Anunciada
14
15
16
O Grande
Vilão
17
Diálogo
18
Diálogo
19
Reuniões periódicas para:
-falar sobre o que cada time está fazendo
-identificar pontos de sobreposição de
trabalho e reuso de código
-discutir novas tecnologias
-melhorar nosso processo de trabalho
Segregação do
Código
20
- havia uma quantidade (pequena) de bugs
introduzidos em código alheio
- código legado anterior ao meu time e do
meu próprio time precisava ficar isolado
Segregação do
Código
21
Em essência, Django Application é simplesmente um
pacote Python que segue algumas convenções. Essas
convenções são importantes, pois permitem que o
Django detecte suas características e agregue suas
funcionalidades ao projeto.
e: http://henriquebastos.net/desmistificando-o-conceito-de-django-a
Segregação do
Código
22
-divisão do globoesporte.com em dezenas
de apps isoladas que falam entre si apenas
por interfaces
-nenhum método de uma app que não
estivesse exposto poderia ser usado
-facilidade no gerenciamento do ciclo de
vida de cada app
Segregação de
Código
Utilize os recursos da própria
linguagem!
au de acoplamento deve ser visto caso a ca
Integração Antecipada de
Código
25
Objetivo: descobrir o
problema antes que el
chegue em produção
26
27
Local
DEV0[1-4]
QA1
Staging
PROD
Integração Antecipada de
Código
Integração Antecipada de
Código
28
- estava se tornando
comum quebrar o
código do colega ao
lado e só perceber
no último momento
(PROD)
Como resolver?
29
Perguntar se alguém usa certo trecho de
código se mostrou bastante ineficiente pelo
tamanho do projeto
Como resolver?
30
-Ambiente único de integração continua
(CI) para dar mais visibilidade a todos os
testes
-pipeline para testar o branch de cada time
frente ao código de produção
-pipeline para testar o branch de cada time
frente aos demais branches
Como resolver?
31
Escreva testes!
Como resolver?
32
Coordenar releases:
- todo time deve avisar aos demais de sua
intenção de subida
Mostrou-se o método mais eficiente
para reduzir problemas com subidas
para produção
- o objetivo é garantir que o código da apps
Django estejam bem isolados
- isolamento de testes através de um
settings no projeto que faz referência
apenas para a app em questão
Isolamento dos
Testes
E o nosso PO?
Trouxemos nosso PO para nosso lado
mostrando os benefícios:
E o nosso PO?
- menos bugs em produção
- maior aproveitamento de código = mais
features desenvolvidas em menos tempo
Última dica!
37
Mude sempre!
38
- o que funciona hoje provavelmente não
funcionará amanhã
- crie novas formações dos times para
disseminar “boa cultura”
- introduza novos conceitos e práticas para
melhorar a integraçao (enquanto ela
existe…)
Palavra Final
39
Comunicação é a
chave!
Perguntas!!
40
@victorpantoja

Mais conteúdo relacionado

Mais procurados

Testes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterTestes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterElias Nogueira
 
Construindo bons relacionamentos entre desenvolvedores e testadores
Construindo bons relacionamentos entre desenvolvedores e testadoresConstruindo bons relacionamentos entre desenvolvedores e testadores
Construindo bons relacionamentos entre desenvolvedores e testadoresGabriel Oliveira
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)Igor Abade
 
Apresentação tdc 2016 - trilha de testes
Apresentação tdc   2016 - trilha de testesApresentação tdc   2016 - trilha de testes
Apresentação tdc 2016 - trilha de testesSamuel Lucas
 
Automação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumElias Nogueira
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosSamanta Cicilia
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a pontaElias Nogueira
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horasSamanta Cicilia
 
Minas Testing Conference - Entrega Contínua
Minas Testing Conference - Entrega ContínuaMinas Testing Conference - Entrega Contínua
Minas Testing Conference - Entrega ContínuaSamanta Cicilia
 
A importância dos Testes no Devops
A importância dos Testes no DevopsA importância dos Testes no Devops
A importância dos Testes no DevopsElias Nogueira
 
Agileze seus testes com automacao e grid
Agileze seus testes com automacao e gridAgileze seus testes com automacao e grid
Agileze seus testes com automacao e gridElias Nogueira
 
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Elias Nogueira
 
Lidando com Equipes de Desenvolvimento
Lidando com Equipes de DesenvolvimentoLidando com Equipes de Desenvolvimento
Lidando com Equipes de Desenvolvimento4Soft
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 

Mais procurados (20)

Testes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterTestes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e Blazemeter
 
Construindo bons relacionamentos entre desenvolvedores e testadores
Construindo bons relacionamentos entre desenvolvedores e testadoresConstruindo bons relacionamentos entre desenvolvedores e testadores
Construindo bons relacionamentos entre desenvolvedores e testadores
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Casperjs-tdc-2016.ppt
Casperjs-tdc-2016.pptCasperjs-tdc-2016.ppt
Casperjs-tdc-2016.ppt
 
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
 
Apresentação tdc 2016 - trilha de testes
Apresentação tdc   2016 - trilha de testesApresentação tdc   2016 - trilha de testes
Apresentação tdc 2016 - trilha de testes
 
Automação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com Appium
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a ponta
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Minas Testing Conference - Entrega Contínua
Minas Testing Conference - Entrega ContínuaMinas Testing Conference - Entrega Contínua
Minas Testing Conference - Entrega Contínua
 
A importância dos Testes no Devops
A importância dos Testes no DevopsA importância dos Testes no Devops
A importância dos Testes no Devops
 
Visual regression tests qualityfest2018
Visual regression tests  qualityfest2018Visual regression tests  qualityfest2018
Visual regression tests qualityfest2018
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
WTM - Entrega Contínua
WTM - Entrega ContínuaWTM - Entrega Contínua
WTM - Entrega Contínua
 
Agileze seus testes com automacao e grid
Agileze seus testes com automacao e gridAgileze seus testes com automacao e grid
Agileze seus testes com automacao e grid
 
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...
 
Lidando com Equipes de Desenvolvimento
Lidando com Equipes de DesenvolvimentoLidando com Equipes de Desenvolvimento
Lidando com Equipes de Desenvolvimento
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 

Semelhante a Integração entre times e o desafio de desenvolver uma aplicação (v2)

Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realHenrique Schmidt
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo realWilly Salazar
 
[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloud[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloudBárbara Cabral da Conceição, CTFL
 
XP & Scrum from the trenches @ LeroyMerlin Brazil
XP & Scrum from the trenches @ LeroyMerlin BrazilXP & Scrum from the trenches @ LeroyMerlin Brazil
XP & Scrum from the trenches @ LeroyMerlin BrazilGaëtan Belbéoc'h
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003Edgar Silva
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
RubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhosRubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhosFelipe Gadelha Ruoso
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareEmerson Henrique
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareLuciano Almeida
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisLorival Smolski Chapuis
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Marcelo Marques Gonçalves
 
Primeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endPrimeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endDiego Eis
 
XP Programming
XP ProgrammingXP Programming
XP ProgrammingCJR, UnB
 
Como desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoftComo desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoftJucinei Pereira Dos Santos
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingMarcelo Láias
 

Semelhante a Integração entre times e o desafio de desenvolver uma aplicação (v2) (20)

Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo real
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo real
 
[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloud[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloud
 
XP & Scrum from the trenches @ LeroyMerlin Brazil
XP & Scrum from the trenches @ LeroyMerlin BrazilXP & Scrum from the trenches @ LeroyMerlin Brazil
XP & Scrum from the trenches @ LeroyMerlin Brazil
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
 
São Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOpsSão Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOps
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
DevOps - Operação contínua
DevOps - Operação contínuaDevOps - Operação contínua
DevOps - Operação contínua
 
RubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhosRubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhos
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
Primeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endPrimeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-end
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
Como desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoftComo desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoft
 
Desenvolvimento de aplicativo utilizando o framework ionic
Desenvolvimento de aplicativo utilizando o framework ionicDesenvolvimento de aplicativo utilizando o framework ionic
Desenvolvimento de aplicativo utilizando o framework ionic
 
Ger301
Ger301Ger301
Ger301
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 

Integração entre times e o desafio de desenvolver uma aplicação (v2)

Notas do Editor

  1. Todos os 9 anos na globo.com. Já fiz muito caso de uso e de testes. E diagramas enormes no MS Project com tudo direitinho: custos, caminho crítico…
  2. Acho que todos sabem que trabalhamos com Scrum a uns 7 anos. Éramos 4 times. Agora apenas 3. Criativamente chamados de esportes1, 2, 3 e 4. Tem gente que chama de alfa, beta… mas não somos criativos a esse ponto.
  3. Mas antes, alguns dados sobre o globoesporte.com para vocês entenderem o tamanho do problema!
  4. Com o passar do tempo e com o amadurecimento e maior integração dos desenvolvedores do nosso time, passamos a ter ownership do projeto. Conhecíamos cada linha de código e sabíamos exatamente para que cada método servia e onde ele era usado. Definimos muitos padrões de escrita de código e também de testes sem consultar os demais times da área de esportes que cuidavam dos demais projetos como o Cartola FC e o Futpedia
  5. Timelapse esportes1
  6. Esse cenário começou a mudar quando surgiu a necessidade de reconstruir o globoesporte.com e atualizar sua linguagem visual e editorial. Diversos novos tipos de conteúdo seriam agregados ao portal. Surgiram sites como o Eu Atleta, o Combate e o redesenho do SporTV. Havia em nossa direção as Olimpíadas de Londres 2012 e do Rio de Janeiro, em 2016. Havia também a primeira Copa do Mundo FIFA de Futebol aqui no Brasil depois de 64 anos.
  7. Era impossível que apenas um time fosse responsável por tudo isso. Passamos a ser 4 times trabalhando juntos no globoesporte.com e no Tempo Real.
  8. Criação de branches por time
  9. O meu time, denominado esportes 1, tinha a missão de guiar o desenvolvimento, uma vez que possuíamos uma imensa bagagem adquirida em quase 3 anos de desenvolvimento do portal. Porém, cada time já estava trabalhando junto havia algum tempo e possuía seus próprios padrões e cultura de testes, autonomia de deployment para os seus ambientes de desenvolvimento e de produção e também seus problemas e suas verdades absolutas
  10. Cada time trabalha em um branch. Um time pode introduzir bug no código de um outro com alguma facilidade… é apenas uma questão de tempo
  11. Precisa ser assim?
  12. Como fazer essa galera remar junta?
  13. A falta de conversa foi declarada a grande vilã e o primeiro problema de integração que atacaríamos. Decidimos que faríamos reunião periódicas e que a freqüência dependeria da necessidade de se passar conhecimento
  14. No começo, como tudo era novo para todos, optamos pela reunião semanal. Nestas reuniões, falávamos um pouco sobre o que cada time estava fazendo e tentávamos identificar possíveis problemas de integração, como pontos de sobreposição de trabalho tanto a nível de componente quanto de métodos necessários para se construir um certo elemento da página. Se nessa reunião fosse identificado que dois times estavam atuando em elementos parecidos ou que pudessem aproveitar algo já feito do outro, isto deveria ser discutido. Nestas reuniões também discutimos assuntos de nosso interesse: algo que tenhamos pesquisado ou alguma tecnologia que gostaríamos de experimentar.
  15. Pela falta de integração, passamos a introduzir uma quantidade pequena, porém significativa, de bugs no código de outros times. Uma alteração no comportamento de um método podia quebrar um outro em um ponto de código que jamais suspeitaríamos. Havia ainda muito código legado anterior ao meu time e ainda mais código legado escrito por nós mesmos durante nosso amadurecimento. Decidimos usar a linguagem de programação (Python) e o framework Django a nosso favor e optamos por quebrar o globoesporte.com em dezenas de apps isoladas que falariam entre si apenas por interfaces. Ou seja: nenhum método não exposto poderia ser usado e, se fosse usado, seria por conta e risco do desenvolvedor
  16. Decidimos usar a linguagem de programação (Python) e o framework Django a nosso favor e
  17. optamos por quebrar o globoesporte.com em dezenas de apps isoladas que falariam entre si apenas por interfaces. Ou seja: nenhum método não exposto poderia ser usado e, se fosse usado, seria por conta e risco do desenvolvedor.
  18. Por exemplo, temos uma app chamada globoesporte-core que, como o nome sugere, possui todos os métodos comuns a várias apps. Dessa forma, nossa app “jogo” depende fortemente da app “core”. Porém, essa relação é assimétrica: a app “core” não depende da app “jogo”. Imagine agora outra app chamada “materia”, contendo o código necessário para termos notícias no globoesporte.com. A princípio, esta app não deveria depender de “jogo” mas existe a crônica de um jogo que nada mais é que uma matéria e essa dependência passa a existir. O interessante neste caso é reduzir ao máximo o acoplamento entre elas.
  19. A forma de se fazer isso depende da linguagem de programação e cada uma tem sua implementação. Em Java, por exemplo, isso pode ser feito através de métodos públicos e privados. Em Python, o desenvolvedor pode expor apenas os métodos desejados através do arquivo __init__.py. Claro que o grau de acoplamento vai depender do objetivo e funcionalidades da sua app.
  20. O ambiente local é a Tomorrow Land, onde tudo funciona como você quer e nada pode dar errado.
  21. Na globo.com, como na maioria das empresas de TI, temos nosso ambiente de desenvolvimento local e os ambientes de testes antes de chegarmos ao ambiente de produção.
  22. Daí, seu código chega em produção e (oh!) não funcionou. Pior, quebrou o código do seu colega do lado que trabalha em outro time e desenvolveu uma funcionalidade que você nem sabia e que estava usando este mesmo trecho de código que você alterou. O que aconteceu neste caso foi a integração tardia do código.
  23. Decerto, a maneira mais rápida de resolver problemas como o descrito no parágrafo anterior é perguntando se alguém usa esse método. Porém, em um projeto grande, como o globoesporte.com, em que dezenas de apps são mantidas e evoluídas por vários times, perguntas desse tipo rapidamente podem se transformar em uma inspeção visual de código a procura de pontos que utilizem esse código. Os times do globoesporte.com decidiram automatizar esse procedimento de duas formas: ambiente único integração contínua e criação de um ambiente de testes com todo o código mais recente instalado. A primeira forma significa simplesmente que teríamos um CI único e que utilizaríamos o Jenkins para tal. Dessa forma, todos os testes de todos os projetos seriam executados juntos e ficariam sempre visíveis. A segunda, ambiente único de testes, significa que toda alteração em que houvesse dúvida, ou certeza, de que haveria impactos em outros pontos deveria ser testada frente aos branches de desenvolvimento das demais apps. Isso feito, era preciso também coordenar as subidas para produção. Se um time tem alguma subida planejada, ele deve avisar aos demais. Além disso, se um time estiver pensando em realizar uma subida, deve consultar os demais. Essa integração, por ser mais simples, é feita utilizando nosso bom e velho email corporativo ou, melhor ainda, falando com o colega do lado.
  24. Os times do globoesporte.com decidiram automatizar esse procedimento de duas formas: ambiente único integração contínua e criação de um ambiente de testes com todo o código mais recente instalado. A primeira forma significa simplesmente que teríamos um CI único e que utilizaríamos o Jenkins para tal. Dessa forma, todos os testes de todos os projetos seriam executados juntos e ficariam sempre visíveis. A segunda, ambiente único de testes, significa que toda alteração em que houvesse dúvida, ou certeza, de que haveria impactos em outros pontos deveria ser testada frente aos branches de desenvolvimento das demais apps. Isso feito, era preciso também coordenar as subidas para produção. Se um time tem alguma subida planejada, ele deve avisar aos demais. Além disso, se um time estiver pensando em realizar uma subida, deve consultar os demais. Essa integração, por ser mais simples, é feita utilizando nosso bom e velho email corporativo ou, melhor ainda, falando com o colega do lado.
  25. De nada vale isso se os testes não existirem. Então, escreva testes!!!
  26. Isso feito, era preciso também coordenar as subidas para produção. Se um time tem alguma subida planejada, ele deve avisar aos demais. Além disso, se um time estiver pensando em realizar uma subida, deve consultar os demais. Essa integração, por ser mais simples, é feita utilizando nosso bom e velho email corporativo ou, melhor ainda, falando com o colega do lado.
  27. Após passar todo a apresentação falando sobre integração, esse quarto passo pode parecer contraditório. Porém, antes de buscar resolver problemas de integração é bom ter certeza de que o código de sua app está bem isolado do de outras. Essa verificação poder ser facilmente feita através da execução isolada de testes funcionais. Como utilizamos Django, a forma que encontramos foi termos um settings para cada app que seria usado nos testes isolados e que conteria apenas as dependências básicas no atributo INSTALLED_APPS.
  28. Adeque-se a novas formações de times e a novos conceitos. A evolução da tecnologia nos mostra diariamente que o que funcionou hoje pode não funcionar tão bem amanhã.
  29. Acredito que nada do que foi dito aqui é novidade. Não reinventamos a roda, apenas aprendemos a trabalhar em conjunto com os demais times através do diálogo constante.
  30. Perguntem por favor! Quem tiver com vergonha, nossos twitters são...