Ir al contenido

Blog


Los 4 principios que DoorDash utilizó para aumentar un 1000% su capacidad de experimentación logística

21 de septiembre de 2021

|

Sifeng Lin

En nuestro sistema logístico de reparto en tiempo real, el entorno, el comportamiento de los Dashers (nuestro término para los conductores de reparto) y la demanda de los consumidores son muy volátiles. Dado que pequeños cambios en el proceso de toma de decisiones para asignar las entregas a los Dashers pueden provocar una cascada de decisiones de asignación diferentes, es difícil determinar el resultado esperado de cualquier iteración del algoritmo o cambio de producto. Todo esto hace que sea difícil determinar el impacto de cualquier cambio a través de dimensionamiento o análisis fuera de línea. En el equipo de Asignación de DoorDash, adoptamos un marco basado en experimentos para determinar el resultado de cualquier cambio con precisión científica y ejecutar este análisis a escala. 

Figura 1: Al mejorar nuestra plataforma de experimentación, nuestro equipo ha aumentado el número de experimentos a más de 100 al mes. 

Dado que la experimentación impulsa el desarrollo de nuestros productos, aumentar la velocidad de experimentación es fundamental para mantener el crecimiento de nuestro negocio. El equipo de Asignación ha conseguido aumentar el volumen de experimentación en más de un 1000% en los últimos tres años (Figura 1). En el momento de escribir estas líneas, realizamos unos mil experimentos al año, incluidos 30 experimentos de conmutación simultánea en , que suponen 200.000 QPS de evaluaciones de cubos. Hablaremos de los retos a los que nos enfrentamos inicialmente y de las características del sistema que construimos para escalar nuestros experimentos.

Los retos de la experimentación a gran escala

Detrás del hipercrecimiento de la experimentación en rampa, hemos superado diversos retos y hemos introducido mejoras con el tiempo. Entre los retos a los que nos enfrentamos figuran: 

Aversión al fracaso

En la ciencia de datos, un campo con muchos individuos de alto rendimiento, existe una aversión al fracaso. Un equipo que no celebra el fracaso y las lecciones aprendidas de él probablemente será menos productivo. En DoorDash, aceptamos el fracaso, ya que el 95% de los experimentos están destinados a fracasar inicialmente. Por lo tanto, necesitábamos construir una cultura que aceptara el fracaso para poder aprender de los errores y mejorar en cada iteración. 

Falta de un proceso de toma de decisiones eficaz

Los equipos grandes dificultan el proceso de revisión de experimentos a gran escala. En DoorDash, necesitábamos una forma de gestionar más de 25 experimentos semanales durante reuniones breves con muchas partes interesadas. 

Crear metodologías experimentales eficaces es complejo

Los experimentos con fuertes efectos de red son difíciles de analizar y configurar. Debido a que los experimentos podrían afectar al comportamiento de Dasher y a la baja sensibilidad de los experimentos de conmutación, necesitábamos métodos estadísticos y un diseño de experimentación que nos permitiera realizar muchos experimentos simultáneos, medir los efectos de red y utilizar la reducción de la varianza para acelerar los experimentos...".

 El análisis ad hoc no es escalable

Antes de la creación de la plataforma, los propietarios de los experimentos utilizaban cuadernos SQL, Python y R para el análisis de los experimentos, que eran propensos a errores humanos y cuya creación requería mucho tiempo. Necesitábamos una plataforma de experimentación que nos permitiera automatizar el proceso de creación de un nuevo experimento. Esto no sólo nos ayudaría a estandarizar los resultados de nuestros experimentos, sino que también agilizaría enormemente el análisis de los datos experimentales.

Manténgase informado con las actualizaciones semanales

Suscríbase a nuestro blog de ingeniería para recibir actualizaciones periódicas sobre los proyectos más interesantes en los que trabaja nuestro equipo.

Cómo ampliamos nuestra experimentación en un 1000

Para ampliar la capacidad de nuestro experimento, nos centramos en crear un enfoque con los cuatro atributos siguientes: 

  • Trabajar con una cultura de fracasar rápido para aprender rápido 
  • Crear un proceso de experimentación escalable 
  • Utilización de métodos estadísticos óptimos
  • Creación de una plataforma y herramientas de experimentación personalizables y automatizadas

Repasemos cada uno de los pilares para ilustrar cómo se han unido para aumentar nuestra capacidad de experimentación.

Desarrollar una cultura de fracasar rápido para aprender rápido

At the heart of implementing effective experimentation is building a culture that has the right mindset for success. Often experimentation is bogged down by members trying to use experiments to validate their point of view rather than using the data to help them better understand the problem space. To build this culture, we emphasized the following values to ensure our team focuses on what's most important when running experiments: 

  • Fracasar rápido y aprender rápido
  • Operar al más bajo nivel de detalle 
  • Tener honestidad intelectual y humildad

Fracasar rápido para aprender rápido

Para facilitar un aprendizaje rápido, debemos aceptar que el fracaso es habitual. Como equipo, debemos aceptar y esperar el fracaso, con dos condiciones: 

  • Siempre debemos intentar fracasar rápido 
  • Debemos probar y fracasar hacia adelante, y aprender de cada fracaso para que cada hipótesis experimental sea mejor que la anterior

Al adoptar estas condiciones, nuestro objetivo es obtener una señal lo más rápido posible y apagar los experimentos en cuanto recojamos datos suficientes para concluir qué ha ocurrido y ejecutar los siguientes pasos. Al permitirnos fracasar más rápido podemos aprender más rápido y reducir el tiempo que tardamos en obtener resultados más impactantes.

Comprender el espacio del problema al más bajo nivel de detalle

En DoorDash, la aportación más importante al desarrollo de nuestros productos es una mejor comprensión de nuestros problemas. Cada día tratamos de entender mejor los millones de entregas que se realizan al día, las diferencias significativas entre tipos de entrega o regiones y las áreas en las que la logística de DoorDash se queda corta.

La experimentación nos permite hacer todo esto. Cuando queremos aprender algo, formulamos una hipótesis, la probamos y luego analizamos en qué nos equivocamos y en qué acertamos. La mayoría de los experimentos no consiguen mejorar nuestro motor de despacho, pero todos ellos se basan en nuestra comprensión detallada de nuestro sistema. Cualquier mejora de nuestro enfoque de experimentación mejora nuestra comprensión de cómo funciona la logística.

Fomentar Honestidad intelectual y humildad

Aprender rápidamente a través de la experimentación puede ser una experiencia humillante: una buena semana suele revelar que nuestro equipo estaba completamente equivocado sobre una serie de suposiciones del pasado. No es raro que un nuevo experimento invalide un mensaje que compartíamos externamente sólo una semana antes. Debido a la naturaleza de nuestro trabajo, los supuestos cambian constantemente, lo que deja poco margen para el perfeccionismo o el miedo al fracaso.

Los que llevamos tiempo trabajando en el equipo de Asignación nos hemos acostumbrado a esto: hoy por hoy, nos equivocamos en muchas cosas, sólo que aún no sabemos cuáles son. En nuestro proceso de experimentación, es importante poder dejar de lado las suposiciones. Cuando los datos nos dicen algo contrario a lo que pensábamos, les damos una lectura honesta y cambiamos de perspectiva en consecuencia.

Crear un proceso de experimentación escalable

Nuestro proceso de experimentación se ha ampliado enormemente en los últimos tres años. En 2018, realizábamos unos diez experimentos en un mes normal. En junio de 2021, realizamos más de 100. Para garantizar que estos experimentos sean fiables a nuestra rápida velocidad, el equipo multifuncional de Asignación ha estado iterando y optimizando el proceso de lanzamiento y revisión de experimentos a lo largo del tiempo y ha incorporado mejoras como: 

  • Métricas de experimentación normalizadas 
  • Un sistema de dos filtros 
  • Cadencia semanal de experimentos 

Estandarizar por adelantado las métricas de los experimentos y los criterios de envío

Unas métricas bien definidas y unos criterios de envío estandarizados son fundamentales para llevar a cabo un proceso de alta velocidad. Tenemos tres categorías de estas métricas: objetivos, guardarraíles y métricas de diagnóstico.  

  • Las métricas de los objetivos son la estrella polar que el equipo se esfuerza por mejorar semana tras semana (en concreto, el equipo de Asignación se fija en el tiempo activo de Dasher por entrega y en los tiempos de duración de las entregas).
  • Las métricas de vigilancia son métricas que no tratamos de mejorar activamente, sino que queremos asegurarnos de que no se degradan.
  • Las métricas de diagnóstico son métricas de entrada que ayudan a cada propietario del experimento a interpretar los cambios de comportamiento del sistema para iterar sus experimentos. Por ejemplo, la duración de la entrega puede desglosarse en componentes más pequeños (por ejemplo, el tiempo de viaje de los Dashers hasta la tienda y el tiempo de espera en la tienda) para ayudar al diagnóstico y la investigación del experimento.

Cada tipo de métrica se calcula mediante un sistema centralizado de análisis de la experimentación y puede compararse y priorizarse.  

Para lanzar un experimento necesitamos definir nuestras métricas Goal y Guardrail. Estas métricas nos permiten medir nuestros experimentos en función de las prioridades empresariales, y nuestras métricas de éxito se mantienen lo más estables posible (sólo cambian cuando ajustamos nuestras hojas de ruta de productos o prioridades empresariales). Las métricas estandarizadas permiten a los propietarios de los experimentos tomar decisiones de forma más rápida e independiente, lo que acelera el proceso de experimentación. 

Utilización de un sistema de dos filtros para optimizar muestras de tamaño limitado

Los experimentos Switchback, los más comunes en nuestro equipo, tienen una potencia relativamente baja, lo que significa que hay una mayor probabilidad de que nuestra nueva característica parezca no tener ningún impacto cuando en realidad sí lo tuvo (esencialmente tenemos más probabilidades de tener un error de tipo II). Para mitigar el factor de baja potencia necesitamos ejecutar el experimento en grandes regiones, lo que significa que necesitamos tanta paralelización de experimentos como sea posible. El uso de la paralelización para ejecutar múltiples experimentos en tándem también permite una mayor velocidad del experimento, ya que podemos ejecutar más al mismo tiempo sin reducir la potencia. Sin embargo, cuando el volumen de experimentos crece demasiado, nos encontramos con que no se puede ignorar la interacción potencial entre experimentos. Como resultado, hemos probado y simulado varias versiones de diseños factoriales que intentan equilibrar estas interacciones y eliminar el sesgo. 

Tras varias iteraciones, renunciamos al modelo de diseños factoriales más complicado y decidimos adoptar un sistema de dos zonas que requiere menos gastos generales de gestión e intervención humana. En este sistema de dos zonas, cada ventana, dividida por región y hora, se clasifica aleatoriamente en la zona 1 o en la zona 2. En ambas, zona 1 y zona 2, tenemos varias capas. Tanto en la zona 1 como en la zona 2, tenemos varias capas, y cada capa puede tener uno o más experimentos. Cada semana, limitamos a tres el número de estratos de la zona 2 para poder medir eficazmente las interacciones entre experimentos con un alto grado de confianza.

Figura 2: Disponer de varias capas nos permite probar los experimentos más importantes con mayor potencia

La zona 1 sirve de filtro preliminar para seleccionar buenos candidatos. Los experimentos que se ejecutan en la zona 1 y cumplen nuestras métricas de éxito pasan a la zona 2 para realizar más pruebas. Los resultados de la zona 2 se utilizan para validar los de la zona 1 y tomar decisiones de envío. Con este segundo filtro no sólo se limitan las interacciones entre los experimentos candidatos a ser enviados, sino que también se evita el envío de experimentos basados en una semana de datos.

Establecer una cadencia semanal de experimentos

Antes de tener una cadencia fija de experimentos, cada propietario de experimentos los lanzaba según su propio calendario. Cuando el número de experimentos aumenta, la sobrecarga de coordinación entre los propietarios de los experimentos, el tiempo dedicado a las revisiones del producto y el riesgo de fiabilidad de la ingeniería también aumentan drásticamente. Una cadencia de experimentos semanal es el centro de nuestro proceso de experimentación y garantiza que la ejecución de los experimentos sea fluida y esté bien organizada. Nuestra cadencia de experimentos facilita una colaboración fluida entre el equipo de ingeniería, el equipo de producto y los propietarios de los experimentos. 

Nuestro proceso de cadencia de experimentos: 

  • A principios de la semana, el responsable del experimento revisa los resultados y toma decisiones sobre los siguientes pasos del experimento basándose en las métricas y los criterios de envío.  
  • A mitad de semana, nuestro jefe de producto organiza una revisión centralizada para coordinar los siguientes pasos de todos los experimentos. Durante la revisión de los experimentos, el equipo revisa los experimentos de la zona 2 que deben enviarse; los experimentos de la zona 1 que deben promocionarse a la zona 2 en la próxima semana; y cualquier nuevo experimento que deba lanzarse. Normalmente, los miembros del equipo interfuncional señalan posibles riesgos (por ejemplo, interacciones entre experimentos) y toman medidas para mitigarlos. 
  • A lo largo de la semana, el equipo de ingeniería implementa los experimentos, los despliega en producción y los activa. Tras el despliegue, el equipo de ingeniería supervisa de cerca los resultados de los experimentos y toma medidas para asegurarse de que las métricas de producción y calidad son saludables.  
  • Una vez lanzados los experimentos, cada propietario de los mismos configurará sus resultados de análisis en nuestra plataforma de análisis de experimentos.

Nuestra cadencia semanal está diseñada para dar a cada propietario del experimento el control total del experimento y la capacidad de iterar rápidamente. El proceso de revisión también puede ayudar a garantizar que el experimento enviado sea coherente con nuestra hoja de ruta del producto.

Figura 3: Cadencia semanal de asignación de experimentos: Todo el proceso requiere una colaboración fluida entre los propietarios de los experimentos, el equipo de producto y el equipo de ingeniería.

En general, nuestro proceso garantiza que: 

  • El equipo de producto es capaz de comunicarse con cada propietario de experimento individual y entender el estado para que puedan realizar un seguimiento de la entrega de las características que poseen.
  • El progreso de los experimentos se comparte más fácilmente dentro del equipo.
  • El despliegue de cada experimento se delega correctamente y no resulta tedioso ni requiere mucho tiempo.
  • Cada propietario de experimento puede ser más disciplinado a la hora de mantener los plazos de los experimentos.
  • El equipo de ingeniería puede supervisar de cerca y mitigar el riesgo del impacto de los experimentos en la fiabilidad del sistema.

Utilización de métodos estadísticos óptimos

Parte de la construcción de una plataforma de experimentación escalable consiste en crear un conjunto de métodos estadísticos fiables que garanticen que los experimentos son precisos y fiables. Dado que tenemos muchos efectos de red, necesitamos crear métodos estadísticos específicos para garantizar que los experimentos de conmutación que realizamos sean eficaces. Tras varias iteraciones, nuestro equipo pudo identificar un conjunto de métodos estadísticos que funcionaban mejor en nuestro entorno de experimentos. Cabe mencionar que nuestra colaboración con académicos de la Universidad de Stanford nos ha aportado muchas ideas, orientación y confianza.

Por qué los experimentos con cambios de dirección son especialmente difíciles de abordar

En el mundo de la asignación, existe un fuerte efecto de red, ya que buscamos emparejar las entregas con los Dashers de una región. En consecuencia, las pruebas A/B tradicionales a nivel de entrega violan la Hipótesis de Valor Unitario de Tratamiento Estable (SUTVA ). Por ejemplo, dar mayor prioridad a las entregas en tratamiento retrasará la asignación de las entregas en control, porque las entregas en tratamiento y control comparten el mismo grupo de Dasher. Para la mayoría de los experimentos, nos basamos en experimentos switchback, que mitigan la violación de SUTVA utilizando combinaciones de región y ventana temporal como unidad de aleatorización, de modo que los grupos de tratamiento y control estarán separados.

Dada la configuración de la experimentación, la unidad de aleatorización (ventana temporal, región) suele ser más gruesa que la unidad de análisis (entrega, lo que significa que nuestras métricas se calculan a nivel de entrega). El análisis puede caer fácilmente en la trampa de no ajustar por el conglomerado, lo que lleva a subestimar el error estándar. Como resultado, la tasa de falsos positivos puede ser de al menos el 70% a partir de nuestras simulaciones. Necesitamos metodologías más sofisticadas para analizar el resultado, como el error típico robusto al conglomerado, el bootstraping o el método Delta.

Optimización de nuestros experimentos de conmutación

Hay dos parámetros en el diseño del experimento switchback, el tamaño de la región y el tamaño de la ventana, y ambos influyen en el sesgo y la potencia del experimento. 

La selección del tamaño de la ventana de switchback es fundamental para determinar el sesgo y la potencia. Si el tamaño de la ventana es demasiado pequeño, podrían producirse fuertes efectos de desbordamiento entre las unidades de control y de tratamiento que sean adyacentes. En el otro extremo, si el tamaño de ventana seleccionado es demasiado amplio, evitaremos el sesgo causado por el efecto indirecto, pero tendremos una potencia o sensibilidad bajas debido al menor número de unidades que reciben el tratamiento. Hemos elegido los tamaños de ventana realizando metaexperimentos para comprender el impacto del tamaño de ventana en la sensibilidad del experimento y el sesgo de los resultados del experimento.

Es un caso similar para la selección del tamaño de la región. Una región más grande evita el desbordamiento entre el control y el tratamiento geográficamente adyacentes y, por lo tanto, tiene un sesgo menor, aunque con menor potencia debido a la menor cantidad de unidades. Un caso extremo de la región más pequeña es utilizar cada tienda individual como región. Realizamos metaexperimentos para validar que el tamaño de la región a nivel de tienda dará lugar a mediciones inexactas. En algunos casos excepcionales, si queremos utilizar el switchback para comprender el impacto de cambiar la configuración de un número limitado de tiendas, utilizamos el switchback de tienda. Porque los experimentos de switchback de región son extremadamente insensibles y creemos que el efecto de red es relativamente pequeño.

Nuestros metaexperimentos nos ayudan a comprender el impacto de utilizar distintos tamaños de ventana y de región y a elegir el tamaño que consigue un buen equilibrio entre la fiabilidad del experimento y la velocidad.

Figura 2: Diferentes tamaños de ventana en nuestros experimentos de switchback (eje x) pueden producir diferentes valores métricos (eje y) para los grupos de tratamiento (azul) y de control (naranja).

Control de la reducción de las desviaciones

La sensibilidad o potencia de un experimento controlado se refiere a su capacidad para detectar diferencias en las métricas de negocio debidas a cambios en el producto. El equipo de Asignación es pionero en la realización de experimentos en DoorDash, donde probamos y simulamos una amplia variedad de métodos para aumentar la potencia, incluidas covariables simples, estratificación, postestratificación y CUPAC

En los experimentos switchback de hoy en día, nos basamos principalmente en uno de los métodos de reducción de la varianza más eficaces y convenientes, CUPAC, que amplía la idea de CUPED y se suele aplicar en experimentos con consumidores. La idea de CUPAC es aprovechar el aprendizaje automático para construir las covariables que tienen una alta correlación con la métrica.

El método CUPAC mejora notablemente la sensibilidad de nuestros experimentos y, por tanto, su velocidad.

Captura de las interacciones entre experimentos  

Dado que en un momento dado tenemos varios experimentos ejecutándose simultáneamente en la misma región, esos experimentos pueden interactuar entre sí y hacer que los resultados de los experimentos sean menos fiables. Nuestro sistema de dos zonas mitiga el problema permitiendo sólo tres experimentos en la zona 2 a la vez. Para mitigar el riesgo de enviar experimentos con mediciones inexactas, creamos un libro de jugadas para las interacciones entre los experimentos de la zona 2. 

En primer lugar, utilizamos métodos estadísticos avanzados para medir el efecto de interacción entre cada par de experimentos. El efecto de interacción nos orienta sobre si los dos experimentos aumentan su impacto mutuo, lo disminuyen o tienen efectos independientes. En nuestro libro de jugadas, definimos claramente los criterios de envío de experimentos y las reglas basadas en la inferencia estadística sobre la interacción de experimentos. Nuestro libro de jugadas para la interacción es esencial para que podamos ejecutar experimentos simultáneos en paralelo sin preocuparnos por la fiabilidad de los resultados de los experimentos.

Creación de una plataforma de experimentación automatizada 

Curie, la plataforma de experimentación de DoorDash, automatiza al máximo el proceso de experimentación. Una vez implementado y desplegado el experimento, tenemos que activarlo, supervisarlo y configurar su análisis en Curie. A medida que crece nuestro volumen de experimentos, es fundamental automatizar y agilizar nuestros procesos de configuración y análisis de experimentos para cualquier tarea que se generalice entre experimentos. Nuestro equipo ha estado trabajando estrechamente con el equipo de la plataforma de experimentación para minimizar los costes incrementales de crear y analizar nuevos experimentos. 

Creación de la infraestructura de experimentación

El equipo de la plataforma de experimentos de DoorDash nos ha proporcionado herramientas para crear infraestructuras de experimentación personalizables....  

  • Hemos creado un sistema de agrupación específico para facilitar la realización de experimentos de conmutación mediante nuestro proceso de dos zonas.  
  • La infraestructura de registro en tiempo real nos permite consultar cubos de experimentos y otros datos en tiempo real. Esto es fundamental para supervisar y depurar nuestros experimentos.
  • La mayoría de los ajustes de los experimentos pueden realizarse con simples cambios de configuración, sin necesidad de desplegar código. Esto facilita la activación, desactivación, aumento y reducción de cualquier experimento. 

Optimización de la infraestructura de análisis experimental

El equipo de la plataforma de experimentación construyó un portal de análisis interno para automatizar el análisis de experimentos con entradas sencillas del usuario. Las herramientas han integrado metodologías punteras que hemos considerado útiles para que el análisis sea escalable y científico. Gracias a esta infraestructura, los propietarios de los experimentos pueden acceder fácilmente y en cualquier momento a resultados fiables sin depender de socios analíticos. Se tarda menos de 5 minutos en añadir un experimento a Curie y, una vez añadido, las métricas del experimento y los valores p se calculan cada día que el experimento está activo.   

Nuestro equipo de análisis ha estandarizado y refinado nuestros cálculos de métricas. Cada experimento realizado por nuestro equipo utiliza un conjunto estandarizado de más de 100 métricas de objetivos, barandillas y diagnósticos. Nuestros equipos de análisis e ingeniería han creado un panel personalizado de resultados de experimentos para que se pueda acceder fácilmente desde un solo lugar a los más de 30 experimentos semanales para comprobar el movimiento diario de las métricas. Esto ha sido esencial para nuestro proceso semanal de revisión de experimentos, en el que tomamos decisiones de envío e iteración para todos los experimentos de asignación en menos de 45 minutos. 

Conclusión

En un mundo impulsado por los datos, ser capaz de ejecutar un número masivo de experimentos con rigor científico y precisión es clave para desbloquear la velocidad de desarrollo rápido. En DoorDash pudimos conseguirlo gracias a los cuatro pilares de nuestra plataforma: una cultura orientada al fracaso, un proceso de experimentación escalable, métodos estadísticos rigurosos y la automatización de nuestra plataforma de experimentación. Aunque muchas de estas acciones abordan las necesidades específicas del equipo de Asignación, pueden ser utilizadas por muchos equipos que sufren retos similares a los que trabajamos para superar. 

Agradecimientos

Gracias a todos los miembros del equipo interfuncional de Asignación por el apoyo prestado para construir el marco y desarrollar la cultura a lo largo de los años. Gracias a Caixia Huang, Richard Hwang, Longsheng Sun, Jared Bauman, Carla Sneider, Arun Kumar Balasubramani, Yihan Tan, Alex Weinstein, Chi Zhang, Darby Schumacher y Colin Schoppert por sus contribuciones. 

Un agradecimiento especial al profesor Navdeep S. Sahni por su orientación y asesoramiento en el desarrollo del marco y la experimentación científica en DoorDash.

Gracias también a Colin Schoppert y Darby Schumacher por sus consejos y ayuda en la organización, perfeccionamiento y edición del blogpost. 

Sobre los autores 

Sifeng Lin trabaja como científico de investigación de operaciones en el equipo de asignación de ingeniería de Doordash. Dirige el diseño y mantenimiento de la infraestructura de experimentación en el equipo de asignación. También trabaja con el equipo de la plataforma de experimentación para desarrollar y mejorar la metodología de análisis de experimentos en el equipo de asignación.

Yixin Tang es ingeniero de software en el equipo de la Plataforma de Experimentación de DoorDash. Es responsable del desarrollo y mantenimiento de la plataforma. También dirige el grupo de trabajo de metodología en colaboración con el profesor Sahni.

Sobre el autor

  • Sifeng Lin

Trabajos relacionados

Ubicación
San Francisco, CA; Sunnyvale, CA; Los Angeles, CA; Seattle, WA
Departamento
Ingeniería
Ubicación
San Francisco, CA; Tempe, AZ
Departamento
Ingeniería
Ubicación
Seattle, WA; San Francisco, CA; Sunnyvale, CA
Departamento
Ingeniería
Ubicación
Los Angeles, CA; New York, NY; San Francisco, CA; Seattle, WA; Sunnyvale, CA
Departamento
Ingeniería
Ubicación
Sunnyvale, CA; San Francisco, CA; Seattle, WA; New York, NY; Los Angeles; CA
Departamento
Ingeniería