Haha, no sane programmer likes dealing with latency in an authoritative server model. It is one of the infamous problems of game development. It is responsible for so many hacks, both by developers and exploiters.
Yes, the client plays the movement immediately. If the client tells the server to only move 5 studs, then the client shouldn’t move 10, but stop when it reaches 5 studs. Generally, the client should send player input to the server, like “w was pressed”, which tells the server which direction to move in rather than a specific distance. The client just moves slower in that direction until the server sends the official update to all clients. This can be hidden as a speeding up in a direction, since instantaneous velocity changes are not realistic anyways. The update from the server contains the server state (like the position), the action (like direction and velocity to move), and a timestamp (so clients know exactly where the server is even after a long transfer period on the wire).
Now, sometimes as you hinted at, the client will underestimate or overestimate the latency, meaning that the interpolated position is a bit off from what the server says it should be. This is unfortunate and there is no fix for it. Lag spikes are very bad, with client ownership, server ownership, and every other model. Game developers can’t do anything to fix this short of wiring their servers directly to their players’ houses. However, game developers can do their best to hide it. How you hide this position discrepancy is up to you, but usually tweening to the correct position is the best method. I’ve played games that use teleportation, and I’d really prefer that they didn’t. The visual effect of being transported is jarring. I’d really like them to lie to my face and just tween the positions.