Most IoT applications share the same challenges. It is also interesting, that also relatively simple use cases in applications require more complex solutions than one would initially expect. Programs on gateways work without direct supervision and are administered remotely. This means that the programs must be robust. If one had to press a button on the device to reboot upon an error, it would quickly be an expensive affair.