I write embedded software. I always run into hardware issues, some of which can take weeks to prove it's the hardware, not the software. There's no way to predict that kind of thing.
My claim to fame was an Intel Ethernet chip that came out in 90/91. It had a bug, I found a workaround. I sent a bug report to Intel, it was in errata for the chip. 3-4 years later I was introduced to Linux. Out of curiousity I looked into the driver for this chip, they had my workaround line for line.
The problem? You could build linked lists of packets to be sent. When you built the first packet you put it on the list, then set a bit saying "I got a packet to send". Problem was, that bit didn't work until a few hundred ms later. When you built the first packet you could link to the second packet, that linked to the third packet, etc.
My hack? I had an available packet of 0 bytes at the front of the queue. Chip kept spinning looking for something to send. I built my first packet, stuck it at the front of the queue, chip sent my packet immediately.