Ponele el TURBO al Dev Team de tu Startup
-
Upload
martin-siniawski -
Category
Documents
-
view
525 -
download
0
Transcript of Ponele el TURBO al Dev Team de tu Startup
![Page 1: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/1.jpg)
Ponele el TURBO al Dev Team de tu Startup
Martin SiniawskiCo-founder & CTO de Streema@msinia
![Page 2: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/2.jpg)
- Red social para oyentes radios.- +50,000 radios de todo el mundo.
![Page 3: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/3.jpg)
- Empezamos hace 5 años y 1/2.
![Page 4: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/4.jpg)
Nuestros dulces primeros años (3 y 1/2)
Streema Team
![Page 5: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/5.jpg)
- Empezamos hace 5 años y 1/2.- En los últimos años las cosas cambiaron!
Streema Team (ultimo tiempo)
![Page 6: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/6.jpg)
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.
![Page 7: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/7.jpg)
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.
![Page 8: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/8.jpg)
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".
![Page 9: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/9.jpg)
![Page 10: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/10.jpg)
(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 :))
![Page 11: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/11.jpg)
(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.
![Page 12: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/12.jpg)
(Hoy)
![Page 13: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/13.jpg)
(Hoy)
![Page 14: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/14.jpg)
(Hoy)
![Page 15: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/15.jpg)
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
![Page 16: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/16.jpg)
Son cosas relativamente fáciles de implementar una vez que uno ya las
conoce
Y eso vamos a compartir ahora...
Lo mejor de todo...
![Page 17: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/17.jpg)
TURBOCómo ponerle el
a tu equipo?
La pregunta del millón:
![Page 18: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/18.jpg)
URBO
T
![Page 19: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/19.jpg)
URBO
Testeos Unitarios/Funcionales
![Page 20: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/20.jpg)
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.
![Page 21: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/21.jpg)
Testeos unitarios/funcionales - Tips
Podemos estar todo el dia hablando de testeos. En nuestra experiencia hay
dos cosas que son vitales...
![Page 22: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/22.jpg)
Que corran TODOS!
![Page 23: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/23.jpg)
● 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 TODOS!
![Page 24: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/24.jpg)
Que corran rápido!
![Page 25: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/25.jpg)
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!
![Page 26: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/26.jpg)
● 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!
![Page 27: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/27.jpg)
Que corran rápido!
![Page 28: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/28.jpg)
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.
![Page 29: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/29.jpg)
URBO
Testeos Unitarios/Funcionales
![Page 30: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/30.jpg)
Un Server de Integración Continua
RBO
Testeos Unitarios/Funcionales
![Page 31: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/31.jpg)
● 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)
![Page 32: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/32.jpg)
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.
![Page 33: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/33.jpg)
Jenkins CI - Resultados
![Page 34: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/34.jpg)
Jenkins CI - Resultados
![Page 35: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/35.jpg)
● 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.
Jenkins CI - Tips
![Page 36: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/36.jpg)
GitHub Pull Request Builder
![Page 37: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/37.jpg)
Ping via IRC
![Page 38: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/38.jpg)
Jenkins - Plugins
![Page 39: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/39.jpg)
● Mejorar cobertura de testeos JS y la frecuencia con la que los corremos.
● Selenium Tests:○ Optimizar su performance.○ Armar casos más complejos.○ Correrlos :)
Jenkins & Testing - Futuro
![Page 40: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/40.jpg)
Un Server de Integración Continua
RBO
Testeos Unitarios/Funcionales
![Page 41: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/41.jpg)
Un Server de Integración Continua
Real Error Reporting
BO
Testeos Unitarios/Funcionales
![Page 42: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/42.jpg)
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...
![Page 43: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/43.jpg)
![Page 44: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/44.jpg)
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.
![Page 45: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/45.jpg)
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.
![Page 46: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/46.jpg)
![Page 47: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/47.jpg)
![Page 48: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/48.jpg)
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.
![Page 49: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/49.jpg)
En sintesis
=
![Page 50: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/50.jpg)
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...
![Page 51: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/51.jpg)
Un Server de Integración Continua
Real Error Reporting
BO
Testeos Unitarios/Funcionales
![Page 52: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/52.jpg)
Un Server de Integración Continua
Real Error Reporting
Bocha de Deploys
O
Testeos Unitarios/Funcionales
![Page 53: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/53.jpg)
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.
![Page 54: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/54.jpg)
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.
![Page 55: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/55.jpg)
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!
![Page 56: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/56.jpg)
Proceso de deploy
![Page 57: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/57.jpg)
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.
![Page 58: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/58.jpg)
![Page 59: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/59.jpg)
Batches pequeñosQué problemas tuvimos nosotros?
○ Hay upside que no se captura.○ Mucho mas jodido de hacer code-review.○ Mucha mas probabilidad de mandarse una
"cagadona".
![Page 60: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/60.jpg)
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.
![Page 61: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/61.jpg)
Un Server de Integración Continua
Real Error Reporting
Bocha de Deploys
O
Testeos Unitarios/Funcionales
![Page 62: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/62.jpg)
Un Server de Integración Continua
Real Error Reporting
Bocha de deploys
Outsourcing a Servicios
Testeos Unitarios/Funcionales
![Page 63: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/63.jpg)
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.
![Page 64: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/64.jpg)
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.
![Page 65: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/65.jpg)
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...
![Page 66: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/66.jpg)
HABEMUS TURBO
![Page 67: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/67.jpg)
Pero... cómo empiezo?
![Page 68: Ponele el TURBO al Dev Team de tu Startup](https://reader033.fdocument.pub/reader033/viewer/2022060122/5595ac3c1a28ab85678b47f0/html5/thumbnails/68.jpg)
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.