I'd recommend running the physics step before your other update code. That gives code in your UpdateScene function a chance to react to things that changed in the physics step.
Maybe you have an object whose sprite should change to face the direction it's currently moving in, or you're using velocity to control squash and stretch on a cartoony character. If that code runs before the physics step, the velocity might have changed by the time you render the scene, leading to these visual changes appearing to lag a frame behind.
As noted in the comments, many games will also implement a fixed timestep, where physics and other gameplay-sensitive code is run with a constant amount of game time elapsing in each tick, decoupled from the current rendering framerate. This can be good for consistency across a range of hardware. That pattern usually looks something like this:
while (ShouldRun()) { // Handle quitting float deltaTime = GetTimeSinceLastFrame(); accumulator += deltaTime; while (accumulator >= fixedDeltaTime) { // Handle simulation updates that need to be ticked at a constant // rate (0, 1, or more times) to catch up to real-time. ProcessPhysics(fixedDeltaTime); ProcessGameSystems(fixedDeltaTime); accumulator -= fixedDeltaTime; } // Handle visual updates that need to be ticked exactly once per frame. // Doing this after the sim update lets us react/fix-up visuals just in time. VariableRateUpdate(deltaTime); // Render the scene - potentially interpolating between the two // most recent simulation steps for smoothness. float interpolation = accumulator / fixedDeltaTime; RenderScene(interpolation); }