Every QR code has a Reed-Solomon error-correction level baked in — L (~7% recovery), M (~15%), Q (~25%), H (~30%) — and picking the wrong one either wastes visual density or leaves you with a code that stops scanning the moment it gets a little damaged.

Here's the actual decision, not just the percentages:

L — clean digital display only (a code shown on a screen, never printed, never overlaid with anything). Smallest, least dense module grid for a given payload.

M — the safe default for most printed material. Handles minor print smudging or a slightly low-quality printer.

Q — printed material that gets handled a lot (product packaging, shipping labels) or is at moderate risk of scuffing.