Troubleshooting physical world problems is pretty much the same process as debugging a program. That is why learning to debug software is so valuable.

Simply put, you have to pick the process apart, see where it is working and where it isn’t then finding where it goes wrong. When you ‘fix’ it you have to make sure you don’t ‘break’ it for other situations.

If you’re looking and looking and looking at your code, your module, a function, whatever and it looks like it should be working, that it doesn’t seem to be the source of your problems — the trouble is somewhere else.

Kind of obvious but I know I beat my head against the wall, trying to find my bug, way too many times before this occurred to me.

My renters called with the bathroom faucet now flowing well. They had cleaned the aerator screens but still had a problem. I checked the valves – not the problem. I checked the supply from under the sink – good flow. I then checked the screens and, yes, they are clear of grit but the water at the spigot without the screens was fine. The problem was that the aerator itself was choked with lime deposits; trip to Home Depot and $5 later and it was flowing just fine.

Track down the problem until you find the source, then the solution is evident.