SlideShare uma empresa Scribd logo
DIRETO DAS TRINCHEIRAS
BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM
         AMBIENTES CORPORATIVOS
BOAS
DANILO SATO
                         Lead Consultant
                            Líder Técnico
                                Arquiteto
                                 DevOps
                                   Coach
                               Treinador
                    SP, Londres, Chicago
@dtsato
CARLOS VILLELA
                         Lead Consultant
                            Líder Técnico
                             Velho Chato
                                Arquiteto
                                 DevOps
                       Inovação Contínua
                SP, Londres, Porto Alegre


@cv
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos
ENTERPRISE
               IN-TER-PRÁI-ZI
Uma empresa que não é uma start-up, seguindo processos que não são
                             Lean.
          Mas você tem contas pra pagar e vai trabalhar lá.
AUTÓPSIAS
Atropelamento por bolas de lama
Montanhas de pepinos
Morte por # f e
             idf
Asfixia por DBAs
Estupro remoto de servidores
Alucinações e flashbacks do J2EE
DEPLOYMENT PIPELINE
EXPLOSÃO DE CÓDIGO
 “Por trás de toda má ideia tem sempre uma boa
                    intenção”
EXPLOSÃO DE CÓDIGO
Abuso de monkey-patching
Forks pessoais
Deixar upgrades para depois
Forçar o Rails além do seu limite
The Rails Way is the only way
EXPLOSÃO DE CÓDIGO
Teste seus monkey-patches
Extraia gems para facilitar a manutenção

             EXPLOSÃO DE CÓDIGO
Pense além do model/view/controller/helper
Limite o número de pontos de integração
Bom design OO: crie abstrações úteis
   Algo entre F o
               oe
   AsrcBsFoigeoFcoyenml
    btataeoSnltnatrBaIp
ESTRATÉGIAS DE TESTE
Cnro Uurofzlgncmscso
 eái: sái a oi o ues

Dd qeetun pgn d lgn
 ao u  so a áia e oi
Qad e penh ocmo"oed uuro cm"sr
 uno u reco   ap nm e sái" o ue"
Ee penh ocmo"eh"cm"3rt
  u reco   ap sna o sc3"
Ee cion bto"oi"
  u lc  o oã Lgn
Etoe vupr ahmpg cmuamnae d scso"oi eeud cms
 nã u o aa   oeae o m esgm e ues Lgn ftao o
ues"
 cso
ESTRATÉGIAS DE TESTE
Gerenciar teste funcionais por história
Abuso no uso de mocks
   Re-testar o framework
   Mockar o objeto sendo testado
Ter um time separado cuidando dos testes
Investir em automação de teste de UI
Testes só rodam em um determinado ambiente
ESTRATÉGIAS DE TESTE
Testes funcionais de user journeys e não por história
Muito mais testes unitários do que testes funcionais

         ESTRATÉGIAS DE TESTE
Todo mundo é dono dos testes
Código de teste também é código
Evite acoplar testes com um determinado ambiente
RUBY EM MÚLTIPLAS
  PLATAFORMAS
 “ Ruby is highly portable: it is developed mostly on
   GNU/Linux, but sort of works on many types of
UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP,
               DOS, BeOS, OS/2, etc. ”
RUBY EM MÚLTIPLAS PLATAFORMAS
 Desenvolver em ambiente/plataforma diferente
 Usar infra diferente (BD, jobs, in-memory)
 Falta de cuidado com gems nativas
 Múltiplos encodings
 Linebreak/whitespace wars
 RVM em produção
RUBY EM MÚLTIPLAS PLATAFORMAS
Bundler
Vendorize tudo

  RUBY EM MÚLTIPLAS PLATAFORMAS
JRuby
Crie ambientes parecidos com produção
UTF-8 no stack inteiro
Você não quer rodar GCC em produção, IT Ops agradece
vgatris
 arn_al
Mingle , Go : JRuby e pacotes para diversos SOs
LIDANDO COM DADOS
LIDANDO COM DADOS
Forçar ActiveRecord num schema que você não controla
Usar vários BDs na mesma aplicação
SQLServer
Usar NoSQL como RDBMS
LIDANDO COM DADOS
Divida em aplicações/serviços menores
Defina quem tem posse dos dados

          LIDANDO COM DADOS
Representantes do negócio em decisões arquiteturais
Considere usar processos ETL
Teste!
CAPISTRANO
DSL para executar sequências de comandos em máquinas remotas de
                        acordo com roles.
  Amplamente utilizado para fazer deployment de aplicações Rails.
   #cppouto dpo mse
     a rdcin ely atr
CAPISTRANO
Multiplexação de conexões SSH
Referenciar servidores através de papéis (roles)

               CAPISTRANO
DSL Ruby, boa integração com Rake, etc.
Fácil de automatizar deployments e trocar receitas
CAPISTRANO
Encoraja deployments…
   …fora da integração contínua
   …direto do controle de versão
Branches para ajustes de produção
Ciclo de vida complicado (Maven, alguém?)
Processos difíceis de auditar
CAPISTRANO: ALTERNATIVAS
Não usar o ciclo de vida padrão
Empacotar aplicação usando RPM, DEB, etc
  Receitas fáceis de escrever
  Evoluem desde os anos 90
  IT Ops friendly :)
Use Cap para instalar os RPM/DEB/etc em ambientes
REST
Estilo arquitetural bem difundido em APIs web recentes.
   Aplicações feitas da web, e não apenas para a web.


          ENTITY EJB 1.X
                        Inferno.
REST
Sistemas pequenos, distribuídos
Escalabilidade horizontal

             REST
Manutenção e upgrades independentes
Composabilidade
Conway's Law
ENTITY EJB 1.X
Granularidade errada
Performance horrenda (e pilhas de hacks)
Deployments sofríveis, upgrades tensos
Muito difícil de usar bem
Literatura cheia de péssimos exemplos
REST, RUIM
Granularidade errada
Performance horrenda (e pilhas de hacks)
Deployments sofríveis, upgrades tensos
Literatura cheia de exemplos questionáveis (Rails API)
Caching fora do HTTP
REST
Documentos e representações (vs. 'DB em JSON')
Transições de estado (vs. RPC)

                  REST
Estados de erro bem definidos e testados
Fail-over bem definido e testado
Upgrades oferecem retro-compatibilidade
Caching e de-caching óbvios (HTTP)
Q&A?
         DIRETO DAS TRINCHEIRAS
BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES
                   CORPORATIVOS
BOAS             Danilo Sato @dtsato
                 Carlos Villela @cv
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos

Mais conteúdo relacionado

Mais procurados

Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
Alessandro Binhara
 
Cultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develCultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e devel
Jose Augusto Carvalho
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
Taller Negócio Digitais
 
Discutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo SatoDiscutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo Sato
Thoughtworks
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
José Alexandre Macedo
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
Leonardo Comelli
 
Quality Assurance Quality Enablement
Quality Assurance Quality EnablementQuality Assurance Quality Enablement
Quality Assurance Quality Enablement
Leandro Prado
 
Clean Code
Clean CodeClean Code
Clean Code
Daniel Tamiosso
 
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasBrownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
Emmanuel Gomes Brandão
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
Eteg
 
A fantástica fábrica de software
A fantástica fábrica de softwareA fantástica fábrica de software
A fantástica fábrica de software
Lucas Barros
 
Mantendo o código saudável
Mantendo o código saudávelMantendo o código saudável
Mantendo o código saudável
Rosana Angelo Branas, MBA
 
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS  + Fixture FactoryBDD - JBehave + SeleniumHQ + PhantomJS  + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
Andre Vinicius Buzzo
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejista
José Roberto Araújo
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
Paulino Michelazzo
 

Mais procurados (15)

Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
Cultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develCultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e devel
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
 
Discutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo SatoDiscutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo Sato
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
 
Quality Assurance Quality Enablement
Quality Assurance Quality EnablementQuality Assurance Quality Enablement
Quality Assurance Quality Enablement
 
Clean Code
Clean CodeClean Code
Clean Code
 
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasBrownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
 
A fantástica fábrica de software
A fantástica fábrica de softwareA fantástica fábrica de software
A fantástica fábrica de software
 
Mantendo o código saudável
Mantendo o código saudávelMantendo o código saudável
Mantendo o código saudável
 
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS  + Fixture FactoryBDD - JBehave + SeleniumHQ + PhantomJS  + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejista
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 

Semelhante a Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos

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
Diego Pacheco
 
QConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaQConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestrutura
Diego Pacheco
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Rodrigo Branas
 
Conhecendo o Ruby on Rails
Conhecendo o Ruby on RailsConhecendo o Ruby on Rails
Conhecendo o Ruby on Rails
Jony dos Santos Kostetzer
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
Comunidade NetPonto
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
Pedro Cavalero
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
Jacqueline Abreu
 
Quem e dev ops
Quem e dev opsQuem e dev ops
Quem e dev ops
Andre "Ramoni" Guimaraes
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
Ralph Rassweiler
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Dickson S. Guedes
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
Elaine Naomi
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
Cleiton Felipe Moraes
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Renato Groffe
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Rodrigo Vieira
 
NOSQL - Uma real alternativa
NOSQL - Uma real alternativaNOSQL - Uma real alternativa
NOSQL - Uma real alternativa
Renato Molina Toth
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
Carlos Felippe Cardoso
 
Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013
Leandro Silva
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
Bruno Rocha
 
O futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseO futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java Enterprise
Globalcode
 
Webinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros ÁgeisWebinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros Ágeis
Rodrigo R Garcia, PMP
 

Semelhante a Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos (20)

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
 
QConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaQConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestrutura
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Conhecendo o Ruby on Rails
Conhecendo o Ruby on RailsConhecendo o Ruby on Rails
Conhecendo o Ruby on Rails
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Quem e dev ops
Quem e dev opsQuem e dev ops
Quem e dev ops
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 
NOSQL - Uma real alternativa
NOSQL - Uma real alternativaNOSQL - Uma real alternativa
NOSQL - Uma real alternativa
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
O futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseO futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java Enterprise
 
Webinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros ÁgeisWebinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros Ágeis
 

Mais de Danilo Sato

Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014
Danilo Sato
 
Keynote RuPy Natal 2014
Keynote RuPy Natal 2014Keynote RuPy Natal 2014
Keynote RuPy Natal 2014
Danilo Sato
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
Danilo Sato
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
Danilo Sato
 
Refactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the BasicsRefactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the Basics
Danilo Sato
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
Danilo Sato
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
Danilo Sato
 
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Danilo Sato
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-bá
Danilo Sato
 
Coding Dojo Introduction
Coding Dojo IntroductionCoding Dojo Introduction
Coding Dojo Introduction
Danilo Sato
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
Danilo Sato
 
Refatoração em Larga Escala
Refatoração em Larga EscalaRefatoração em Larga Escala
Refatoração em Larga Escala
Danilo Sato
 
Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011
Danilo Sato
 
Lean Lego Game
Lean Lego GameLean Lego Game
Lean Lego Game
Danilo Sato
 

Mais de Danilo Sato (14)

Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014
 
Keynote RuPy Natal 2014
Keynote RuPy Natal 2014Keynote RuPy Natal 2014
Keynote RuPy Natal 2014
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Refactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the BasicsRefactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the Basics
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-bá
 
Coding Dojo Introduction
Coding Dojo IntroductionCoding Dojo Introduction
Coding Dojo Introduction
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
 
Refatoração em Larga Escala
Refatoração em Larga EscalaRefatoração em Larga Escala
Refatoração em Larga Escala
 
Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011
 
Lean Lego Game
Lean Lego GameLean Lego Game
Lean Lego Game
 

Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos

  • 1. DIRETO DAS TRINCHEIRAS BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES CORPORATIVOS BOAS
  • 2. DANILO SATO Lead Consultant Líder Técnico Arquiteto DevOps Coach Treinador SP, Londres, Chicago @dtsato
  • 3. CARLOS VILLELA Lead Consultant Líder Técnico Velho Chato Arquiteto DevOps Inovação Contínua SP, Londres, Porto Alegre @cv
  • 5. ENTERPRISE IN-TER-PRÁI-ZI Uma empresa que não é uma start-up, seguindo processos que não são Lean. Mas você tem contas pra pagar e vai trabalhar lá.
  • 6. AUTÓPSIAS Atropelamento por bolas de lama Montanhas de pepinos Morte por # f e idf Asfixia por DBAs Estupro remoto de servidores Alucinações e flashbacks do J2EE
  • 8. EXPLOSÃO DE CÓDIGO “Por trás de toda má ideia tem sempre uma boa intenção”
  • 9. EXPLOSÃO DE CÓDIGO Abuso de monkey-patching Forks pessoais Deixar upgrades para depois Forçar o Rails além do seu limite The Rails Way is the only way
  • 10. EXPLOSÃO DE CÓDIGO Teste seus monkey-patches Extraia gems para facilitar a manutenção EXPLOSÃO DE CÓDIGO Pense além do model/view/controller/helper Limite o número de pontos de integração Bom design OO: crie abstrações úteis Algo entre F o oe AsrcBsFoigeoFcoyenml btataeoSnltnatrBaIp
  • 11. ESTRATÉGIAS DE TESTE Cnro Uurofzlgncmscso eái: sái a oi o ues Dd qeetun pgn d lgn ao u so a áia e oi Qad e penh ocmo"oed uuro cm"sr uno u reco ap nm e sái" o ue" Ee penh ocmo"eh"cm"3rt u reco ap sna o sc3" Ee cion bto"oi" u lc o oã Lgn Etoe vupr ahmpg cmuamnae d scso"oi eeud cms nã u o aa oeae o m esgm e ues Lgn ftao o ues" cso
  • 12. ESTRATÉGIAS DE TESTE Gerenciar teste funcionais por história Abuso no uso de mocks Re-testar o framework Mockar o objeto sendo testado Ter um time separado cuidando dos testes Investir em automação de teste de UI Testes só rodam em um determinado ambiente
  • 13. ESTRATÉGIAS DE TESTE Testes funcionais de user journeys e não por história Muito mais testes unitários do que testes funcionais ESTRATÉGIAS DE TESTE Todo mundo é dono dos testes Código de teste também é código Evite acoplar testes com um determinado ambiente
  • 14. RUBY EM MÚLTIPLAS PLATAFORMAS “ Ruby is highly portable: it is developed mostly on GNU/Linux, but sort of works on many types of UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc. ”
  • 15. RUBY EM MÚLTIPLAS PLATAFORMAS Desenvolver em ambiente/plataforma diferente Usar infra diferente (BD, jobs, in-memory) Falta de cuidado com gems nativas Múltiplos encodings Linebreak/whitespace wars RVM em produção
  • 16. RUBY EM MÚLTIPLAS PLATAFORMAS Bundler Vendorize tudo RUBY EM MÚLTIPLAS PLATAFORMAS JRuby Crie ambientes parecidos com produção UTF-8 no stack inteiro Você não quer rodar GCC em produção, IT Ops agradece vgatris arn_al Mingle , Go : JRuby e pacotes para diversos SOs
  • 18. LIDANDO COM DADOS Forçar ActiveRecord num schema que você não controla Usar vários BDs na mesma aplicação SQLServer Usar NoSQL como RDBMS
  • 19. LIDANDO COM DADOS Divida em aplicações/serviços menores Defina quem tem posse dos dados LIDANDO COM DADOS Representantes do negócio em decisões arquiteturais Considere usar processos ETL Teste!
  • 20. CAPISTRANO DSL para executar sequências de comandos em máquinas remotas de acordo com roles. Amplamente utilizado para fazer deployment de aplicações Rails. #cppouto dpo mse a rdcin ely atr
  • 21. CAPISTRANO Multiplexação de conexões SSH Referenciar servidores através de papéis (roles) CAPISTRANO DSL Ruby, boa integração com Rake, etc. Fácil de automatizar deployments e trocar receitas
  • 22. CAPISTRANO Encoraja deployments… …fora da integração contínua …direto do controle de versão Branches para ajustes de produção Ciclo de vida complicado (Maven, alguém?) Processos difíceis de auditar
  • 23. CAPISTRANO: ALTERNATIVAS Não usar o ciclo de vida padrão Empacotar aplicação usando RPM, DEB, etc Receitas fáceis de escrever Evoluem desde os anos 90 IT Ops friendly :) Use Cap para instalar os RPM/DEB/etc em ambientes
  • 24. REST Estilo arquitetural bem difundido em APIs web recentes. Aplicações feitas da web, e não apenas para a web. ENTITY EJB 1.X Inferno.
  • 25. REST Sistemas pequenos, distribuídos Escalabilidade horizontal REST Manutenção e upgrades independentes Composabilidade Conway's Law
  • 26. ENTITY EJB 1.X Granularidade errada Performance horrenda (e pilhas de hacks) Deployments sofríveis, upgrades tensos Muito difícil de usar bem Literatura cheia de péssimos exemplos
  • 27. REST, RUIM Granularidade errada Performance horrenda (e pilhas de hacks) Deployments sofríveis, upgrades tensos Literatura cheia de exemplos questionáveis (Rails API) Caching fora do HTTP
  • 28. REST Documentos e representações (vs. 'DB em JSON') Transições de estado (vs. RPC) REST Estados de erro bem definidos e testados Fail-over bem definido e testado Upgrades oferecem retro-compatibilidade Caching e de-caching óbvios (HTTP)
  • 29. Q&A? DIRETO DAS TRINCHEIRAS BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES CORPORATIVOS BOAS Danilo Sato @dtsato Carlos Villela @cv