The short answer
Across 3 independent positions, moving the same piece twice never came out top of the candidates compared. The gap to the top candidate averaged 0.51 pawns and reached 0.88. Not losing, then — but consistently a little worse.
(“Top” here means top of the candidates compared, not the best move among all legal moves — see how we tested it.)
What we are testing
The opening is about getting pieces to useful squares quickly. Moving a piece that is already out delays bringing out a new one, which is why beginners are told not to move the same piece twice.
Plenty of established openings break that rule, though. So how much does the repeat move actually cost, and does it cost anything at all in the lines where theory allows it? Three positions, every candidate searched.
How we tested it
Testing a rule of thumb in one position cannot tell you whether you are seeing the rule or just that position. So we picked 3 positions of different character — open and closed, White to move and Black to move. In each one, every candidate is played and the resulting position is searched. All the numbers are real output, not estimates.
What is compared is a set of candidate moves relevant to the article, not every legal move: the move under test, and the moves a player would normally consider there. So the top row of a table is not "the best move in the position" but the highest-scoring move among those compared.
On top of that, each position is also searched once with no candidate list, and the move the engine itself picks is recorded (it is shown with each position below). This is there to catch a candidate list that quietly decides the answer: the generator aborts if that free choice beats the top candidate by 0.50 or more. Across the current data the largest such difference is 0.18.
Position by position
| Position | Top candidate | Move tested | Gap |
|---|---|---|---|
| Moving the same knight again in a 1.d4 opening (White to move) | c4 +0.29 | Ne5 −0.22 | 0.51 |
| The same knight twice in the Italian (White to move) | d3 +0.23 | Ng5 +0.08 | 0.15 |
| Black moving the same knight twice (Black to move) | Be7 −0.35 | Nd4 −1.23 | 0.88 |
Position 1|Moving the same knight again in a 1.d4 opening (White to move)
1.d4 d5 2.Nf3 Nf6
FENrnbqkb1r/ppp1pppp/5n2/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3
The highest-scoring candidate was c4 (+0.29). Ne5 scored −0.22, a gap of 0.51.
Searched with no candidate list imposed, at the same depth, the engine also chose c4.
Tap a candidate move to change the board
| Move | Evaluation | Diff vs top candidate |
|---|---|---|
| c4 | +0.29 | baseline |
| Bf4 | +0.17 | −0.12 |
| e3 | +0.16 | −0.13 |
| g3 | +0.09 | −0.20 |
| Ne5 | −0.22 | −0.51 |
Position 2|The same knight twice in the Italian (White to move)
1.e4 e5 2.Nf3 Nc6 3.Bc4 Nf6
FENr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4
The highest-scoring candidate was d3 (+0.23). Ng5 scored +0.08, a gap of 0.15.
Searched with no candidate list imposed, at the same depth, the engine also chose d3.
Tap a candidate move to change the board
| Move | Evaluation | Diff vs top candidate |
|---|---|---|
| d3 | +0.23 | baseline |
| d4 | +0.17 | −0.06 |
| Ng5 | +0.08 | −0.15 |
| Nc3 | −0.11 | −0.34 |
| O-O | −0.26 | −0.49 |
Position 3|Black moving the same knight twice (Black to move)
1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.O-O
FENr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5
The highest-scoring candidate was Be7 (−0.35). Nd4 scored −1.23, a gap of 0.88.
Searched with no candidate list imposed, at the same depth, the engine's own first choice was Nxe4 — a move that is in the table above. That search is not the same procedure as playing each candidate first and searching the position that follows, so the order can differ.
Tap a candidate move to change the board
| Move | Evaluation | Diff vs top candidate |
|---|---|---|
| Be7 | −0.35 | baseline |
| Nxe4 | −0.36 | −0.01 |
| b5 | −0.44 | −0.09 |
| d6 | −0.46 | −0.11 |
| Nd4 | −1.23 | −0.88 |
Where the difference comes from
In all three positions the repeat move came out below the top candidate, by 0.51 on average. In the engine’s lines the pattern repeats: while one side moves the same piece around, the other finishes developing, and the wandering piece ends up driven back to where it started.
But the spread is wide. Black’s Nd4 drops 0.88, while Ng5 in the Italian costs only 0.15 — and Ng5 is the entry to the Fried Liver Attack, played countless times. Breaking the rule is fine when what you get for it is large enough, and the numbers show exactly that.
Exceptions
What this measures is the cost of the repeat move by itself. A move like Ng5, which spends the tempo to aim directly at a weakness (f7), earns almost all of it back.
Put the other way round: do not move a piece again unless you can say what the move is for. "Never move the same piece twice" is a worse fit for the data than "if you move it again, be able to explain why".
What this does and does not show
- It shows: what the engine returned for these 3 positions, with the chosen candidates searched to depth 20. The numbers are the raw output; none of them were adjusted afterwards.
- It does not show: anything about "all positions" — a sample of 3 is a very small slice of chess.
- The assumption: an evaluation assumes best play from both sides. Over the board, an inaccurate reply changes everything.
- Reproducing it: every number here is built from chess-analysis.json, the raw output of the run — positions, candidates, scores and principal variations. Running the same engine with the settings above reproduces them exactly: the search is single-threaded, the hash is cleared before each position, and the depth is fixed. A different engine version or hash size will give different numbers.

What to remember at the board
- In all three positions, moving the same piece again fell short of the top candidate
- The gap averaged 0.51 and reached 0.88
- Ng5 in the Italian costs only 0.15 — enough compensation to be theory
- Move a piece twice only when you can name what it attacks
Try it yourself
You can try the same idea in a real game. Every move is scored by the engine, so the difference between principled and careless moves shows up immediately.