I got a need for a timer once, but existing projects did not suit me: I do not wish to set it with buttons and I wish to control external load with it. So, as it is not complex task, I decided to design it by myself. This timer is successfull in work more than a year already.
A MCU AT89C2051 was selected as cheap and known to me. Source was written in assembly with using fasmg and debugged with sz89S52 device. Hardware was assembled at hard paper board, which serves as cover also, and wired with single core varnished wire. Schematic was designed with kicad , mounting drawing was designed with QCad (attached drawing is not the last version, as it was slightly modified after initial assembly).
After power on the timer is set to initial value 10 minutes. The time can be adjusted with rotating encoder knob. Short press on knob starts timer (encoder has built-in switch). While timer is working the digits on display are blinking shortly. End of work is signaling with sound beeping and long blinking of "00" at display. Short press on knob resets timer. Timer can be paused at any time by pressing encoder knob until blinking stops. You may start it again when needed (keep in mind: pausing resets seconds counter).
Timer has output, connected directly to MCU with resistor 330 Ohm and active while timer is working (low level). This output designed to drive optocoupler to control power load. You may use it in other way with relay etc., but you must use transitors to drive it and keep in mind the schematics to not destroy MCU with overvoltage or overload. Short circuit of output must not damage MCU thanks to resistor 330 Ohm.