Timers, where to use them and how would they affect performence

I’m wondering if it’d be bad to let the client handle a timer in a situation where you need to assign each player their own timer, or rather
a good thing since you’re putting much less load on the server and just letting the client do some very minor lifting.

Please be more specific. What are you using the timers for? Also, do you want their values to match exactly for all clients or finish at the exact same point? It really depends what you want to use them for.

“Their own timer” as in they’d be activated and ran at completely different times.
Nothing more than showing time.

If you want to show the time on client, then there’s really no other way than to have the timer on the client (unless you want to literally send a net message to the server every frame).
You don’t even need to use the timer library if you just want to draw it. You could do something like this:

-- Serverside:
util.AddNetworkString( "TimerStarted" ) -- send this to a client to start a 500 second timer

-- Clientside:
local timer = 0 -- store a timer variable to be set later

net.Receive( "TimerStarted", function()
    timer = CurTime() + 500 -- this makes a timer with 500 seconds on it
end )

hook.Add( "HUDPaint", "blah", function()
    local timeLeft = timer - CurTime()
    -- draw the time left