Here’s whats happening:
1 - You make a move
2 - Your move is sent to the server
3 - Server saves your move and accommodates lag
4 - Server sends the move to your opponent
5 - You opponent sees your move
6-10 - is the same process in reverse.
If there are any delays in the communication on steps 2 - 4 or 7 - 8, you will see the clocks adjusted to accommodate this lag. You will only see the clocks adjusted on your client when the move comes back from the server, so all accumulated adjustments are seen in one big jump. These adjustments are not affected by your pre-move as the total time that your client took to respond is used.
While on an average connection the latency will be hardly noticeable, on slower connections it can be quite significant. If your browser takes 5 sec to send or receive data from our servers, you’ll see a 10 sec jump when their move comes back. (minus the 2 sec allowance we give you) This is done so that the person causing the lag takes the penalty, not the person on the other end.
There are ways around this like: closing other browser tabs, minimising streaming or torrenting, freeing up enough memory on your computer or closing and re-opening your browser. If your connection is still too slow then try playing longer games where this is less of an issue.
For more details and an example of how this works, continue reading here.