I made a clock. It’s based on the clock that sits in front of me when I’m working.

As a modeling exercise, this isn’t particularly challenging. So I tried to make this clock do something the one on my desk never does: tell time properly.
My first instinct was to use object constraints to copy the rotation from the second hand at 1/60th the rate, then copy the minute hand’s rotation at 1/12th rate to the hour hand. This quickly ran into problems.
First, driving rotation from the second hand means that it takes forever to move the hour hand. And I wanted to be able to set the time on this clock easily. Why not just use the hour hands rotation as a base, and multiply that? Blender won’t allow that with the Copy Rotation constraint. It will, sort of, allow that with the Transform constraint, which purports to turn rotation, scale or location from one object and pass those transforms to another object. You could use one object’s location to determine the rotation of something else. It sounded cool, but I couldn’t get it to work. Which brought me to Drivers.
Drivers appear terrifyingly complex. Appearances are not deceiving in this case, but it doesn’t matter, because Drivers work, and when they don’t, there are clear error messages to help you troubleshoot. That alone makes them worthwhile. An hour working with object constraints will drive you mad trying to find what’s parented where. If you want to give drivers a try, this guy’s video is a fantastic place to start. As for me, I’m using drivers whenever possible from now on.