When developing any piece of software, it's all too easy to start writing code without thinking about all of the details. Thanks to code generation tools and third-party libraries, we can very quickly develop a feature-filled application and have it running on actual hardware in fairly short order. However, when it comes to getting every part of a system working 100% of the time, things are a bit more difficult. If a system is stood up too quickly and the components weren't properly tested before integrating them, there would be pieces that work most of the time, but not always.
Often with embedded systems, only a few parts of the underlying application are visible. It can be challenging to evaluate the overall system health from a user's viewpoint. Historically, good debug tooling was less common for embedded work than...