SlideShare a Scribd company logo
1 of 69
Download to read offline
Ponele el TURBO al Dev
       Team de tu Startup



Martin Siniawski
Co-founder & CTO de Streema
@msinia
- Red social para oyentes radios.
- +50,000 radios de todo el mundo.
- Empezamos hace 5 años y 1/2.
Nuestros dulces primeros años (3 y 1/2)

                       Streema Team
- Empezamos hace 5 años y 1/2.
- En los últimos años las cosas cambiaron!


                   Streema Team (ultimo tiempo)
De qué vamos a hablar hoy?


Técnicas y herramientas que nos
 permiten ejecutar muy rápido y
manejar un sitio de mucho tráfico,
  siendo un equipo muy chico.
De qué vamos a hablar hoy?
● Por qué empezamos esta búsqueda?

● La pregunta del millón:
      Cómo ponerle el TURBO a tu equipo?

● Espacio para compartir otras experiencias,
  ideas, dudas, etc.
Por qué emprendimos esta búsqueda?

Teníamos dos sentimientos...
 - "Dos pasos hacia delante y uno para atrás".
 - "Tenemos que avanzar más rápido, y parece
 que todavia hay margen para hacerlo".
(Antes)
- Downtimes frecuentes sin entender causas.
- Arreglamos/implementamos algo, pero
rompemos otra cosa.
- Deploys cada mucho tiempo. Podían llegar a
pasar semanas sin deployear.
- Errores durante mucho tiempo en producción
(salvo que sean muy graves :))
(Hoy)
- Prácticamente no tenemos downtimes
propios.
- La mayoría de los errores nunca llega a prod.
- Si llegan, nos damos cuenta casi
instantáneamente.
- Deployeamos varias veces por día.
(Hoy)
(Hoy)
(Hoy)
De acuerdo a nuestra experiencia...


  Hay pequeños mecanismos que
   hacen una gran diferencia en la
     velocidad y calidad de los
 resultados que uno puede obtener
Lo mejor de todo...


  Son cosas relativamente fáciles de
 implementar una vez que uno ya las
               conoce

   Y eso vamos a compartir ahora...
La pregunta del millón:

       Cómo ponerle el
          TURBO

   a tu equipo?
T
U
R
B
O
Testeos Unitarios/Funcionales
U
R
B
O
Testeos unitarios/funcionales
● Nos costó entender su beneficio hasta
  implementarlos.
● No hacemos TDD, intentamos que la
  cobertura no baje.
● La mayoría es de backend (Python), algo de
  JS y Selenium.
Testeos unitarios/funcionales - Tips
Podemos estar todo el dia hablando de
 testeos. En nuestra experiencia hay
     dos cosas que son vitales...
Que corran TODOS!
Que corran TODOS!

● Tuvimos testeos que no estaban siendo
  corridos.
● Los organizamos distinto a lo que nuestro
  test runner (nose) espera.
● Armamos una clase especial que hace la
  deteccion (un test selector).
Que corran rápido!
Que corran rápido!

Por qué?
- Si no se corren rápidos es un freno para que
alguien los corra.
- Hay que enterarse rápido si algo se rompió, el
context switch mata!

    El número fetiche es 1'. Difícil.
Que corran rápido!

● Nosotros tackleamos el problema de la
  velocidad a principio de año.
● El mayor problema se debía - y se debe - a
  los fixtures.
   ○ Refactoreamos testeos para que no los
     usen.
   ○ Implementamos fixture bundling.
Que corran rápido!
Testeos unitarios/funcionales - Tips
1. Por favor no usen fixtures.
2. Si realmente no hay tiempo, hacer tests más
   funcionales.
3. Cuando aparece un bug que los testeos no
   agarran, intentar armar un test que lo haga.
4. Usar Selenium para hacer testeos
   funcionales de los JS.
Testeos Unitarios/Funcionales
U
R
B
O
Testeos Unitarios/Funcionales
Un Server de Integración Continua
R
B
O
Jenkins CI
          (el server de integracion continua)




● Realmente es muy fácil de tenerlo andando
  (en un 1 dia de hace?).
● Seguridad que esos preciados testeos
  efectivamente se estén corriendo.
● No dependemos de nuestra
  memoria/ganas/disciplina.
Jenkins CI
          (el server de integracion continua)




● Empezamos a usar Jenkins en Dic 11'.
● Buildeó nuestra webapp ~600 veces
  (testeos Python).
● Detectó 117 que fallaron.
Jenkins CI - Resultados
Jenkins CI - Resultados
Jenkins CI - Tips

● Tests corren contra cualquier push a:
  ○ Nuestros forks.
  ○ Pull requests pre-mergeados.
  ○ Merges al master.
● Usar el "GitHub Pull Request Builder".
● Clave enterarse rápido, por lo que hay un
  ping via email/IRC ni bien falla el build.
GitHub Pull Request Builder
Ping via IRC
Jenkins - Plugins
Jenkins & Testing - Futuro

● Mejorar cobertura de testeos JS y la
  frecuencia con la que los corremos.
● Selenium Tests:
  ○ Optimizar su performance.
  ○ Armar casos más complejos.
  ○ Correrlos :)
Testeos Unitarios/Funcionales
Un Server de Integración Continua
R
B
O
Testeos Unitarios/Funcionales
Un Server de Integración Continua
Real Error Reporting
B
O
Real error reporting
Situación:
● Pusheamos codigo y pasa los tests.
● Deployeamos a prod y al rato los servers se
   van a la goma.
● Nos sorprendemos, ya que todo parecia
   andar bien...
Real error reporting
● No todos los errores uno son detectables
  antes de prod:
  ○ No tengo suficiente cobertura de testeos.
  ○ "Parecería" andar bien, pero no lo probamos con
      carga real.
   ○ Jamás me imaginé que los usuarios podrían hacer
      eso!

  Resulta vital tener algún tipo de sistema que
      ayude a detectar errores en prod.
Real error reporting
● Usamos
● Mucha introspeccion a nuestro backend.
● Lo más jugoso (y aplicable acá) es:
  ○ Exceptions en tiempo real.
  ○ Response time del backend en tiempo real,
     con transacciones más lentas, etc.
New Relic - Tips
● Tenerle un ojo encima sobretodo post-
  deploy.
  ○ App Server overview.
  ○ Errors.
● Usar notifications para error-rate thresholds.
● Capacity Analysis (feature +o- nuevo). Nos
  hubiera servido para solucionar downtimes.
En sintesis




    =
Real error detection - Futuro
● Detectamos fenómeno los errores de
  backend... pero, qué pasa con los de
  frontend?
● Estamos en proceso de tacklear ese
  problema...
Testeos Unitarios/Funcionales
Un Server de Integración Continua
Real Error Reporting
B
O
Testeos Unitarios/Funcionales
Un Server de Integración Continua
Real Error Reporting
Bocha de Deploys
O
Bocha de deploys
Para poder tener una bocha de deploys
se necesitan dos cosas:
 a. Un proceso de deploy trivial.
 b. Trabajar en batches bien chiquitos.
Proceso de deploy
● Nuestro proceso de deploy empezó a
  hacerse más engorroso.
● Realmente molesto y time-consuming.
  Tendíamos a evitar deployear.
● Mucho tiempo desde implementacion hasta
  deployment. Bugfixes rápidos eran
  impensados.
Proceso de deploy
● Dónde estaba la complejidad y molestia?
  ○ Armar un tag, con el release, viendo cuál es el
    número que corresponde asignarle.
  ○ Armar el changelog a mano, mirando los commits
    que entran desde el último release.
  ○ Pedido de credenciales.
  ○ Sacar nodos de un load balancer a mano.
  ○ Tener que repetir el proceso para varios servers.

          De 20' de sufrimiento
            a 30'' de placer!
Proceso de deploy
Proceso de deploy - Tips
● Tiene que ser trivial deployear a producción.
  En lo posible un "botón" que haga todo.
● El changelog es "crowsourceado".
● Para los curiosos, usamos más que nada
  Fabric, una Python lib.
Batches pequeños
Qué problemas tuvimos nosotros?
  ○ Hay upside que no se captura.
  ○ Mucho mas jodido de hacer code-review.
  ○ Mucha mas probabilidad de mandarse una
    "cagadona".
Batches pequeños - Tips

● Es más bien un tema de paradigma y
  disciplina.
● Armar los proyectos/tareas en pequeños
  pedazitos, que pueden ser deployeados fácil
  e independientemente.
● Esforzarse para que las cosas no se
  acumulen y se deployeen rapido.
Testeos Unitarios/Funcionales
Un Server de Integración Continua
Real Error Reporting
Bocha de Deploys
O
Testeos Unitarios/Funcionales
Un Server de Integración Continua
Real Error Reporting
Bocha de deploys
Outsourcing a Servicios
Outsourcing a Servicios
● Outsourcear todo lo que no sea core (a otros
  servicios).
● Si se puede pagar y cumple los mínimos
  requerimientos, vale la pena probarlo.
● Usarlo hasta que quede chico.
● Todo lo outsourceado es más espacio y
  recursos para nuestra especialidad.
Outsourcing a Servicios
● Nos lo tomamos bastante en serio.
● Ejemplos que usamos:
  ○   Trello (Project Management).
  ○   Flowdock (IRC).
  ○   GitHub.
  ○   Searchify (fulltext search, IndexTank compat).
  ○   Sauce Labs (frontend testing, Selenium).
  ○   New Relic.
  ○   Linode/AWS.
  ○   ... y siempre estamos en la búsqueda de más.
Outsourcing a Servicios - Tips
● Estar siempre en la búsqueda de
  oportunidades.
● Recordar que es una excelente forma de
  acercarse a especialistas que conocen las
  best practices.
● Sin embargo, no siempre funciona...
HABEMUS TURBO
Pero... cómo empiezo?
Propuesta: Shippear todos los días
De qué se trata?
Hacer un deploy a producción al menos una
vez por día.

Por qué?
● Fuerza a que todas las piezas estén en su
  lugar.
● Se tiene feedback rápido con data real.
● Motivación para todos los involucrados.
Gracias!
Martin Siniawski
martin@streema.com
@msinia

More Related Content

What's hot

Acelerando la cultura DevOps mediante Entrega Continua
Acelerando la cultura DevOps mediante Entrega ContinuaAcelerando la cultura DevOps mediante Entrega Continua
Acelerando la cultura DevOps mediante Entrega ContinuaEduardo Ferro Aldama
 
Bilbostack 2020 - El camino de l a entrega en DevOps
Bilbostack 2020 - El camino de l a entrega en DevOpsBilbostack 2020 - El camino de l a entrega en DevOps
Bilbostack 2020 - El camino de l a entrega en DevOpsLuis Fraile
 
SecDevOps - La seguridad en el desarrollo
SecDevOps - La seguridad en el desarrolloSecDevOps - La seguridad en el desarrollo
SecDevOps - La seguridad en el desarrolloGlobe Testing
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilagilenavarra
 
DotNet 2019 | Alberto Varela - Infraestructura como código en Azure
DotNet 2019 | Alberto Varela - Infraestructura como código en AzureDotNet 2019 | Alberto Varela - Infraestructura como código en Azure
DotNet 2019 | Alberto Varela - Infraestructura como código en AzurePlain Concepts
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true historyidealistacreamcode
 
ALM Sessions 2012 - Entrega Continua con VS ALM y TFS
ALM Sessions 2012 - Entrega Continua con VS ALM y TFSALM Sessions 2012 - Entrega Continua con VS ALM y TFS
ALM Sessions 2012 - Entrega Continua con VS ALM y TFSJose Luis Soria
 
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)233 Grados de TI
 
Meetup: Sesion #1 Unit Testing & Simian Army
Meetup: Sesion #1 Unit Testing & Simian ArmyMeetup: Sesion #1 Unit Testing & Simian Army
Meetup: Sesion #1 Unit Testing & Simian ArmyOsvaldo Mercado Coss
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
 
Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)Gustavo Veliz
 
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...Argentesting
 

What's hot (20)

Testing, tipos y otros flamewars
Testing, tipos y otros flamewarsTesting, tipos y otros flamewars
Testing, tipos y otros flamewars
 
Acelerando la cultura DevOps mediante Entrega Continua
Acelerando la cultura DevOps mediante Entrega ContinuaAcelerando la cultura DevOps mediante Entrega Continua
Acelerando la cultura DevOps mediante Entrega Continua
 
TDD Code Retreat
TDD Code RetreatTDD Code Retreat
TDD Code Retreat
 
Bilbostack 2020 - El camino de l a entrega en DevOps
Bilbostack 2020 - El camino de l a entrega en DevOpsBilbostack 2020 - El camino de l a entrega en DevOps
Bilbostack 2020 - El camino de l a entrega en DevOps
 
SecDevOps - La seguridad en el desarrollo
SecDevOps - La seguridad en el desarrolloSecDevOps - La seguridad en el desarrollo
SecDevOps - La seguridad en el desarrollo
 
Automatizacion de Pruebas
Automatizacion de PruebasAutomatizacion de Pruebas
Automatizacion de Pruebas
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
DotNet 2019 | Alberto Varela - Infraestructura como código en Azure
DotNet 2019 | Alberto Varela - Infraestructura como código en AzureDotNet 2019 | Alberto Varela - Infraestructura como código en Azure
DotNet 2019 | Alberto Varela - Infraestructura como código en Azure
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true history
 
ALM Sessions 2012 - Entrega Continua con VS ALM y TFS
ALM Sessions 2012 - Entrega Continua con VS ALM y TFSALM Sessions 2012 - Entrega Continua con VS ALM y TFS
ALM Sessions 2012 - Entrega Continua con VS ALM y TFS
 
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
TDD for Noobs - Santiago Devops
TDD for Noobs - Santiago DevopsTDD for Noobs - Santiago Devops
TDD for Noobs - Santiago Devops
 
Meetup: Sesion #1 Unit Testing & Simian Army
Meetup: Sesion #1 Unit Testing & Simian ArmyMeetup: Sesion #1 Unit Testing & Simian Army
Meetup: Sesion #1 Unit Testing & Simian Army
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)
 
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...
 

Similar to Ponele el TURBO al Dev Team de tu Startup

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simplepsluaces
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfFederico Toledo
 
Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)Israel Antezana Rojas
 
Tech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerTech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerSantex Group
 
Argentesting 2017 - The evolving role of QA
Argentesting 2017 - The evolving role of QAArgentesting 2017 - The evolving role of QA
Argentesting 2017 - The evolving role of QAArgentesting
 
Observabilidad: Todo lo que hay que ver
Observabilidad: Todo lo que hay que verObservabilidad: Todo lo que hay que ver
Observabilidad: Todo lo que hay que verSoftware Guru
 
Ser ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remotoSer ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remotoAgile Spain
 
Ser Ágil en España: Un caso real con equipos de trabajo en remoto
Ser Ágil en España: Un caso real con equipos de  trabajo en remotoSer Ágil en España: Un caso real con equipos de  trabajo en remoto
Ser Ágil en España: Un caso real con equipos de trabajo en remotoEnrique Amodeo
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010Carlos Ble
 
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...Federico Toledo
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberSoftware Guru
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilJohnny Ordóñez
 
Desarrollo de Software por www.jasoftsolutions.com
Desarrollo de Software por www.jasoftsolutions.comDesarrollo de Software por www.jasoftsolutions.com
Desarrollo de Software por www.jasoftsolutions.comJosé Luis Lee Rázuri
 

Similar to Ponele el TURBO al Dev Team de tu Startup (20)

Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
 
Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)
 
Tech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerTech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttler
 
Scrum à la Pablo (Español)
Scrum à la Pablo (Español)Scrum à la Pablo (Español)
Scrum à la Pablo (Español)
 
Argentesting 2017 - The evolving role of QA
Argentesting 2017 - The evolving role of QAArgentesting 2017 - The evolving role of QA
Argentesting 2017 - The evolving role of QA
 
Observabilidad: Todo lo que hay que ver
Observabilidad: Todo lo que hay que verObservabilidad: Todo lo que hay que ver
Observabilidad: Todo lo que hay que ver
 
Ser ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remotoSer ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remoto
 
Ser Ágil en España: Un caso real con equipos de trabajo en remoto
Ser Ágil en España: Un caso real con equipos de  trabajo en remotoSer Ágil en España: Un caso real con equipos de  trabajo en remoto
Ser Ágil en España: Un caso real con equipos de trabajo en remoto
 
Agile at Work
Agile at WorkAgile at Work
Agile at Work
 
Scrum y craftsmanship
Scrum y craftsmanshipScrum y craftsmanship
Scrum y craftsmanship
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010
 
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
 
Scrum
ScrumScrum
Scrum
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágil
 
Desarrollo de Software por www.jasoftsolutions.com
Desarrollo de Software por www.jasoftsolutions.comDesarrollo de Software por www.jasoftsolutions.com
Desarrollo de Software por www.jasoftsolutions.com
 

Ponele el TURBO al Dev Team de tu Startup

  • 1. Ponele el TURBO al Dev Team de tu Startup Martin Siniawski Co-founder & CTO de Streema @msinia
  • 2. - Red social para oyentes radios. - +50,000 radios de todo el mundo.
  • 3. - Empezamos hace 5 años y 1/2.
  • 4. Nuestros dulces primeros años (3 y 1/2) Streema Team
  • 5. - Empezamos hace 5 años y 1/2. - En los últimos años las cosas cambiaron! Streema Team (ultimo tiempo)
  • 6. De qué vamos a hablar hoy? Técnicas y herramientas que nos permiten ejecutar muy rápido y manejar un sitio de mucho tráfico, siendo un equipo muy chico.
  • 7. De qué vamos a hablar hoy? ● Por qué empezamos esta búsqueda? ● La pregunta del millón: Cómo ponerle el TURBO a tu equipo? ● Espacio para compartir otras experiencias, ideas, dudas, etc.
  • 8. Por qué emprendimos esta búsqueda? Teníamos dos sentimientos... - "Dos pasos hacia delante y uno para atrás". - "Tenemos que avanzar más rápido, y parece que todavia hay margen para hacerlo".
  • 9.
  • 10. (Antes) - Downtimes frecuentes sin entender causas. - Arreglamos/implementamos algo, pero rompemos otra cosa. - Deploys cada mucho tiempo. Podían llegar a pasar semanas sin deployear. - Errores durante mucho tiempo en producción (salvo que sean muy graves :))
  • 11. (Hoy) - Prácticamente no tenemos downtimes propios. - La mayoría de los errores nunca llega a prod. - Si llegan, nos damos cuenta casi instantáneamente. - Deployeamos varias veces por día.
  • 12. (Hoy)
  • 13. (Hoy)
  • 14. (Hoy)
  • 15. De acuerdo a nuestra experiencia... Hay pequeños mecanismos que hacen una gran diferencia en la velocidad y calidad de los resultados que uno puede obtener
  • 16. Lo mejor de todo... Son cosas relativamente fáciles de implementar una vez que uno ya las conoce Y eso vamos a compartir ahora...
  • 17. La pregunta del millón: Cómo ponerle el TURBO a tu equipo?
  • 20. Testeos unitarios/funcionales ● Nos costó entender su beneficio hasta implementarlos. ● No hacemos TDD, intentamos que la cobertura no baje. ● La mayoría es de backend (Python), algo de JS y Selenium.
  • 21. Testeos unitarios/funcionales - Tips Podemos estar todo el dia hablando de testeos. En nuestra experiencia hay dos cosas que son vitales...
  • 23. Que corran TODOS! ● Tuvimos testeos que no estaban siendo corridos. ● Los organizamos distinto a lo que nuestro test runner (nose) espera. ● Armamos una clase especial que hace la deteccion (un test selector).
  • 25. Que corran rápido! Por qué? - Si no se corren rápidos es un freno para que alguien los corra. - Hay que enterarse rápido si algo se rompió, el context switch mata! El número fetiche es 1'. Difícil.
  • 26. Que corran rápido! ● Nosotros tackleamos el problema de la velocidad a principio de año. ● El mayor problema se debía - y se debe - a los fixtures. ○ Refactoreamos testeos para que no los usen. ○ Implementamos fixture bundling.
  • 28. Testeos unitarios/funcionales - Tips 1. Por favor no usen fixtures. 2. Si realmente no hay tiempo, hacer tests más funcionales. 3. Cuando aparece un bug que los testeos no agarran, intentar armar un test que lo haga. 4. Usar Selenium para hacer testeos funcionales de los JS.
  • 30. Testeos Unitarios/Funcionales Un Server de Integración Continua R B O
  • 31. Jenkins CI (el server de integracion continua) ● Realmente es muy fácil de tenerlo andando (en un 1 dia de hace?). ● Seguridad que esos preciados testeos efectivamente se estén corriendo. ● No dependemos de nuestra memoria/ganas/disciplina.
  • 32. Jenkins CI (el server de integracion continua) ● Empezamos a usar Jenkins en Dic 11'. ● Buildeó nuestra webapp ~600 veces (testeos Python). ● Detectó 117 que fallaron.
  • 33. Jenkins CI - Resultados
  • 34. Jenkins CI - Resultados
  • 35. Jenkins CI - Tips ● Tests corren contra cualquier push a: ○ Nuestros forks. ○ Pull requests pre-mergeados. ○ Merges al master. ● Usar el "GitHub Pull Request Builder". ● Clave enterarse rápido, por lo que hay un ping via email/IRC ni bien falla el build.
  • 39. Jenkins & Testing - Futuro ● Mejorar cobertura de testeos JS y la frecuencia con la que los corremos. ● Selenium Tests: ○ Optimizar su performance. ○ Armar casos más complejos. ○ Correrlos :)
  • 40. Testeos Unitarios/Funcionales Un Server de Integración Continua R B O
  • 41. Testeos Unitarios/Funcionales Un Server de Integración Continua Real Error Reporting B O
  • 42. Real error reporting Situación: ● Pusheamos codigo y pasa los tests. ● Deployeamos a prod y al rato los servers se van a la goma. ● Nos sorprendemos, ya que todo parecia andar bien...
  • 43.
  • 44. Real error reporting ● No todos los errores uno son detectables antes de prod: ○ No tengo suficiente cobertura de testeos. ○ "Parecería" andar bien, pero no lo probamos con carga real. ○ Jamás me imaginé que los usuarios podrían hacer eso! Resulta vital tener algún tipo de sistema que ayude a detectar errores en prod.
  • 45. Real error reporting ● Usamos ● Mucha introspeccion a nuestro backend. ● Lo más jugoso (y aplicable acá) es: ○ Exceptions en tiempo real. ○ Response time del backend en tiempo real, con transacciones más lentas, etc.
  • 46.
  • 47.
  • 48. New Relic - Tips ● Tenerle un ojo encima sobretodo post- deploy. ○ App Server overview. ○ Errors. ● Usar notifications para error-rate thresholds. ● Capacity Analysis (feature +o- nuevo). Nos hubiera servido para solucionar downtimes.
  • 50. Real error detection - Futuro ● Detectamos fenómeno los errores de backend... pero, qué pasa con los de frontend? ● Estamos en proceso de tacklear ese problema...
  • 51. Testeos Unitarios/Funcionales Un Server de Integración Continua Real Error Reporting B O
  • 52. Testeos Unitarios/Funcionales Un Server de Integración Continua Real Error Reporting Bocha de Deploys O
  • 53. Bocha de deploys Para poder tener una bocha de deploys se necesitan dos cosas: a. Un proceso de deploy trivial. b. Trabajar en batches bien chiquitos.
  • 54. Proceso de deploy ● Nuestro proceso de deploy empezó a hacerse más engorroso. ● Realmente molesto y time-consuming. Tendíamos a evitar deployear. ● Mucho tiempo desde implementacion hasta deployment. Bugfixes rápidos eran impensados.
  • 55. Proceso de deploy ● Dónde estaba la complejidad y molestia? ○ Armar un tag, con el release, viendo cuál es el número que corresponde asignarle. ○ Armar el changelog a mano, mirando los commits que entran desde el último release. ○ Pedido de credenciales. ○ Sacar nodos de un load balancer a mano. ○ Tener que repetir el proceso para varios servers. De 20' de sufrimiento a 30'' de placer!
  • 57. Proceso de deploy - Tips ● Tiene que ser trivial deployear a producción. En lo posible un "botón" que haga todo. ● El changelog es "crowsourceado". ● Para los curiosos, usamos más que nada Fabric, una Python lib.
  • 58.
  • 59. Batches pequeños Qué problemas tuvimos nosotros? ○ Hay upside que no se captura. ○ Mucho mas jodido de hacer code-review. ○ Mucha mas probabilidad de mandarse una "cagadona".
  • 60. Batches pequeños - Tips ● Es más bien un tema de paradigma y disciplina. ● Armar los proyectos/tareas en pequeños pedazitos, que pueden ser deployeados fácil e independientemente. ● Esforzarse para que las cosas no se acumulen y se deployeen rapido.
  • 61. Testeos Unitarios/Funcionales Un Server de Integración Continua Real Error Reporting Bocha de Deploys O
  • 62. Testeos Unitarios/Funcionales Un Server de Integración Continua Real Error Reporting Bocha de deploys Outsourcing a Servicios
  • 63. Outsourcing a Servicios ● Outsourcear todo lo que no sea core (a otros servicios). ● Si se puede pagar y cumple los mínimos requerimientos, vale la pena probarlo. ● Usarlo hasta que quede chico. ● Todo lo outsourceado es más espacio y recursos para nuestra especialidad.
  • 64. Outsourcing a Servicios ● Nos lo tomamos bastante en serio. ● Ejemplos que usamos: ○ Trello (Project Management). ○ Flowdock (IRC). ○ GitHub. ○ Searchify (fulltext search, IndexTank compat). ○ Sauce Labs (frontend testing, Selenium). ○ New Relic. ○ Linode/AWS. ○ ... y siempre estamos en la búsqueda de más.
  • 65. Outsourcing a Servicios - Tips ● Estar siempre en la búsqueda de oportunidades. ● Recordar que es una excelente forma de acercarse a especialistas que conocen las best practices. ● Sin embargo, no siempre funciona...
  • 68. Propuesta: Shippear todos los días De qué se trata? Hacer un deploy a producción al menos una vez por día. Por qué? ● Fuerza a que todas las piezas estén en su lugar. ● Se tiene feedback rápido con data real. ● Motivación para todos los involucrados.