IMO, the hardest is to initially find the faulty subsystem, and then to find a suitable instrument to trace/debug it.

It's great if you have a working software which shows the possible culprit (as in this case), but often you have only vague guess what could be the reason, and you need to test everything one by one, write you own code, or sometimes use hardware probe.