Por Ismael Soares
1º Dia
Key Notes
Design de Software no
      Século 21
3 apresentações em 1

* Os Desafios do Desenvolvimento Mobile

* NoSQL


* Projeto de Software
Projeto de Software

Real necessidade de se fazer um projeto de
software



“Precisamos abrir mão da qualidade para
entregar mais na próxima release...”

Gerentes de projetos
Projeto de Software


“Empurrar o design é um pecado e que todas
as variáveis que indicam isso deveriam ir para
o inferno”

Uncle Bob
Fogo do Inferno Ágil
Projeto de Software

 Software com ótimo design custa caro!

 Temos que aceitar algumas dívidas, desde que
 elas valham a pena.

 Toda Dívida tem juros...

 Não seja imprudente! Paga a sua dívida o mais
 rápido possível!
o !
    teir
 alo
C
Performance e Tolerância
   a Falhas no NetFlix




      Ben Christensen
Atualmente...


- O NetFlix recebe mais de 1 bilhão de requisões por
dia.
- Estas requisições são processadas por dezenas de
sistemas internos.
- Como a API do NetFlix suporta diferentes tipos de
dispositivos e ainda permite que os fabricantes
otimizem de acordo com suas necessidades.
Merchandising...
Tracks
Métodos Ágeis: o que
folclore e o que real?




    Mauricio Aniche
Amar demais um método pode ser um
problema...

Precisamos ver as coisas como elas
realmente são!
Estudos e pesquisas
Não podemos acreditar em tudo que
dizem por ai...


        De 1996 trabalhos,
       só 36 possuem rigor
            científico
     (Dyba,T., Dingsoyr,T. Empirical studies of agile software
                development: A systematic review)
• Grande parte dos estudos feitos com XP
  (76%);
• Single-Case (39%) e Multiple-Case (33%)
• 73% dos estudos com iniciantes em agile; só
  12% com times maduros;
• 73% dos estudos com profissionais;
       (Dyba,T., Dingsoyr,T. Empirical studies of agile software
                  development: A systematic review)
Sem TDD,
seu código não terá
     qualidade
“... a prática de TDD não guia o
desenvolvedor para um bom projeto de
classes de forma automática”




 Aniche, Gerosa. Como a Prática de TDD Influencia o Projeto de Classes em Sistemas Orientados a
                    Objetos: Padrões de Feedback para o Desenvolvedor. 2012
Quando o Aniche não usa
TDD...

- Já tem bem claro o projeto da classe
que ele está trabalhando;

-É código que lida com infraestrutura
Quando o Aniche não usa
TDD...

- Já tem bem claro o projeto da classe
que ele está trabalhando;

-É código que lida com infraestrutura


   Mas ele testa sempre!
Programação em Par
   é obrigatório?
Quando usar PP

- tarefas complexas;

- Há conhecimento para ser
compartilhado.
Quando não usar PP

- tarefa simples e não conhecimento
para ser compartilhado;

- tarefas de estudo.
Documentação não serve
     para nada!
Várias formas de documentar

- através de conversas;
- através de UML (mesmo caipira);
- desenhos que o time criou durante o
planejamento;
- etc.
Correlação e Causa




http://www.slideshare.net/mauricioaniche/mtodos-geis-o-que-folclore-e-o-que-real-qcon-
                                        sp-2012
Kanban: aplicando melhoria
 contínua ao seu processo




       Rodrigo Yoshima
Complexo e complicado

Você só sabe se esta certo se
experimentar. Não dá para ter certezas
com antecedência.
Método Kanban

-   Comece como você está hoje
-   Visualize seu progresso
-   Melhore colaborativamente com técnicas científicas
-   Gerêncie o fluxo
-   Torne o processo explícito
Porque mudanças são tão
        difíceis?

-   CULTURA
-   MEDO
-   RISCO
-   CONTROLE
-   RESISTÊNCIA EMOCIONAL
                            as pessoas
                            resistem ser
                            mudadas
“Mude. Mas mude devagar,
porque a direção é mais
importante que a velocidade.”
Clarisse Lispector
http://www.slideshare.net/rodrigoy/kanban-aplicando-tdd-melhoria-contnua-do-seu-processo
http://www.slideshare.net/rodrigoy/kanban-aplicando-tdd-melhoria-contnua-do-seu-processo
http://www.slideshare.net/rodrigoy/kanban-aplicando-tdd-melhoria-contnua-do-seu-processo
Visualização do Kanban
http://www.slideshare.net/rodrigoy/kanban-aplicando-tdd-melhoria-contnua-do-seu-processo
Almoço
Construindo um avião em
       pleno Vôo




      Matheus Rossato
Empresa que trabalha com
              mineração de dados,
Caso de sucesso na
              personalização de E-commerce
     Chaordic com base no modelo
           Trabalham
              de ser viços SaaS
Desafio

Construir uma plataforma elástica,
escalável e disponível na Nuvem da
Amazon
Lições aprendidas


-   Itere rapidamente e em pequenos passos
-   Observe o que funciona
-   Debugue em produção
-   Mude com frequência
-   Aprenda a falhar e quebrar as coisas
-   Integração contínua ajuda evitar problemas
-   Cloud pode viabilizar seus negócios
Mega Scrum: Escalando o
 Scrum passo a passo




      Marden Neubert
Caso de estudo: UOL


Projeto de missão crítica (Pague Seguro) que
sofreu atrasos e precisou mudar a gestão.
Veio o crescimento que trouxe um enorme
backlog.
Crescimento do time

-   Melhorar a comunicação;
-   Garantir o retorno do investimento;
-   Organizar os times por backlog independentes;
-   Priorizar por temas;
-   Vários times uma só equipe.
Lições
-   Inclua novos Membros nos times produtivos;
-   Retire pessoas produtivas e forme outros times;
-   Não crie times só com pessoas novas;
-   Em time que esta ganhando e que e mexe;
-   Troque os membros constantemente;
-   Crie processos criteriosos de contratação; 
-   Use desenvolvedores nas entrevistas de contratação; 
-   O time da o feedback para novos integrantes.
Mega Scrum

- Sprints de 3 semanas para ajudar a sincronizar as
tarefas;
- Ambientes de homologação;
- Deploy automático;
- Mega planning com líderes técnicos P.O.
- Mega Stand-up (reunião diária) com a equipe
- Reevew e retrospectiva por equipe
- Pré planning (planning dos próximos realeses)
- Mega retrospectiva a cada 6 meses (identificar
problemas comuns entre as equipes e discutir soluções)
- Knowlogde Sharing
2º Dia
Key Notes
Para o infinito e além (Nasa)



       Tom Soderstrom
Apresentação


- Imagens de Marte
- Missões deste ano
- Robô que foi para Marte semana
passada
Mitos acerca de Cloud


      Não é Seguro!

     Não é Confiável!
Alguns cuidados

- Suba as coisas por etapa começando pelo menos
importante;
- Redunde os dados;
- Use criptografia
- Não guarde as chaves no Cloud
- Load Balance (várias zonas) do for importante
- Utilize backup automatizado e teste os backups
- Faça contratos
Escalando o GitHub




    Zach Holman
Início...

-> 4 Fases (Local, Networked, Network e GitRPC)
  - começou com Grit;
  - tiveram que refazê-lo para suportar o
  crescimento;
Networked

 - problemas com distribuição em rede
 - mudaram servidores
 - alteraram a implementação para distribuição
 em rede mas com a aplicação local (Grit)
 - latência muito grande
 - em resumo fizeram uma escalação horizontal
Network

 - problemas duplicação de dados no fork;
 - alto custo para manter os dados;
 - resolveram fazendo shard, mantendo os
 dados do projeto principal armazenado em
 outro lugar e os forks passaram a ser apenas
 ponteiros.
GitRPC

 - problemas com código bagunçado;
 - criaram uma implementação para acessar o
 Git via rede;
 - diminuiu a latência;
 - Cache Logic;
 - ainda estão migrando aos poucos.
Empresa Feliz

 - 108 funcionários a 5 anos  e ninguém nunca saiu;
 - diminua o motivo das saídas ;
 - uma pessoa que sai custa caro, porque uma pessoa nova
demora para começar a agregar valor;
 - as pessoas trabalham da maneira que eles gostam. Boa
parte trabalha remotamente aonde quiserem;
 - escolhem seu horário de trabalho, ferias, etc.
 - as pessoas trabalham a vontade sem stress.
Tracks
Responsive Web Design




     Eduardo Shiota
Conteúdo

- início do HTML em 1992
- uso de Design na Web
- CSS Zen Garden (site)
- aumento do uso de dispositivos móveis
- como suportar todos os dispositivos sem ter re-
trabalho?
- The Boston Globe foi o primeiro site a usar RWD
- Técnicas para ter um design flexível sem fixar os
tamanhos
Hibernate Efetivo: erros
  comuns e soluções




       Rafael Ponte
Lazy Initialization

- ocorre quando sessão é fechada antes de terminar
o acesso aos dados;
- Não faça Eager, pois trará problemas de
performance;
- Pattern Open Session In View ajuda quando
usamos uma mesma request.
Cache

- cache de primeiro nível;
- cada request tem uma session, causando muitas
consultas. Configure o cache de segundo nível;
- Caching Strategy (ehCache)
- cache 2nd não guarda hierarquias complexas;
- use o cache 2nd apenas para entidades que não
alteram com frequência;
- cache de consulta (Query Cache), onde a chave é
a consulta + os parâmetros.
N+1


- Eager + Join Fetch
- busca em lote (Batch size) é meio termo entre o
Eager e Lazy, porque faz uma adivinhação cega, um
chute;
- subselect.
Processamento em lote

 - a cada entidade inserida na memória, o Hibernate
 cria um foto e coloca no cache de primeiro nível;
- StatelessSession (session de baixo nível) não usa
cache;
 - Configurar o bach size no hibernate para ir menos
vezes ao banco.
Almoço
Arquitetura Facebook




    Rodrigo Schmidt
Arquitetura
                                                                         Open Graph, é uma
                                                                         forma facilitar a
                                                                         integração entre
                                                                         páginas da web e o
                                                                         próprio facebook. Nas
                                                                         palavras deles, usando
                                                                         o Open Graph, você
                                                                         pode fazer qualquer
                                                                         página se comportar
 - 955 milhões de usuários                                               como um objeto do
 - grafo das conexões sociais                                            facebook, com direito a
                                                                         analytics e tudo.
 - esquema de metadados Open Graph
  (http://www.modelomental.com.br/web-semantica/conhecendo-o-facebook-open-graph-protocol)
 - MySQL (tabelas particionadas)
 - tabelas simples com poucos índices e os dados são
 armazenados em um array (Blob)
 - usam Mencache
 - multi-get (trazer tudo em paralelo)
 - Preparable
 - compilador foi feito em C por deficiência do PHP
Java EE Vs Spring




Nico Steppat e Guilherme Moreira
http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
Java EE

 - lutador experiente
 - mudou a tática no Java EE 5
 - ganhou confiança com CDI
 - perdeu peso para ser ágil
 - patrocinado pela Oracle, Red Hat,
 IBM and outros
Spring Framework

 -   sem derrota desde 2004
 -   nocauteou o J2EE
 -   luta em qualquer container
 -   golpes fortes com POJOs
 -   sabe explorar bem seu oponente
 -   patrocinado pela Spring Source
Estatísticas




      http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
Resultado




     http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
Referências
Martin Fowler: http://www.martinfowler.com/articles/multiMobile/

Netflix: https://speakerdeck.com/u/benjchristensen/p/performance-and-fault-
tolerance-for-the-netflix-api-qcon-sao-paulo

Mauricio Aniche: http://www.slideshare.net/mauricioaniche/mtodos-geis-o-
que-folclore-e-o-que-real-qcon-sp-2012

Rodrigo Yoshima: http://www.slideshare.net/rodrigoy/kanban-aplicando-tdd-
melhoria-contnua-do-seu-processo

Matheus Rossato: http://www.slideshare.net/matheusrossato/qconsp-2012-
construindo-um-avio-em-pleno-vo-na-nuvem
Nasa: http://prezi.com/5pt5hgflj3ah/to-infinity-and-beyond/?
auth_key=4433faf57961988041cfd419c2c27f9aaf579ad4

GitHub: http://zachholman.com/talk/how-to-build-a-github

Rafael Ponte: http://www.slideshare.net/rponte/hibernate-efetivo-qconsp2012

Caelum: http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
OBRIGADO

O que vi na QCon 2012 São Paulo

  • 1.
  • 2.
  • 3.
  • 4.
    Design de Softwareno Século 21
  • 5.
    3 apresentações em1 * Os Desafios do Desenvolvimento Mobile * NoSQL * Projeto de Software
  • 6.
    Projeto de Software Realnecessidade de se fazer um projeto de software “Precisamos abrir mão da qualidade para entregar mais na próxima release...” Gerentes de projetos
  • 7.
    Projeto de Software “Empurraro design é um pecado e que todas as variáveis que indicam isso deveriam ir para o inferno” Uncle Bob
  • 8.
  • 9.
    Projeto de Software Software com ótimo design custa caro! Temos que aceitar algumas dívidas, desde que elas valham a pena. Toda Dívida tem juros... Não seja imprudente! Paga a sua dívida o mais rápido possível!
  • 10.
    o ! teir alo C
  • 11.
    Performance e Tolerância a Falhas no NetFlix Ben Christensen
  • 12.
    Atualmente... - O NetFlixrecebe mais de 1 bilhão de requisões por dia. - Estas requisições são processadas por dezenas de sistemas internos. - Como a API do NetFlix suporta diferentes tipos de dispositivos e ainda permite que os fabricantes otimizem de acordo com suas necessidades.
  • 13.
  • 15.
  • 16.
    Métodos Ágeis: oque folclore e o que real? Mauricio Aniche
  • 17.
    Amar demais ummétodo pode ser um problema... Precisamos ver as coisas como elas realmente são!
  • 18.
    Estudos e pesquisas Nãopodemos acreditar em tudo que dizem por ai... De 1996 trabalhos, só 36 possuem rigor científico (Dyba,T., Dingsoyr,T. Empirical studies of agile software development: A systematic review)
  • 19.
    • Grande partedos estudos feitos com XP (76%); • Single-Case (39%) e Multiple-Case (33%) • 73% dos estudos com iniciantes em agile; só 12% com times maduros; • 73% dos estudos com profissionais; (Dyba,T., Dingsoyr,T. Empirical studies of agile software development: A systematic review)
  • 20.
    Sem TDD, seu códigonão terá qualidade
  • 21.
    “... a práticade TDD não guia o desenvolvedor para um bom projeto de classes de forma automática” Aniche, Gerosa. Como a Prática de TDD Influencia o Projeto de Classes em Sistemas Orientados a Objetos: Padrões de Feedback para o Desenvolvedor. 2012
  • 22.
    Quando o Anichenão usa TDD... - Já tem bem claro o projeto da classe que ele está trabalhando; -É código que lida com infraestrutura
  • 23.
    Quando o Anichenão usa TDD... - Já tem bem claro o projeto da classe que ele está trabalhando; -É código que lida com infraestrutura Mas ele testa sempre!
  • 24.
    Programação em Par é obrigatório?
  • 25.
    Quando usar PP -tarefas complexas; - Há conhecimento para ser compartilhado.
  • 26.
    Quando não usarPP - tarefa simples e não conhecimento para ser compartilhado; - tarefas de estudo.
  • 27.
  • 28.
    Várias formas dedocumentar - através de conversas; - através de UML (mesmo caipira); - desenhos que o time criou durante o planejamento; - etc.
  • 29.
  • 30.
    Kanban: aplicando melhoria contínua ao seu processo Rodrigo Yoshima
  • 31.
    Complexo e complicado Vocêsó sabe se esta certo se experimentar. Não dá para ter certezas com antecedência.
  • 32.
    Método Kanban - Comece como você está hoje - Visualize seu progresso - Melhore colaborativamente com técnicas científicas - Gerêncie o fluxo - Torne o processo explícito
  • 33.
    Porque mudanças sãotão difíceis? - CULTURA - MEDO - RISCO - CONTROLE - RESISTÊNCIA EMOCIONAL as pessoas resistem ser mudadas
  • 34.
    “Mude. Mas mudedevagar, porque a direção é mais importante que a velocidade.” Clarisse Lispector
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
    Construindo um aviãoem pleno Vôo Matheus Rossato
  • 42.
    Empresa que trabalhacom mineração de dados, Caso de sucesso na personalização de E-commerce Chaordic com base no modelo Trabalham de ser viços SaaS
  • 43.
    Desafio Construir uma plataformaelástica, escalável e disponível na Nuvem da Amazon
  • 44.
    Lições aprendidas - Itere rapidamente e em pequenos passos - Observe o que funciona - Debugue em produção - Mude com frequência - Aprenda a falhar e quebrar as coisas - Integração contínua ajuda evitar problemas - Cloud pode viabilizar seus negócios
  • 45.
    Mega Scrum: Escalandoo Scrum passo a passo Marden Neubert
  • 46.
    Caso de estudo:UOL Projeto de missão crítica (Pague Seguro) que sofreu atrasos e precisou mudar a gestão. Veio o crescimento que trouxe um enorme backlog.
  • 47.
    Crescimento do time - Melhorar a comunicação; - Garantir o retorno do investimento; - Organizar os times por backlog independentes; - Priorizar por temas; - Vários times uma só equipe.
  • 48.
    Lições - Inclua novos Membros nos times produtivos; - Retire pessoas produtivas e forme outros times; - Não crie times só com pessoas novas; - Em time que esta ganhando e que e mexe; - Troque os membros constantemente; - Crie processos criteriosos de contratação;  - Use desenvolvedores nas entrevistas de contratação;  - O time da o feedback para novos integrantes.
  • 49.
    Mega Scrum - Sprintsde 3 semanas para ajudar a sincronizar as tarefas; - Ambientes de homologação; - Deploy automático; - Mega planning com líderes técnicos P.O. - Mega Stand-up (reunião diária) com a equipe - Reevew e retrospectiva por equipe - Pré planning (planning dos próximos realeses) - Mega retrospectiva a cada 6 meses (identificar problemas comuns entre as equipes e discutir soluções) - Knowlogde Sharing
  • 50.
  • 51.
  • 52.
    Para o infinitoe além (Nasa) Tom Soderstrom
  • 53.
    Apresentação - Imagens deMarte - Missões deste ano - Robô que foi para Marte semana passada
  • 54.
    Mitos acerca deCloud Não é Seguro! Não é Confiável!
  • 55.
    Alguns cuidados - Subaas coisas por etapa começando pelo menos importante; - Redunde os dados; - Use criptografia - Não guarde as chaves no Cloud - Load Balance (várias zonas) do for importante - Utilize backup automatizado e teste os backups - Faça contratos
  • 56.
  • 57.
    Início... -> 4 Fases(Local, Networked, Network e GitRPC) - começou com Grit; - tiveram que refazê-lo para suportar o crescimento;
  • 58.
    Networked - problemascom distribuição em rede - mudaram servidores - alteraram a implementação para distribuição em rede mas com a aplicação local (Grit) - latência muito grande - em resumo fizeram uma escalação horizontal
  • 59.
    Network - problemasduplicação de dados no fork; - alto custo para manter os dados; - resolveram fazendo shard, mantendo os dados do projeto principal armazenado em outro lugar e os forks passaram a ser apenas ponteiros.
  • 60.
    GitRPC - problemascom código bagunçado; - criaram uma implementação para acessar o Git via rede; - diminuiu a latência; - Cache Logic; - ainda estão migrando aos poucos.
  • 61.
    Empresa Feliz -108 funcionários a 5 anos  e ninguém nunca saiu; - diminua o motivo das saídas ; - uma pessoa que sai custa caro, porque uma pessoa nova demora para começar a agregar valor; - as pessoas trabalham da maneira que eles gostam. Boa parte trabalha remotamente aonde quiserem; - escolhem seu horário de trabalho, ferias, etc. - as pessoas trabalham a vontade sem stress.
  • 62.
  • 63.
    Responsive Web Design Eduardo Shiota
  • 64.
    Conteúdo - início doHTML em 1992 - uso de Design na Web - CSS Zen Garden (site) - aumento do uso de dispositivos móveis - como suportar todos os dispositivos sem ter re- trabalho? - The Boston Globe foi o primeiro site a usar RWD - Técnicas para ter um design flexível sem fixar os tamanhos
  • 65.
    Hibernate Efetivo: erros comuns e soluções Rafael Ponte
  • 66.
    Lazy Initialization - ocorrequando sessão é fechada antes de terminar o acesso aos dados; - Não faça Eager, pois trará problemas de performance; - Pattern Open Session In View ajuda quando usamos uma mesma request.
  • 67.
    Cache - cache deprimeiro nível; - cada request tem uma session, causando muitas consultas. Configure o cache de segundo nível; - Caching Strategy (ehCache) - cache 2nd não guarda hierarquias complexas; - use o cache 2nd apenas para entidades que não alteram com frequência; - cache de consulta (Query Cache), onde a chave é a consulta + os parâmetros.
  • 68.
    N+1 - Eager +Join Fetch - busca em lote (Batch size) é meio termo entre o Eager e Lazy, porque faz uma adivinhação cega, um chute; - subselect.
  • 69.
    Processamento em lote - a cada entidade inserida na memória, o Hibernate cria um foto e coloca no cache de primeiro nível; - StatelessSession (session de baixo nível) não usa cache; - Configurar o bach size no hibernate para ir menos vezes ao banco.
  • 70.
  • 71.
    Arquitetura Facebook Rodrigo Schmidt
  • 72.
    Arquitetura Open Graph, é uma forma facilitar a integração entre páginas da web e o próprio facebook. Nas palavras deles, usando o Open Graph, você pode fazer qualquer página se comportar - 955 milhões de usuários como um objeto do - grafo das conexões sociais facebook, com direito a analytics e tudo. - esquema de metadados Open Graph (http://www.modelomental.com.br/web-semantica/conhecendo-o-facebook-open-graph-protocol) - MySQL (tabelas particionadas) - tabelas simples com poucos índices e os dados são armazenados em um array (Blob) - usam Mencache - multi-get (trazer tudo em paralelo) - Preparable - compilador foi feito em C por deficiência do PHP
  • 73.
    Java EE VsSpring Nico Steppat e Guilherme Moreira
  • 75.
  • 76.
    Java EE -lutador experiente - mudou a tática no Java EE 5 - ganhou confiança com CDI - perdeu peso para ser ágil - patrocinado pela Oracle, Red Hat, IBM and outros
  • 77.
    Spring Framework - sem derrota desde 2004 - nocauteou o J2EE - luta em qualquer container - golpes fortes com POJOs - sabe explorar bem seu oponente - patrocinado pela Spring Source
  • 78.
    Estatísticas http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
  • 79.
    Resultado http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
  • 80.
  • 81.
    Martin Fowler: http://www.martinfowler.com/articles/multiMobile/ Netflix:https://speakerdeck.com/u/benjchristensen/p/performance-and-fault- tolerance-for-the-netflix-api-qcon-sao-paulo Mauricio Aniche: http://www.slideshare.net/mauricioaniche/mtodos-geis-o- que-folclore-e-o-que-real-qcon-sp-2012 Rodrigo Yoshima: http://www.slideshare.net/rodrigoy/kanban-aplicando-tdd- melhoria-contnua-do-seu-processo Matheus Rossato: http://www.slideshare.net/matheusrossato/qconsp-2012- construindo-um-avio-em-pleno-vo-na-nuvem
  • 82.
    Nasa: http://prezi.com/5pt5hgflj3ah/to-infinity-and-beyond/? auth_key=4433faf57961988041cfd419c2c27f9aaf579ad4 GitHub: http://zachholman.com/talk/how-to-build-a-github RafaelPonte: http://www.slideshare.net/rponte/hibernate-efetivo-qconsp2012 Caelum: http://www.slideshare.net/gui0rafa/spring-vs-java-ee-qconsp-2012
  • 83.