Pistons begin activating 1 gametick after they are powered (setup to show this attached below). Timing like this do not follow the timings of other consumers, such as rails, trapdoors, doors, and fence gates, which activate in the same tick they are powered (setup to show this below).
To reproduce pistons not firing until 1 gametick after being powered, place 1 sticky piston with a block in front, and two repeaters, one pointing into the piston, and one pointing into the block. When they are powered the redstone dust on the other side does fire (but doesn’t visually update, because it’s a 1 gametick pulse). The 1 gametick pulse shows the piston does not begin activation until 1 gametick after being powered. (Use setup from photo 3)
Another way to reproduce this is having a sticky piston with a block in front which is cutting a redstone dust line, the dust under the block needs to be powered. Once the piston is activated, the dust begins powering the other side in a producer tick or 1 gametick after the piston is powered. (Use setup from photo 2)
To see that rails, trapdoors, doors, and fence gates (other consumers) activate in the same tick they are powered place a redstone dust, place a block next to it, and place a repeater on the other side of the block. The repeater powers the dust in a consumer tick first, so the dust has not visually updated yet, but the rail, trapdoor, door, and fence gate all activate in the consumer tick, or the same tick they are powered. (Use setup from photo 1)