Quick answer: Z-fighting is when two surfaces at the same or nearly-the-same depth flicker as the GPU can't consistently decide which is in front, because the depth buffer lacks the precision to distinguish them. Fix it by separating the surfaces so they're not coplanar, improving depth-buffer precision (especially by tightening the near and far clip planes, which has a big effect), and using depth bias/offset where surfaces must be close.
Z-fighting is a specific, common rendering artifact: surfaces that overlap at the same depth shimmer and flicker as the renderer alternates which one to draw on top. It's caused by limited depth precision, and once you understand that, the fixes, separating depths and increasing precision, follow directly.
What Causes Z-Fighting
The GPU uses a depth buffer to decide which surface is in front at each pixel, but the depth buffer has finite precision. When two surfaces are at the same depth, or so close that their depth values fall within the same precision step, the GPU can't reliably tell which is nearer, so it inconsistently picks one then the other across pixels and frames, producing the characteristic flickering/shimmering of z-fighting. This happens with coplanar or nearly-coplanar surfaces (two faces at the same position, a decal flush on a wall, overlapping geometry).
Depth precision is also unevenly distributed, it's much higher near the camera and lower far away, so z-fighting is worse for distant surfaces. And the near/far clip plane ratio strongly affects precision: a very close near plane combined with a very far far plane wastes precision, making z-fighting more likely. So z-fighting is fundamentally a depth-precision-versus-surface-separation problem.
How to Diagnose It
Z-fighting is visually distinctive, specific surfaces flickering/shimmering where they overlap, especially at distance or where geometry is coplanar. Identify the fighting surfaces (the ones flickering against each other), they'll be at the same or nearly the same depth. Check whether it's worse far from the camera (a precision distribution clue) and look at your near/far clip plane settings (a too-close near plane and too-far far plane worsen precision).
It's usually reproducible directly (look at the flickering surfaces), and it may be slightly worse on hardware with less depth precision, but it's fundamentally a content/precision issue rather than a hardware compatibility one. The investigation is in your geometry (coplanar surfaces) and depth settings (clip planes, buffer precision).
How to Fix It
Separate depths and improve precision. Separate the surfaces, don't place surfaces exactly coplanar, offset them by a small amount so their depths are distinguishable (move the decal slightly off the wall, avoid overlapping faces at identical positions). Improve depth precision, the highest-leverage tweak is tightening your near and far clip planes, push the near plane as far out as you can and pull the far plane as close as you can (a smaller near-to-far ratio dramatically improves depth precision), which reduces z-fighting across the scene. Consider a higher-precision depth buffer if available. Use depth bias/offset, where surfaces must be very close (decals, coplanar details), apply a depth bias/polygon offset to nudge one in front consistently.
Tightening the near/far planes is often the single most effective fix because so much z-fighting stems from wasted precision from an overly-wide clip range. After fixing, verify the flickering surfaces render stably (one consistently in front) at all distances. Z-fighting is a well-understood, very fixable artifact once you address the depth-precision-versus-separation root cause.
Z-fighting is two surfaces too close for the depth buffer to separate. Offset coplanar surfaces, and tighten your near/far clip planes, the biggest precision win, plus depth bias where needed.