"Embedded firmware updates - especially for M2M devices that are not necessarily user-facing - are sort of like changing the engine of your car while driving down the highway. It's a very tricky thing to get right. Plus if something goes wrong, it's not like you can just SSH into your server or kill that cloud instance and start a new one :)" -- I worked on marking 'embedded firmware installation' process better in a previous job of mine and you described the problems involved perfectly. There was a part of the process in which communicating with the device and attaching debuggers was a major pain and I had to rely on extensive tracing to keep an eye on the process. I personally believe that the better way would be to emulate what NixOS does(https://nixos.org/~eelco/pubs/nixos-jfp-final.pdf). Painless rollbacks and reliable updates would help embedded development a lot and treating the state of the device as immutable is a great way of doing that.