Amazon Ring
No puedes probar una flota de hardware que no tienes. Así que simulamos la flota, y probamos contra dispositivos que todavía no existían.
Stack
- Go
- Emulación de dispositivos IoT
- Streaming de vídeo en tiempo real
- Máquinas de estado
- Simulación de sistemas
- Pruebas automatizadas
Problema
Las pruebas de integración hardware-software están limitadas por el hardware que puedes poner físicamente sobre un escritorio. Las máquinas de estado de configuración de dispositivos, los fallos de conectividad y el comportamiento del streaming en tiempo real son exactamente las rutas que se rompen en campo, y exactamente las rutas tediosas y poco fiables de reproducir con dispositivos reales. Peor aún: los dispositivos que más necesitaban validarse eran los que todavía no existían. Una cámara o un videoportero a meses de tener un prototipo físico, cuya integración con el stack de Ring no se podía ejercitar hasta que alguien pudiera sostenerlo en la mano. Equipos enteros de ingeniería estaban bloqueados por la disponibilidad física.
Enfoque
Construí y evolucioné una plataforma de emulación distribuida para las cámaras y videoporteros de Ring, reproduciendo el comportamiento del hardware, los flujos de aprovisionamiento de dispositivos, los modelos de configuración, las máquinas de estado y los escenarios de conectividad, incluida la simulación de streaming de vídeo en tiempo real. Eso permitió a los equipos validar la integración de los dispositivos futuros contra el software y el ecosistema cloud existentes antes de que hubiera hardware disponible. El emulador solo era útil si los ingenieros confiaban en él, así que traté sus APIs internas como una superficie de producto —limpias, documentadas y con soporte— y amplié la cobertura de pruebas automatizadas sobre los propios motores de simulación.
El compromiso
Un emulador es un modelo, y todo modelo está equivocado en algún punto. El peligro es un equipo que empieza a creerle a la simulación por encima del dispositivo. Trazamos la línea de forma explícita: el emulador era autoritativo para la lógica de máquinas de estado y conectividad, y nunca para el timing ni el comportamiento de radio. Saber con precisión dónde una herramienta deja de ser confiable es lo que hace seguro apoyarse en ella: una herramienta con los bordes sin marcar es peor que no tener herramienta, porque se confía en ella justo donde no se debe.
Impacto
Dispositivos futuros validados contra el stack de software antes de que existiera el hardware
- Plataforma de emulación IoT distribuida entregada para las cámaras y videoporteros de Ring, simulando el comportamiento del hardware y los flujos de conectividad
- Dispositivos futuros validados contra el stack de software existente de Ring antes de que hubiera prototipos físicos, desbloqueando a los equipos de ingeniería
- Simulación de streaming de vídeo en tiempo real construida para ejercitar rutas de medios e integración sin hardware físico
- Flujos de aprovisionamiento, modelos de configuración y máquinas de estado de dispositivos reproducidos con fidelidad
- Cobertura de pruebas automatizadas ampliada significativamente en los motores de simulación críticos
- APIs internas arquitectadas y documentadas como una superficie de desarrollo con soporte
Lo que aprendí
La experiencia de desarrollo es una característica de fiabilidad. La adopción del emulador siguió mucho más de cerca la calidad de su API y su documentación que la fidelidad de su simulación. Una herramienta precisa que los ingenieros evitan no protege nada.