Scan in a fixed order

Check every row for pairs, then every column. Next count 0s and 1s in lines that are close to half full. A repeatable scan catches forced moves that a random search misses.

Use pairs and sandwiches

Two equal values side by side force the cell on either open end to be opposite. Two equal values with one blank between them force that middle cell to be opposite.

Sandwich example
1 _ 1 0 _ 01 0 1 0 1 0

Both open cells are forced by the no-three rule before any counting is needed.

Finish a balanced line

A 10x10 row needs five 0s and five 1s. Once it already has five of one value, every remaining blank takes the other value. Apply the same count vertically.

Compare valid line patterns

When local rules do not force a move, list the full row patterns that still fit its clues. If every valid pattern puts the same value in one position, that position is solved.

You do not need to write every pattern down. On larger boards, compare the most constrained line first, usually the line with the fewest blanks.

Protect line uniqueness

Compare a nearly complete row with finished rows. If one candidate would create a duplicate, remove that candidate. The same reasoning applies to columns.

Use contradiction carefully

For a difficult cell, assume one value and follow only forced consequences. If the assumption creates a triple, an unbalanced line, a duplicate, or a line with no valid pattern, the opposite value is proven.

This is still logic, not guessing, because you reject a branch only after identifying the exact rule it violates.