Start with what you actually held, not your FTP
Most guides jump straight to intensity factor. The problem is that IF is only as good as the FTP underneath it, and a lot of age-groupers are working off a number that is stale or was never tested properly. A high IF against a wrong FTP tells you nothing.
The comparison that holds up is against power you have genuinely sustained before, in a race or a long hard session. If your race sat well above the best you have held for that kind of duration, that is the honest signal you went too deep. If it sat at or below it, the run problem probably lives somewhere else.
Then look at the second half of the bike
Split the bike in two. If your power in the back half dropped noticeably while your effort felt the same or harder, you spent the first half writing a cheque the second half could not cash. Steady or slightly negative power splits are what a well-executed bike looks like.
Check how your heart rate tracked your power
Early in the bike, heart rate and power move together. When heart rate keeps climbing late while power stays flat or fades, that decoupling is one of the clearer marks of an effort that ran past what you could hold. Heat and dehydration push the same way, so this is a clue, not a verdict on its own.
Look at variability, but do not over-read it
A choppy power file with big surges and coasting costs you more than the average suggests, and it hurts the legs for the run. A smoother ride at the same average is a better ride. On a hilly course some variability is unavoidable, so judge it against the terrain, not against a flat-course ideal.
Read it against the run
The tell that ties it together is the run pattern. An overbike usually shows as a run that starts near target and decays through the first few kilometres as the legs give out, rather than a run that was flat and slow from the gun. A slow-from-the-start run points more at run pacing, fuelling or fitness than at the bike.
None of these is proof on its own. Overbiking is a case you build from several signals pointing the same way, which is exactly why it is easy to call wrong and worth being careful about.
Or skip the manual read
All of the above is what The Debrief does when you upload your race file. It runs the comparison against what you have actually sustained, checks the fade, the decoupling and the run pattern, and gives you the read in plain language. It will also tell you when the file does not support a firm answer, instead of inventing one.