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

39
Integração entre times e o desafio de desenvolver uma aplicação Ciclo de Palestras Infnet

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

Integração entre times e o desafio dedesenvolver 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 éramos apenas um time

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.

Fonte: http://henriquebastos.net/desmistificando-o-conceito-de-django-apps/

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!

Grau de acoplamento deve ser visto caso a caso

Integração Antecipada de Código

25

Objetivo: descobrir o problema antes que ele 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