We have a free tool called CronitorCLI that includes a cron-like shell. You can run and test your scripts in an environment that matches how they will be run by cron itself.
Thank you for many years of reassuring me when I doubted my cron-expressions.
Cron has no diagnostics whatsoever. Most asked question "How do I force run cron job for debugging" and answer "You don't"
You just add script and pray it works. If it doesn't work there is nothing to work with. No logs, no checks. Nothing.
It not 1-to-1 replacement. It is superior replacement. Cron is just unusable.
All the cron issues I've had boiled down to a difference in env vars. So testing the cronjob means reproducing the environment like this SO answer explains.
https://stackoverflow.com/questions/2135478/how-to-simulate-...
And quite frankly, your experience is likely due to your personal knowledge bias. Systemd timers are quite easy to debug, in fact easier than cron in my opinion. systemctl list-timers lists all the timers, when they last ran, when they will run next, and you can use other commands to inspect each timer in detail and all associated logs.
In contrast, I find cron much harder to debug. Starting with the first problem, you must first figure out what cron is running, as different implementations have different behavior!
Although speaking of which, cron dropping privileges is not as secure as systemd running as the user before parsing the user's timers, from a defense-in-depth perspective.