Developing software for embedded systems can be challenging since every system is in many ways different from the others and has lots of unique features. Software is usually the part of a system that is more malleable than the others. We can still have pending decisions regarding functionalities such as content presented on the display, LED behavior in some cases (eg. on/off/blinking meanings) when the development starts, but the communication protocols and other functionalities such as controlling hardware elements like breakers, tampering sensors, measuring devices are pretty much set in stone since their description in the specifications phase, so these functionalities can be developed even before any actual hardware is available for testing.
This usually means that Andrea Software develops the code to a similar but readily available hardware and we install or migrate the software to the new hardware when it becomes available.