surface code
Real qubits are noisy: they drift and flip far too often to run a long computation directly. The fix is to spread the information of one good qubit across many physical ones, so that errors can be spotted and undone before they pile up. The surface code is today's most practical way to do this. Picture qubits laid out on a flat 2D grid, like beads on a checkerboard. Some beads carry the data; the others are 'helper' qubits that the machine keeps poking with simple parity checks, asking only 'do you and your immediate neighbors agree?' Crucially, each check involves just a few neighboring qubits sitting right next to each other, which is exactly the kind of local, side-by-side wiring that real hardware can actually build.
Those parity checks never reveal the data itself (that would collapse it), but they do reveal a fingerprint of where an error struck. From that pattern of disagreements, a classical decoding algorithm figures out what most likely went wrong and corrects it. The big draw is tolerance: the surface code keeps working even when each physical operation fails around one time in a hundred (a threshold near 1%), which is roughly where good hardware is starting to land. Stay below that error rate and you can drive the logical error rate down as low as you like by making the grid bigger.
The catch is cost. 'Bigger grid' means a lot of physical qubits to protect a single reliable 'logical' qubit, often hundreds to thousands of them, plus fast classical computers running the decoder in real time. That overhead is the main reason large fault-tolerant machines do not exist yet, and why we are still in the NISQ era of small, noisy devices. The surface code is the leading roadmap toward error-corrected computing, not a feature you can switch on today.
The ~1% figure is a threshold, not a guarantee: it only helps if your hardware stays below it, and the qubit overhead per logical qubit remains large.