Working on electronics makes me appreciate how easy software engineering is.
Why is that? Personally I can work efficiently when I have a tight feedback loop and when I can simulate the environment I’m working in. This allows me to make small changes and quickly converge my design towards the desired state I want to reach.
With electronics establishing a tight feedback loop is much more complicated. Assuming you layed down your schematic, sanity checked all nets and verified your PCB with design rule checks you eventually end up ordering a PCB. If that PCB has any flaws the only option you have to establish a feedback loop is to rework traces; cutting them with a knife, and resoldering new traces with enameled wire.
While this works, it is much more involved and it requires much more time. With software my feedback loops are minutes, often seconds. With hardware I’m looking at hours, sometimes days depending on the rework required.
But what about simulating environments? The best I could find for hardware is SPICE, which only simulates analog electronics. There seems to be nothing which allows me to simulate a communication bus like I2C and different ICs like I/O expanders connected to this bus. Because of this I need to accept a compromise because I can’t emulate the MCUs or ICs I use. Interactions which rely on a combination of analog signals and logic embedded in the system firmware of a MCU can not be simulated today.
So the compromise I have to make is to decouple all my code from the system it is executed on.
More often than not this compromise reduces my trust in the simulation. It causes a lack of automated end-to-end tests, forcing time intense manual verification for every change.
Not an ideal situation and yet good enough for my small hobby projects.
But it makes me wonder: how do professional EEs handle challenges regarding cycle time and automated system verification?