I was the API architect on a project for delivering backend services that were consumed by a mobile application. There were two main APIs. The configuration API was read-only, and the devices called it to check for updates to settings and software. The events API was write-only, and the devices posted anonymous events about user behavior, which the product team used to inform design decisions for the next generation of devices.
The APIs supported over 1.5 million devices. The configuration APIs needed high availability; they had to respond quickly to device calls and scale to thousands of concurrent requests per second. The events APIs consumed data from the devices and pushed events to a message queue. Listening ...