In the end, there were three factors that initially made me scratch my head over the data I saw: First, I a bad MAF. It read low, causing the car to think there is less air than there really was, so the computer dialed the fuel back accordingly, which caused an overly lean mixture. The oxygen sensors detect too much oxygen in the exhaust and tell the computer to inject more fuel. That's the fuel trim number. There is a short term fuel trim, which normally fluctuates quite a bit depending on load, etc. Then there is long term fuel trim, which should be close to 0. I had consistently +12% long term fuel trim, and sometimes +20% short term. Both of them max out at some point, giving you E3/E4. I don't know the threshold for the MIL, but it must be much higher than the threshold for the internal E3/E4, which I am getting a lot without having had the MIL in a loooong time.
Secondly, I had vacuum leaks in several locations (all on the supercharger vacuum lines and connectors, so I cannot comment on where that happens most likely with N/A cars - search, there is a lot of info out here).
Thirdly, I had a clogged fuel filter (about 70k on it) that contributed to fuel starvation.
You need to get the fuel trim values, so you know if you are lean or rich. Once you get the MIL, the P-code will tell you, but before that happens, you probably need some scan tool/software. Then, consider this: The malcondition (rich/lean) may actually physically be present, which means either too little fuel (e.g. clogged injectors?) and/or too much air (usually extra air sucked in via vacuum leaks after the MAF) for lean, or reverse for rich. On the other hand, the fuel/air mixture might in fact be right, but the oxygen sensors are bad and fool the computer (and you) into thinking the fuel trim needs to be adjusted.
Vacuum is strongest in idle, so if you have a vacuum leak, you should see the short term fuel trim be highest in idle, and diminish if you give it some gas. Can do that in neutral, on your driveway. If the lean condition sets in only under heavy load, you may suspect fuel starvation (e.g. clogged fuel filter or injectors). I had some of both, really confusing, but when I fixed the three issues I had one by one, the fuel trim numbers showed the effect each time quite nicely.
I am using Digimoto software with the ELM interface they sell on their web site. Search on diagnostic tools, and you'll get many (sometimes quite strong)opinions on what is good and what is better....
Check out the Wells Engine Management Newsletters (free on the web). You'll learn a lot about this kind of stuff.
Btw, I searched a lot and did not find a reliable way to diagnose the MAF. Really impossible to tell if it's good or bad. Someone on here posted all sorts of resistances he measured, concluding one way or the other. I tried that and got totally different numbers, for both the good and the bad MAF.
Also, I did the fuel flow rate test that's described in Bentleys, and got about 1/3 of the flow they said I should be getting. That prompted me to replace the fuel filter. However, with the new filter I got the same numbers. Go figure. Anyway, replacement of the fuel filter brought the fuel trim numbers down noticeably.