ChessCube manages all times centrally on our server, but each Users client keeps and displays a local version of the games time that is checked against the central server with each move. The delay comes in when a browser has a delay (lag) in fetching moves from the server. Here's whats happening:
Your move is sent from your board to the Chesscube server and then on to your opponents board. He makes a move and it is sent back to the servers and on to your board. The issue comes in when there is a delay (lag) in communicating with the server, which is why we keep time centrally on our servers and adjust the Users’ boards from there. (This also prevents clock manipulation by users as the client doesn’t actually control the time.)
Here is a simple example to show it in action:
Even in this very simple example of 3 moves with only one user experiencing lag and only when they are submitting a move (not receiving), there is a noticeable adjustment. Note that the User B sees their time go down and the User A's go up. In cases of higher lag these adjustments may seem far more severe.
Any lag (or latency) less than 2 seconds is accommodated for. (details here) In this case the first 2 sec is adjusted for, but User B is penalised for the remaining 2 sec of lag. You can see a players lag by the indicator bar next to their time:
The reason we maintain clocks centrally is so that times CANNOT be tampered with. Most other sites don't have this central check in place which actually makes them far more susceptible to someone modifying their times as it's all controlled by their client.
Lag can be caused by either a slow internet connection or low browser or Flash memory. Find out more details here on how to fix it.